次の方法で共有


チュートリアル: ABAC を構成する

Von Bedeutung

この機能は パブリック プレビュー段階です

このチュートリアルでは、Unity カタログで行フィルターと列マスク属性ベースのアクセス制御 (ABAC) ポリシーを構成する方法について説明します。

この例では、米国の分析チームが EU の顧客レコードまたは SSN にアクセスできないようにする必要があります。 ただし、同じテーブル内の他の顧客と顧客データにアクセスできる必要があります。 このチュートリアルには、次の手順が含まれています。

  1. 管理タグを作成する
  2. Unity カタログ カタログ、スキーマ、およびテーブルを作成する
  3. 列に管理タグを適用する
  4. EU メンバーのデータを非表示にする UDF を作成する
  5. 行フィルター ポリシーを作成する
  6. 社会保障番号を非表示にする UDF を作成する
  7. 列マスク ポリシーを作成する
  8. ポリシーを使用してテーブルを選択する

ABAC の構成のデモについては、 Unity カタログを使用した Attribute-Based アクセス制御 (ABAC) の検出に関するページを参照してください。

コンピューティング要件

  • Databricks Runtime 16.4 以降ではコンピューティングを使用する必要があります。
  • サーバーレス コンピューティングは常に ABAC で動作します。

以前のランタイムを実行しているコンピューティングは、ABAC によってセキュリティ保護されたテーブルにアクセスできません。 一時的な回避策として、特定のグループにのみ適用するように ABAC を構成できます。 そのグループに制限するユーザーを追加します。 グループに含まれていないユーザーは、引き続きテーブルにアクセスできます。

手順 1: 管理タグを作成する

管理タグを作成するには、アカウント レベルで管理タグの CREATE アクセス許可が必要です。 アカウント管理者とワークスペース管理者は、既定で CREATE を使用します。

  1. Azure Databricks ワークスペースで、[ データ] アイコンをクリックします。カタログ

  2. [ Governed Tags > ] ボタンをクリックします。

  3. [ 管理タグの作成] をクリックします。

  4. タグ キーの piiを入力します。

  5. 管理タグの説明を入力します。

  6. タグに使用できる値を入力します: ssnaddress。 このタグ キーには、これらの値のみを割り当てることができます。

    チュートリアル: タグ ポリシーを作成します。

  7. Create をクリックしてください。

Warnung

タグ データはプレーン テキストとして格納され、グローバルにレプリケートされる場合があります。 リソースのセキュリティを損なう可能性のあるタグ名、値、または記述子は使用しないでください。 たとえば、個人または機密情報を含むタグ名、値、記述子は使用しないでください。

手順 2: customers テーブルを作成する

これらの手順を実行するには、Unity カタログ メタストアに対する 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: EU アドレスを検索する 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 は、特定の文字列がヨーロッパまたは EU を参照していないかどうかを確認します。 これらの部分文字列のいずれかが見つかった場合は、FALSE (つまり EU アドレス) が返されます。 どの部分文字列も見つからない場合は、TRUE を返します (つまり、EU アドレスではありません)。

手順 5: 行フィルター ポリシーを作成する

オブジェクトにポリシーを作成するには、オブジェクトまたはオブジェクトの所有権に MANAGE が必要です。 UDF をポリシーに追加するには、UDF に EXECUTE があり、その UDF が Unity カタログに含まれている必要があります。

  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

EU 以外の常駐行のみが返されます。

名(ファーストネーム) Last_Name 電話番号 住所 SSN
恩寵 ウィルソン 890-123-4567 852 Elm St, NV 890-12-3456
アリス ジョンソン 345-678-9012 789 Pine St, TX 345-67-8901
テイラー 012-345-6789 159 アスペン通り, アリゾナ州 012-34-5678
Frank Weigel ミラー 789-012-3456 741 スプルース・セント, WA 789-01-2345
ジェーン スミス 234-567-8901 456 Oak St, CA 234-56-7890
John 雌鹿 123-456-7890 123 Main St, NY 123-45-6789
チャーリー デイビス 567-890-1234 654 シーダー セント, IL 567-89-0123
エミリー 白い 678-901-2345 987 バーチ・セント, ワシントン州 678-90-1234
ハンク ムーア 901-234-5678 963 Walnut St, コロラド州 901-23-4567
ボブ 褐色 456-789-0123 321 メイプル ストリート, FL 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 があり、その UDF が Unity カタログに含まれている必要があります。

  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 は ***-***-***として返されるようになりました。 行フィルター マスクも有効になっているため、EU 以外の居住者のみが返されます。

名(ファーストネーム) Last_Name 電話番号 住所 SSN
ジェーン スミス 234-567-8901 456 Oak St, CA ***-**-****
アリス ジョンソン 345-678-9012 789 Pine St, TX ***-**-****
チャーリー デイビス 567-890-1234 654 シーダー セント, IL ***-**-****
恩寵 ウィルソン 890-123-4567 852 Elm St, NV ***-**-****
ボブ 褐色 456-789-0123 321 メイプル ストリート, FL ***-**-****
ハンク ムーア 901-234-5678 963 Walnut St, コロラド州 ***-**-****
テイラー 012-345-6789 159 アスペン通り, アリゾナ州 ***-**-****
エミリー 白い 678-901-2345 987 バーチ・セント, ワシントン州 ***-**-****
Frank Weigel ミラー 789-012-3456 741 スプルース・セント, WA ***-**-****
John 雌鹿 123-456-7890 123 Main St, NY ***-**-****