共用方式為


教學課程:設定 ABAC

這很重要

這項功能位於 測試版 (Beta) 中。

本教學課程介紹如何在 Unity 目錄中設定數據列篩選和數據行遮罩屬性型存取控制 (ABAC) 原則。

在此範例中,美國分析小組不應能夠存取歐盟客戶記錄或 SSN,不過他們應該能夠存取相同數據表中的其他客戶和客戶數據。 本教學課程包含下列內容:

  1. 啟用標籤策略和 ABAC 測試版
  2. 建立標籤原則
  3. 建立 Unity 目錄目錄、架構和數據表
  4. 將控管標籤套用至欄位
  5. 建立UDF以隱藏歐盟成員的數據
  6. 建立數據列篩選原則
  7. 建立UDF以隱藏 SSN
  8. 建立欄位遮罩原則
  9. 使用政策選取您的表格

步驟 1:啟用標籤政策和 ABAC Beta 版本

  1. 身為帳戶管理員,登入帳戶主控台。

  2. 在側邊欄中,點擊 預覽

  3. [標籤政策]切換為[開啟]

  4. 身為工作區管理員,按兩下 Azure Databricks 工作區頂端列中的用戶名稱。

  5. 從選單中,選取 [預覽]。

  6. [屬性型存取控制] 切換為 [開啟]。

步驟 2:建立標籤原則

若要建立標籤原則,您必須擁有帳戶層級的標籤原則 CREATE 權限。 帳戶和工作區管理員預設擁有創建權限。

  1. 在您的 Azure Databricks 工作區中,按兩下 [資料] 圖示。目錄

  2. 在 [ 快速存取] 頁面上,按兩下 [ 標記原則 > ] 按鈕。

  3. 點擊 建立標籤政策

  4. 輸入標籤鍵值 pii

  5. 輸入標籤原則的描述。

  6. 輸入標籤的允許值: ssnaddress。 只有這些值可以指派給這個標籤鍵。

    教學課程:建立標籤原則。

  7. 點擊 建立

這很重要

標記數據可以全域複寫。 請勿使用可能會危害資源安全性的標籤名稱或值。 例如,請勿使用包含個人或敏感性資訊的標籤名稱。

步驟 3:建立客戶數據表

若要遵循這些步驟,您必須擁有 CREATE CATALOG Unity 目錄中繼存放區的許可權。 您也可以在您擁有 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');

步驟 4:將控管標籤新增至 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');

步驟 5:建立 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(這表示它不是歐盟位址)。

步驟 6:建立數據列篩選原則

  1. 按兩下 [資料] 圖示。目錄

  2. abac 目錄旁邊,點擊 Kebab 功能表圖示。

  3. 點擊 在目錄總管中開啟

  4. 按兩下 [原則] 索引標籤。

  5. 按一下 新增原則

  6. [一般] 中,輸入原則的名稱 hide_eu_customers 和描述。

  7. 主體中

    • [套用至...] 中,搜尋並選取原則所套用的主體。 在此範例中,您可以使用群組 [所有帳戶使用者]。
    • 保留 [除外... ] 空白。

    ABAC 已填入政策。

  8. [類型與目標] 中:

    • 在 [ 原則類型] 中,選取 [ 數據列篩選]。
    • 在 [ 原則目標] 中,選取 abac 原則範圍的目錄。
    • [數據表層級條件 ] 保留空白。
  9. 函式中,選取您在is_not_eu_address中建立的abac.customers函式。

  10. 在 [ 何時] 欄旁,選取 [具有標籤值]。

  11. 索引鍵 中選取 pii,在 中選取 address

    ABAC 已填入數據列篩選原則。

  12. 按一下 [ 建立政策]。

步驟 7:測試您的原則

  1. 傳回筆記本並執行下列命令:
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 Spruce St, WA 789-01-2345
史密斯 234-567-8901 456 橡樹街, CA 234-56-7890
John 母鹿 123-456-7890 123 Main St, NY 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 楓樹街,FL 456-78-9012

您可以繼續建立欄位遮罩原則。

步驟 8:建立 UDF 以遮罩 SSN

  1. 將下列命令新增至筆記本並加以執行:
-- Masks any SSN input by returning a fully masked value
CREATE FUNCTION mask_SSN(ssn STRING)
RETURN '***-**-****' ;

此 UDF 會傳回完全遮罩的 SSN 字串串 ('***-**-****'),

步驟 9:建立欄位掩碼策略

  1. 按兩下 [資料] 圖示。目錄

  2. abac 目錄旁邊,點擊 Kebab 功能表圖示。

  3. 點擊 在目錄總管中開啟

  4. 按兩下 [原則] 索引標籤。

  5. 按一下 新增原則

  6. [一般] 中,輸入原則的名稱 mask_ssn 和描述。

  7. 主體中

    • [套用至...] 中,搜尋並選取原則所套用的主體。 在此範例中,您可以使用群組 [所有帳戶使用者]。
    • 保留 [除外... ] 空白。

    ABAC 填入列遮罩原則。

  8. [類型與目標] 中:

    • 在 [原則類型] 中,選取 [欄位遮罩]。
    • 在 [ 原則目標] 中,選取 abac 原則範圍的目錄。
    • [數據表層級條件 ] 保留空白。
  9. 函式中,選取您在mask_SSN中建立的abac.customers函式。

  10. 在 [ 何時] 欄旁,選取 [具有標籤值]。

  11. 索引鍵 中選取 pii,在 中選取 ssn

    ABAC 填入列遮罩原則。

  12. 按一下 [ 建立政策]。

步驟 10:測試您的原則

  1. 傳回筆記本並執行下列命令:
SELECT * FROM abac.customers.profiles

現在社會安全號碼顯示為***-***-***。 只會傳回非歐盟居民,因為也會啟用數據列篩選遮罩。

名字 姓氏 電話號碼 位址 社會安全號碼
史密斯 234-567-8901 456 橡樹街, CA ***-**-****
愛麗絲 約翰生 345-678-9012 789 松街,德州 ***-**-****
查理 大衛斯 567-890-1234 654 雪松街,伊利諾伊州 ***-**-****
恩典 威爾遜 890-123-4567 852 Elm St, NV ***-**-****
鮑勃 棕色 456-789-0123 321 楓樹街,FL ***-**-****
漢克 摩爾 901-234-5678 963 核桃街,科羅拉多州 ***-**-****
常春藤 泰勒 012-345-6789 159 阿斯彭街, AZ ***-**-****
艾米麗 白色 678-901-2345 987 伯奇街, 西澳大利亞州 ***-**-****
弗蘭克 密勒 789-012-3456 741 Spruce St, WA ***-**-****
John 母鹿 123-456-7890 123 Main St, NY ***-**-****