チュートリアル: ABAC の構成
ベータ版
この機能は ベータ版です。
このチュートリアルでは、Unity Catalog で行フィルターと列マスクの属性ベースのアクセス制御 (ABAC) ポリシーを構成する方法について説明します。
この例では、米国のアナリティクス チームは EU の顧客レコードや SSN にアクセスできないようにする必要がありますが、同じテーブル内の他の顧客や顧客データにはアクセスできる必要があります。 このチュートリアルには、次の内容が含まれています。
- タグポリシーと ABAC ベータ版を有効にする
- タグポリシーの作成
- Unity Catalog のカタログ、スキーマ、テーブルを作成する
- 管理されたタグを列に適用する
- EU加盟国のデータを隠すためのUDFを作成する
- 行フィルター ポリシーを作成する
- SSN を非表示にするための UDF を作成する
- 列マスク ポリシーを作成する
- ポリシーを使用してテーブルを選択します
ステップ 1: タグポリシーと ABAC ベータ版を有効にする
-
アカウント管理者として、アカウントコンソールにログインします。
-
サイドバーで、 プレビュー をクリックします。
-
[タグ ポリシー ] トグルを [オン] に設定します。
-
ワークスペース管理者として、Databricks ワークスペースの上部バーでユーザー名をクリックします。
-
メニューから「 プレビュー 」を選択します。
-
「属性ベースのアクセス制御 」トグルを 「オン」 に設定します。
ステップ 2: タグポリシーを作成する
タグポリシーを作成するには、アカウントレベルでタグポリシーの CREATE アクセス許可が必要です。アカウント管理者とワークスペース管理者には、デフォルトで CREATE があります。
-
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 を作成して EU の住所を検索する
- 次のコマンドをノートブックに追加して実行します。
-- 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: 行フィルター ポリシーを作成する
-
[カタログ] をクリックします。
-
abac
カタログの横にあるケバブメニューをクリックします。
-
「カタログエクスプローラで開く」(Open in Catalog Explorer ) をクリックします。
-
[ ポリシー ] タブをクリックします。
-
[新しいポリシー ] をクリックします。
-
[全般 ] に、ポリシーの名前、
hide_eu_customers
、説明を入力します。 -
プリンシパル では:
- [ 適用先... ] で、ポリシーが適用されるプリンシパルを検索して選択します。この例では、 グループ「すべてのアカウントユーザー 」を使用できます。
- [Except for... ] を空白のままにします。
-
「タイプとターゲット 」で、次の操作を行います。
- [ポリシーの種類 ] で、[ 行フィルター ] を選択します。
- [ポリシー ターゲット ] で、ポリシーのスコープの
abac
カタログを選択します。 - テーブル レベルの条件 は空白のままにします。
-
「関数」 で、「
abac.customers
」で作成したis_not_eu_address
関数を選択します。 -
[When 列 ] の横にある [ タグ値あり ] を選択します。
-
[キー ] で [
pii
] を選択し、[ 値 ] で [address
] を選択します。 -
「 ポリシーの作成 」をクリックします。
ステップ 7: ポリシーをテストする
- ノートブックに戻り、次のコマンドを実行します。
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 を作成する
- 次のコマンドをノートブックに追加して実行します。
-- Masks any SSN input by returning a fully masked value
CREATE FUNCTION mask_SSN(ssn STRING)
RETURN '***-**-****' ;
この UDF は、完全にマスクされた SSN 文字列 ('***-**-****') を返します。
ステップ 9: 列マスク ポリシーを作成する
-
[カタログ] をクリックします。
-
abac
カタログの横にあるケバブメニューをクリックします。
-
「カタログエクスプローラで開く」(Open in Catalog Explorer ) をクリックします。
-
[ ポリシー ] タブをクリックします。
-
[新しいポリシー ] をクリックします。
-
[全般 ] に、ポリシーの名前、
mask_ssn
、説明を入力します。 -
プリンシパル では:
- [ 適用先... ] で、ポリシーが適用されるプリンシパルを検索して選択します。この例では、 グループ「すべてのアカウントユーザー 」を使用できます。
- [Except for... ] を空白のままにします。
-
「タイプとターゲット 」で、次の操作を行います。
- [ポリシーの種類 ] で、[ 列マスク ] を選択します。
- [ポリシー ターゲット ] で、ポリシーのスコープの
abac
カタログを選択します。 - テーブル レベルの条件 は空白のままにします。
-
「関数」 で、「
abac.customers
」で作成したmask_SSN
関数を選択します。 -
[When 列 ] の横にある [ タグ値あり ] を選択します。
-
[キー ] で [
pii
] を選択し、[ 値 ] で [ssn
] を選択します。 -
「 ポリシーの作成 」をクリックします。
ステップ 10: ポリシーをテストする
- ノートブックに戻り、次のコマンドを実行します。
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メインストリート、ニューヨーク | ***-**-**** |