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

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

備考

プレビュー

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

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

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

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

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

コンピュートの要件

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

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

ステップ 1: 管理タグを作成する

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

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

  2. 「ガバナンス」 ボタンをクリックし、 「管理タグ」 をクリックします。

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

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

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

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

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

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

警告

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

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

これらの手順に従うには、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');

ステップ 3: 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');

ステップ 4: EU アドレスを検索するためのUDFを作成する

  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 アドレスではないことを意味します)。

ステップ 5: 行フィルターを作成する

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

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

  2. 先ほど作成したabacカタログをクリックします。

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

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

  5. 一般的 に :

    • [名前]hide_eu_customers と入力します。
    • [説明] に、ポリシーの説明を入力します。
    • [適用先...] では、ポリシーを適用するプリンシパルを検索して選択します。この例では、 「すべてのアカウント ユーザー」 グループを使用できます。
    • 「Except for...」 は空白のままにします。
    • スコープ には、 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. ノートブックに戻り、次のコマンドを実行します。
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

列マスク ポリシーの作成を続行できます。

ステップ 7: SSN をマスクするUDFを作成する

  1. 次のコマンドをノートブックに追加して実行します。
SQL
-- 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 Catalogに含まれている必要があります。

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

  2. 先ほど作成したabacカタログをクリックします。

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

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

  5. 一般的 に :

    • [名前]mask_ssn と入力します。
    • [説明] に、ポリシーの説明を入力します。
    • [適用先...] では、ポリシーを適用するプリンシパルを検索して選択します。この例では、 「すべてのアカウント ユーザー」 グループを使用できます。
    • 「Except for...」 は空白のままにします。
    • スコープ には、 abacカタログとすべてのスキーマを選択します。

    一般セクションの ABAC 列マスク ポリシー設定の例。

  6. 目的 には、 列データのマスクを 選択します。

  7. 条件

    • 特定のタグがある場合はマスク列 を選択します。piiを検索し、 pii : ssnを選択します。
    • 既存の選択を クリックします。次にクリックします機能アイコン。 機能を選択します
    • [関数の選択] メニューで、 abacカタログ、 customersスキーマ、そして先ほど作成したmask_ssn関数をクリックします。
  8. [選択] をクリックします。

    条件セクションの ABAC 列マスク ポリシー設定の例。

  9. オプションで、 「テスト機能」 を展開して入力を提供することで、マスキング機能をテストできます。たとえば、 901-234-5678と入力して [テストの実行] をクリックすると、正しく***-**-****が返されます。

    ABAC 行フィルタ マスキング関数テストの例。

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

ステップ 9: 自分のポリシーをテストする

  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メインストリート、ニューヨーク

***-**-****