メインコンテンツまでスキップ

チュートリアル: ABAC の構成

備考

ベータ版

この機能は ベータ版です。

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

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

  1. ABAC ベータ版を有効にする
  2. 管理対象タグの作成
  3. Unity Catalog のカタログ、スキーマ、テーブルを作成する
  4. 管理されたタグを列に適用する
  5. EU加盟国のデータを隠すためのUDFを作成する
  6. 行フィルター ポリシーを作成する
  7. SSN を非表示にするための UDF を作成する
  8. 列マスク ポリシーを作成する
  9. ポリシーを使用してテーブルを選択します

ABAC の構成のデモについては、「 Unity Catalog を使用した属性ベースのアクセス制御 (ABAC) の検出」を参照してください。

コンピュートの要件

  • コンピュートは Databricks Runtime 16.4以上でご利用ください。
  • サーバレス コンピュートは、常にABACと連携します。

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

ステップ 1: ABAC ベータ版を有効にする

  1. ワークスペース管理者として、Databricks ワークスペースの上部バーでユーザー名をクリックします。
  2. メニューから「 プレビュー 」を選択します。
  3. 「属性ベースのアクセス制御 」トグルを 「オン」 に設定します。

ステップ 2: 管理対象タグを作成する

管理対象タグを作成するには、アカウントレベルで管理対象タグの CREATE 権限が必要です。アカウント管理者とワークスペース管理者には、デフォルトで CREATE があります。

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

  2. [ 管理対象タグ ] ボタンをクリックします。

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

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

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

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

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

  7. 作成 をクリックします。

警告

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

ステップ 3: 顧客テーブルを作成する

これらの手順に従うには、Unity Catalog メタストアに対する CREATE CATALOG アクセス許可が必要です。また、 CREATE TABLE アクセス許可を持つスキーマにテーブルを作成することもできます。

  1. サイドバーで、[ +新規 ]、[ ノートブック ] の順にクリックします。
  2. ノートブックの言語として [ SQL ] を選択します。
  3. [ 接続 ] をクリックし、ノートブックをコンピュートリソースにアタッチします。
  4. 次のコマンドをノートブックに追加して実行します。
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 列に追加する

  1. 次のコマンドをノートブックに追加して実行します。
SQL
-- 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 を作成して EU の住所を検索する

  1. 次のコマンドをノートブックに追加して実行します。
SQL
-- 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 アドレスではないことを意味します)。

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

  1. データアイコン。 [カタログ] をクリックします。

  2. abacカタログの横にあるケバブメニューケバブメニューのアイコン。をクリックします。

  3. 「カタログエクスプローラで開く」(Open in Catalog Explorer ) をクリックします。

  4. [ ポリシー ] タブをクリックします。

  5. [新しいポリシー ] をクリックします。

  6. [全般 ] に、ポリシーの名前、hide_eu_customers、説明を入力します。

  7. プリンシパル では:

    • [ 適用先... ] で、ポリシーが適用されるプリンシパルを検索して選択します。この例では、 グループ「すべてのアカウントユーザー 」を使用できます。
    • [Except for... ] を空白のままにします。

    ABAC 行フィルターポリシー設定の例。

  8. 「タイプとターゲット 」で、次の操作を行います。

    • [ポリシーの種類 ] で、[ 行フィルター ] を選択します。
    • [ポリシー ターゲット ] で、ポリシーのスコープのabacカタログを選択します。
    • テーブル レベルの条件 は空白のままにします。
  9. 「関数」 で、「abac.customers」で作成したis_not_eu_address関数を選択します。

  10. [When 列 ] の横にある [ タグ値あり ] を選択します。

  11. [キー ] で [pii] を選択し、[ ] で [address] を選択します。

    ABAC 行フィルターポリシー関数定義の例。

  12. ポリシーの作成 」をクリックします。

ステップ 7: ポリシーをテストする

  1. ノートブックに戻り、次のコマンドを実行します。
SQL
SELECT DISTINCT * FROM abac.customers.profiles

EU に居住していない行のみが返されます。

First_Name

Last_Name

Phone_Number

Address

SSNの

恩寵

ウィルソン

890-123-4567

852エルムセント、ネバダ州

890-12-3456

アリス

ジョンソン

345-678-9012

789パインストリート、テキサス州

345-67-8901

テイラー

012-345-6789

159アスペンセント、アリゾナ州

012-34-5678

フランク

粉屋

789-012-3456

741スプルースストリート、ワシントン州

789-01-2345

ジェーン

鍛冶屋

234-567-8901

456オークストリート、カリフォルニア州

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 を作成する

  1. 次のコマンドをノートブックに追加して実行します。
SQL
-- Masks any SSN input by returning a fully masked value
CREATE FUNCTION mask_SSN(ssn STRING)
RETURN '***-**-****' ;

この UDF は、完全にマスクされた SSN 文字列 ('***-**-****') を返します。

ステップ 9: 列マスク ポリシーを作成する

  1. データアイコン。 [カタログ] をクリックします。

  2. abacカタログの横にあるケバブメニューケバブメニューのアイコン。をクリックします。

  3. 「カタログエクスプローラで開く」(Open in Catalog Explorer ) をクリックします。

  4. [ ポリシー ] タブをクリックします。

  5. [新しいポリシー ] をクリックします。

  6. [全般 ] に、ポリシーの名前、mask_ssn、説明を入力します。

  7. プリンシパル では:

    • [ 適用先... ] で、ポリシーが適用されるプリンシパルを検索して選択します。この例では、 グループ「すべてのアカウントユーザー 」を使用できます。
    • [Except for... ] を空白のままにします。

    ABAC 列マスクポリシー設定の例。

  8. 「タイプとターゲット 」で、次の操作を行います。

    • [ポリシーの種類 ] で、[ 列マスク ] を選択します。
    • [ポリシー ターゲット ] で、ポリシーのスコープのabacカタログを選択します。
    • テーブル レベルの条件 は空白のままにします。
  9. 「関数」 で、「abac.customers」で作成したmask_SSN関数を選択します。

  10. [When 列 ] の横にある [ タグ値あり ] を選択します。

  11. [キー ] で [pii] を選択し、[ ] で [ssn] を選択します。

    ABAC 列マスクポリシー関��数定義の例。

  12. ポリシーの作成 」をクリックします。

ステップ 10: ポリシーをテストする

  1. ノートブックに戻り、次のコマンドを実行します。
SQL
SELECT * FROM abac.customers.profiles

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

First_Name

Last_Name

Phone_Number

Address

SSNの

ジェーン

鍛冶屋

234-567-8901

456オークストリート、カリフォルニア州

***-**-****

アリス

ジョンソン

345-678-9012

789パインストリート、テキサス州

***-**-****

チャーリー

デイビス

567-890-1234

654シーダーセント、イリノイ州

***-**-****

恩寵

ウィルソン

890-123-4567

852エルムセント、ネバダ州

***-**-****

ボブ

褐色

456-789-0123

321メープルセント、フロリダ州

***-**-****

ハンク

ムーア

901-234-5678

963ウォルナットセント、コロラド州

***-**-****

テイラー

012-345-6789

159アスペンセント、アリゾナ州

***-**-****

エミリー

白い

678-901-2345

987バーチストリート、ワシントン州

***-**-****

フランク

粉屋

789-012-3456

741スプルースストリート、ワシントン州

***-**-****

John

123-456-7890

123メインストリート、ニューヨーク

***-**-****