教程:配置 ABAC

重要

此功能目前以公共预览版提供。

本教程介绍如何在 Unity 目录中配置行筛选器和列掩码基于属性的访问控制(ABAC)策略。

在此示例中,美国分析团队不应能够访问欧盟客户记录或 SSN。 但是,他们应该能够访问同一表中的其他客户和客户数据。 本教程包括以下步骤:

  1. 创建受管理标记
  2. 创建 Unity Catalog 目录、模式和表
  3. 将受治理的标记应用于列
  4. 创建 UDF 以隐藏欧盟成员的数据
  5. 创建行筛选器策略
  6. 创建用于隐藏 SSN 的 UDF
  7. 创建列掩码策略
  8. 按照策略选择您的表格

有关配置 ABAC 的演示,请参阅使用 Unity 目录发现 Attribute-Based 访问控制(ABAC)。

计算要求

  • 必须在 Databricks Runtime 16.4 或更高版本上使用计算。
  • 无服务器计算始终适用于 ABAC。

运行较旧运行时的计算无法访问 ABAC 保护的表。 作为临时解决方法,可以将 ABAC 配置为仅适用于特定组。 将要限制的用户添加到该组。 不在组中的用户仍然可以访问表。

步骤 1:创建受管理标记

若要创建受管理标记,必须在帐户级别具有受管理标记 CREATE 权限。 默认情况下,帐户和工作区管理员具有创建权限。

  1. 在 Azure Databricks 工作区中,单击 “数据”图标。目录

  2. 单击 “治理 ”按钮,然后单击“ 受治理标记”。

  3. 单击“ 创建受管理标记”。

  4. 输入标记键 pii

  5. 输入受治理标记的说明。

  6. 输入标记的允许值: ssnaddress。 只能将这些值分配给此标记键。

    教程:创建标记策略。

  7. 单击 “创建”

警告

标记数据以纯文本形式存储,可全局复制。 不要使用标记名称、值或描述符,这些标记名称或描述符可能会损害资源的安全性。 例如,不要使用包含个人或敏感信息的标记名称、值或描述符。

步骤 2:创建客户表

若要执行这些步骤,您必须在 Unity Catalog 元存储上拥有 CREATE CATALOG 权限。 您可以在您有权限的 CREATE TABLE 架构中创建表。

  1. 在边栏中,单击“+ 新建”“笔记本”>
  2. 选择 SQL 作为笔记本语言。
  3. 单击“连接”并将笔记本附加到计算资源
  4. 将以下命令添加到笔记本并运行它们:
-- Create catalog (if not already exists)
CREATE CATALOG IF NOT EXISTS abac;
USE CATALOG abac;

-- Create schema
CREATE SCHEMA IF NOT EXISTS customers;
USE SCHEMA customers;

-- Create table
CREATE TABLE IF NOT EXISTS profiles (
    First_Name STRING,
    Last_Name STRING,
    Phone_Number STRING,
    Address STRING,
    SSN STRING
)
USING DELTA;

-- Insert data
INSERT INTO profiles (First_Name, Last_Name, Phone_Number, Address, SSN)
VALUES
('John', 'Doe', '123-456-7890', '123 Main St, NY', '123-45-6789'),
('Jane', 'Smith', '234-567-8901', '456 Oak St, CA', '234-56-7890'),
('Alice', 'Johnson', '345-678-9012', '789 Pine St, TX', '345-67-8901'),
('Bob', 'Brown', '456-789-0123', '321 Maple St, FL', '456-78-9012'),
('Charlie', 'Davis', '567-890-1234', '654 Cedar St, IL', '567-89-0123'),
('Emily', 'White', '678-901-2345', '987 Birch St, WA', '678-90-1234'),
('Frank', 'Miller', '789-012-3456', '741 Spruce St, WA', '789-01-2345'),
('Grace', 'Wilson', '890-123-4567', '852 Elm St, NV', '890-12-3456'),
('Hank', 'Moore', '901-234-5678', '963 Walnut St, CO', '901-23-4567'),
('Ivy', 'Taylor', '012-345-6789', '159 Aspen St, AZ', '012-34-5678'),
('Liam', 'Connor', '111-222-3333', '12 Abbey Street, Dublin, Ireland EU', '111-22-3333'),
('Sophie', 'Dubois', '222-333-4444', '45 Rue de Rivoli, Paris, France Europe', '222-33-4444'),
('Hans', 'Müller', '333-444-5555', '78 Berliner Str., Berlin, Germany E.U.', '333-44-5555'),
('Elena', 'Rossi', '444-555-6666', '23 Via Roma, Milan, Italy Europe', '444-55-6666'),
('Johan', 'Andersson', '555-666-7777', '56 Drottninggatan, Stockholm, Sweden EU', '555-66-7777');

