Von Bedeutung
この機能は パブリック プレビュー段階です。
このチュートリアルでは、Unity カタログで行フィルターと列マスク属性ベースのアクセス制御 (ABAC) ポリシーを構成する方法について説明します。
この例では、米国の分析チームが EU の顧客レコードまたは SSN にアクセスできないようにする必要があります。 ただし、同じテーブル内の他の顧客と顧客データにアクセスできる必要があります。 このチュートリアルには、次の手順が含まれています。
- 管理タグを作成する
- Unity カタログ カタログ、スキーマ、およびテーブルを作成する
- 列に管理タグを適用する
- EU メンバーのデータを非表示にする UDF を作成する
- 行フィルター ポリシーを作成する
- 社会保障番号を非表示にする UDF を作成する
- 列マスク ポリシーを作成する
- ポリシーを使用してテーブルを選択する
ABAC の構成のデモについては、 Unity カタログを使用した Attribute-Based アクセス制御 (ABAC) の検出に関するページを参照してください。
コンピューティング要件
- Databricks Runtime 16.4 以降ではコンピューティングを使用する必要があります。
- サーバーレス コンピューティングは常に ABAC で動作します。
以前のランタイムを実行しているコンピューティングは、ABAC によってセキュリティ保護されたテーブルにアクセスできません。 一時的な回避策として、特定のグループにのみ適用するように ABAC を構成できます。 そのグループに制限するユーザーを追加します。 グループに含まれていないユーザーは、引き続きテーブルにアクセスできます。
手順 1: 管理タグを作成する
管理タグを作成するには、アカウント レベルで管理タグの CREATE アクセス許可が必要です。 アカウント管理者とワークスペース管理者は、既定で CREATE を使用します。
Azure Databricks ワークスペースで、[
カタログ。
[ Governed Tags > ] ボタンをクリックします。
[ 管理タグの作成] をクリックします。
タグ キーの
piiを入力します。管理タグの説明を入力します。
タグに使用できる値を入力します:
ssnとaddress。 このタグ キーには、これらの値のみを割り当てることができます。
Create をクリックしてください。
Warnung
タグ データはプレーン テキストとして格納され、グローバルにレプリケートされる場合があります。 リソースのセキュリティを損なう可能性のあるタグ名、値、または記述子は使用しないでください。 たとえば、個人または機密情報を含むタグ名、値、記述子は使用しないでください。
手順 2: customers テーブルを作成する
これらの手順を実行するには、Unity カタログ メタストアに対する 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');
手順 3: 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');
手順 4: EU アドレスを検索する UDF を作成する
- 次のコマンドをノートブックに追加して実行します。
-- 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 カタログに含まれている必要があります。
[
カタログ。
前に作成した
abacカタログをクリックします。[ポリシー] タブをクリックします。
[新しいポリシー] をクリックします。
一般に、次の手順を実行します。
-
名前には、
hide_eu_customersを入力します。 - [ 説明] に、ポリシーの説明を入力します。
- [ 適用対象...] で、ポリシーが適用されるプリンシパルを検索して選択します。 この例では、[ すべてのアカウント ユーザー] グループを使用できます。
- [除く]... は空白のままにします。
-
[スコープ] で、
abacカタログとすべてのスキーマを選択します。
-
名前には、
[ 目的] で、[ テーブル行の非表示] を選択します。
[ 条件] で、[ 既存のものを選択] をクリックします。 次に、[関数] アイコンをクリック
関数を選択します。
[ 関数の選択 ] メニューで、
abacカタログ、customersスキーマ、前に作成したis_not_eu_address関数をクリックします。[選択] をクリックします。
必要に応じて、[テスト] 関数を展開し、入力を指定することで、マスク 関数をテスト できます。 たとえば、「
78 Berliner Str., Berlin, Germany E.U.」と入力して「テストを正しく 実行」 をクリックすると、FALSE (Hide row)が返されます。
関数パラメーター:
- 特定のタグがある場合は、[列をパラメーターにマップする] を選択します。
-
piiを検索します。 [pii : address] を選択します。
[ ポリシーの作成] をクリックします。
手順 6: ポリシーをテストする
- ノートブックに戻り、次のコマンドを実行します。
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 を作成する
- 次のコマンドをノートブックに追加して実行します。
-- 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 カタログに含まれている必要があります。
[
カタログ。
前に作成した
abacカタログをクリックします。[ポリシー] タブをクリックします。
[新しいポリシー] をクリックします。
一般に、次の手順を実行します。
-
名前には、
mask_ssnを入力します。 - [ 説明] に、ポリシーの説明を入力します。
- [ 適用対象...] で、ポリシーが適用されるプリンシパルを検索して選択します。 この例では、[ すべてのアカウント ユーザー] グループを使用できます。
- [除く]... は空白のままにします。
-
[スコープ] で、
abacカタログとすべてのスキーマを選択します。
-
名前には、
[ 目的] で、[ 列データのマスク] を選択します。
条件:
-
特定のタグがある場合は、[マスク] 列を選択します。
piiを検索して、pii : ssnを選択します。 - [ 既存のものを選択] をクリックします。 次に、[関数] アイコンをクリック
関数を選択します。
- [ 関数の選択 ] メニューで、
abacカタログ、customersスキーマ、前に作成したmask_ssn関数をクリックします。
-
特定のタグがある場合は、[マスク] 列を選択します。
[選択] をクリックします。
必要に応じて、[テスト] 関数を展開し、入力を指定することで、マスク 関数をテスト できます。 たとえば、「
901-234-5678」と入力して「テストを正しく 実行」 をクリックすると、***-**-****が返されます。
[ ポリシーの作成] をクリックします。
手順 9: ポリシーをテストする
- ノートブックに戻り、次のコマンドを実行します。
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 | ***-**-**** |