重要
此功能在 Beta 版中。
本教程介绍如何在 Unity 目录中配置行筛选器和列掩码基于属性的访问控制(ABAC)策略。
在此示例中,美国分析团队不应能够访问欧盟客户记录或 SSN,但是他们应该能够访问同一表中的其他客户和客户数据。 本教程包括以下内容:
- 启用标记策略和 ABAC 测试版
- 创建标记策略
- 创建 Unity Catalog 目录、模式和表
- 将受治理的标记应用于列
- 创建 UDF 以隐藏欧盟成员的数据
- 创建行筛选器策略
- 创建用于隐藏 SSN 的 UDF
- 创建列掩码策略
- 按照策略选择您的表格
步骤 1:启用标记策略和 ABAC Beta 版
作为帐户管理员,登录到帐户控制台。
在边栏中,单击“ 预览”。
将标记策略切换为开。
作为工作区管理员,单击 Azure Databricks 工作区顶部栏中的用户名。
从菜单中选择 预览。
将 “基于属性的访问控制 ”开关设置为 “开”。
步骤 2:创建标记策略
若要创建标记策略,必须在帐户级别具有标记策略 CREATE 权限。 默认情况下,帐户和工作区管理员具有创建权限。
在 Azure Databricks 工作区中,单击
目录。
在“ 快速访问 ”页上,单击“ 标记策略 > ”按钮。
单击“ 创建标记策略”。
输入标记键
pii
。输入标记策略的描述。
输入标记的允许值:
ssn
和address
。 只能将这些值分配给此标记键。单击 “创建” 。
重要
可以全局复制标记数据。 请勿使用可能损害资源安全性的标记名称或值。 例如,不要使用包含个人信息或敏感信息的标记名称。
步骤 3:创建客户表
若要执行这些步骤,您必须在 Unity Catalog 元存储上拥有 CREATE CATALOG
权限。 您可以在您有权限的 CREATE TABLE
架构中创建表。
- 在边栏中,单击“+ 新建”“笔记本”>。
- 选择
SQL
作为笔记本语言。 - 单击“连接”并将笔记本附加到计算资源。
- 将以下命令添加到笔记本并运行它们:
-- 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');
步骤 4:将受治理的标记添加到 PII 列
- 将以下命令添加到笔记本并运行它:
-- 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');
步骤 5:创建 UDF 以查找欧盟地址
- 将以下命令添加到笔记本并运行它:
-- 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(这意味着它不是欧盟地址)。
步骤 6:创建行筛选器策略
单击
目录。
在
abac
目录旁边,单击烤肉串单击在目录资源管理器中打开。
单击“策略”选项卡。
单击“新建策略”。
在 “常规”中,输入策略的名称
hide_eu_customers
和说明。在 负责人中:
- 在 “应用于...”中,搜索并选择策略适用的主体。 在此示例中,可以使用组 所有帐户用户。
- 将除了……保留为空。
在 Type 和 target 中:
- 在 “策略类型”中,选择 “行筛选器”。
- 在 策略目标中
abac
,选择策略范围的目录。 - 将 表级别条件 留空。
在 Function 中,选择您在
is_not_eu_address
创建的函数abac.customers
。在 “何时”列旁边,选择 具有标记值。
在 “键”中,选择
pii
并在 “值 ”中选择address
。单击“创建策略”。
步骤 7:测试策略
- 返回到笔记本并运行以下命令:
SELECT DISTINCT * FROM abac.customers.profiles
仅返回非欧盟居民的数据行。
名字 | 姓氏 | 电话号码 | 地址 | 社会安全号码 |
---|---|---|---|---|
恩典 | 威尔逊 | 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 |
可以继续创建列掩码策略。
步骤 8:创建用于屏蔽 SSN 的 UDF
- 将以下命令添加到笔记本并运行它:
-- Masks any SSN input by returning a fully masked value
CREATE FUNCTION mask_SSN(ssn STRING)
RETURN '***-**-****' ;
此 UDF 返回完全掩码的 SSN 字符串 ('***-**-****'),
步骤 9:创建列掩码策略
单击
目录。
在
abac
目录旁边,单击烤肉串单击在目录资源管理器中打开。
单击“策略”选项卡。
单击“新建策略”。
在 “常规”中,输入策略的名称
mask_ssn
和说明。在 负责人中:
- 在 “应用于...”中,搜索并选择策略适用的主体。 在此示例中,可以使用组 所有帐户用户。
- 将除了……保留为空。
在 Type 和 target 中:
- 在 策略类型中,选择 “列掩码”。
- 在 策略目标中
abac
,选择策略范围的目录。 - 将 表级别条件 留空。
在 Function 中,选择您在
mask_SSN
创建的函数abac.customers
。在 “何时”列旁边,选择 具有标记值。
在 “键”中,选择
pii
并在 “值 ”中选择ssn
。单击“创建策略”。
步骤 10:测试策略
- 返回到笔记本并运行以下命令:
SELECT * FROM abac.customers.profiles
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 主街, 纽约 | ***-**-**** |