步骤 3:将受管理的标签添加到 PII 列

  1. 将以下命令添加到笔记本并运行它:
-- Add the governed tag to ssn column
ALTER TABLE abac.customers.profiles
ALTER COLUMN SSN
SET TAGS ('pii' = 'ssn');

-- Add governed tag to address column
ALTER TABLE abac.customers.profiles
ALTER COLUMN Address
SET TAGS ('pii' = 'address');

步骤 4:创建 UDF 以查找欧盟地址

  1. 将以下命令添加到笔记本并运行它:
-- Determine if an address is not in the EU
CREATE OR REPLACE FUNCTION is_not_eu_address(address STRING)
RETURNS BOOLEAN
RETURN (
    SELECT CASE
        WHEN LOWER(address) LIKE '%eu%'
          OR LOWER(address) LIKE '%e.u.%'
          OR LOWER(address) LIKE '%europe%'
        THEN FALSE
        ELSE TRUE
    END
);

此 UDF 检查给定字符串是否未显示引用欧洲或欧盟。 如果找到这些子字符串中的任何一个,则返回 FALSE(这意味着它是欧盟地址)。 如果未找到任何子字符串,则返回 TRUE(这意味着它不是欧盟地址)。

步骤 5:创建行筛选器策略

若要为对象创建策略,必须对该对象具有 MANAGE 或拥有所有权。 若要将 UDF 添加到策略中,UDF 上必须具有EXECUTE,并且它必须在 Unity Catalog 中。

  1. 单击 “数据”图标。目录

  2. 单击您之前创建的abac目录。

  3. 单击“策略”选项卡。

  4. 单击“新建策略”。

  5. 一般情况下

    • 输入 作为“名称”hide_eu_customers
    • 对于“描述”,请输入您的策略描述。
    • 对于 “应用于...”,搜索并选择策略适用的主体。 在此示例中,可以使用组 所有帐户用户
    • 保持除外...为空。
    • 对于 范围,请选择 abac 目录和所有模式。

    示例“常规”部分的 ABAC 行筛选器策略设置。

  6. 出于 目的,请选择“ 隐藏表行”。

  7. “条件”中,单击“选择现有”。 然后单击 “函数”图标。选择函数

  8. “选择函数 ”菜单中,单击 abac 目录、 customers 架构,然后单击 is_not_eu_address 之前创建的函数。

  9. 单击“选择”。

    “条件”部分的示例 ABAC 行筛选器策略设置。

  10. (可选)可以通过扩展 测试函数 并提供输入来测试掩码函数。 例如,输入 78 Berliner Str., Berlin, Germany E.U. 并单击 “运行测试 ”将正确返回 FALSE (Hide row)

    示例 ABAC 行筛选器屏蔽函数测试。

  11. 函数参数中:

    • 选择“将列映射到参数”如果它具有特定标记
    • 搜索 pii。 选择 pii : address

    函数参数部分的示例 ABAC 行筛选器策略设置。

  12. 单击“创建策略”。

步骤 6:测试策略

  1. 返回到笔记本并运行以下命令:
SELECT DISTINCT * FROM abac.customers.profiles

仅返回非欧盟居民的数据行。

名字 姓氏 电话号码 地址 SSN
恩典 威尔逊 890-123-4567 852 Elm St, NV 890-12-3456
爱丽丝 约翰生 345-678-9012 789 松树街,德克萨斯州 345-67-8901
常春藤 泰勒 012-345-6789 159 阿斯彭街, AZ 012-34-5678
弗兰克 磨坊主 789-012-3456 741 斯普鲁斯街, WA 789-01-2345
史密斯 234-567-8901 456 橡树街, CA 234-56-7890
John 母鹿 123-456-7890 123 主街, 纽约 123-45-6789
查理 戴维斯 567-890-1234 654 雪松街 伊利诺伊州 567-89-0123
艾米丽 白色 678-901-2345 987 伯奇街, 西澳大利亚州 678-90-1234
汉克 摩尔 901-234-5678 963 核桃街,科罗拉多州 901-23-4567
鲍勃 棕色 456-789-0123 321 枫叶街 佛罗里达州 456-78-9012

可以继续创建列掩码策略。

步骤 7:创建用于屏蔽 SSN 的 UDF

  1. 将以下命令添加到笔记本并运行它:
-- Masks any SSN input by returning a fully masked value
CREATE FUNCTION mask_SSN(ssn STRING)
RETURN '***-**-****' ;

此 UDF 返回完全掩码的 SSN 字符串 ('***-**-****'),

步骤 8:创建列掩码策略

若要为对象创建策略,必须对该对象具有 MANAGE 或拥有所有权。 若要将 UDF 添加到策略中,UDF 上必须具有EXECUTE,并且它必须在 Unity Catalog 中。

  1. 单击 “数据”图标。目录

  2. 单击您之前创建的abac目录。

  3. 单击“策略”选项卡。

  4. 单击“新建策略”。

  5. 一般情况下

    • 输入 作为“名称”mask_ssn
    • 对于“描述”,请输入您的策略描述。
    • 对于 “应用于...”,搜索并选择策略适用的主体。 在此示例中,可以使用组 所有帐户用户
    • 保持除外...为空。
    • 对于 范围,请选择 abac 目录和所有模式。

    “常规”部分的示例 ABAC 列掩码策略设置。

  6. 出于 目的,请选择 “屏蔽列数据”。

  7. 条件

    • 选择“屏蔽”列如果它有特定的标签。 搜索 pii 并选择 pii : ssn
    • 单击“选择现有”。 然后单击 “函数”图标。选择函数
    • “选择函数 ”菜单中,单击 abac 目录、 customers 架构,然后单击 mask_ssn 之前创建的函数。
  8. 单击“选择”。

    条件部分的 ABAC 列掩码策略设置示例。

  9. (可选)可以通过扩展 测试函数 并提供输入来测试掩码函数。 例如,输入 901-234-5678 并单击 “运行测试 ”将正确返回 ***-**-****

    示例 ABAC 列掩码函数测试。

  10. 单击“创建策略”。

步骤 9:测试策略

  1. 返回到笔记本并运行以下命令:
SELECT * FROM abac.customers.profiles

SSN 现在返回为 ***-***-***. 仅返回非欧盟居民,因为还启用了行筛选掩码。

名字 姓氏 电话号码 地址 SSN
史密斯 234-567-8901 456 橡树街, CA ***-**-****
爱丽丝 约翰生 345-678-9012 789 松树街,德克萨斯州 ***-**-****
查理 戴维斯 567-890-1234 654 雪松街 伊利诺伊州 ***-**-****
恩典 威尔逊 890-123-4567 852 Elm St, NV ***-**-****
鲍勃 棕色 456-789-0123 321 枫叶街 佛罗里达州 ***-**-****
汉克 摩尔 901-234-5678 963 核桃街,科罗拉多州 ***-**-****
常春藤 泰勒 012-345-6789 159 阿斯彭街, AZ ***-**-****
艾米丽 白色 678-901-2345 987 伯奇街, 西澳大利亚州 ***-**-****
弗兰克 磨坊主 789-012-3456 741 斯普鲁斯街, WA ***-**-****
John 母鹿 123-456-7890 123 主街, 纽约 ***-**-****