属性ベースのアクセス制御 (ABAC) ポリシーの作成と管理
ベータ版
この機能は ベータ版です。
このページでは、Unity Catalog で行フィルターと列マスクのポリシーを構成する方法について説明します。詳細については、 属性ベースのアクセス制御 (ABAC) とポリシーについては、 属性ベースのアクセス制御 (ABAC)Unity Catalogを参照してください。オブジェクトにタグを適用するには、「 管理タグ」 および「 Unity Catalog セキュリティ保護可能なオブジェクトにタグを適用する」を参照してください。
ABACを有効にする
ABAC ベータ版は、ワークスペース レベルで有効になります。Databricks は、共有カタログにアクセスする各ワークスペースでも ABAC が有効になっていない限り、共有カタログへの読み取り操作に ABAC を適用できません。
ABAC ベータ版を有効にするには、次の手順を実行します。
- ワークスペース管理者として、Databricks ワークスペースの上部バーでユーザー名をクリックします。
- メニューから「 プレビュー 」を選択します。
- 「属性ベースのアクセス制御 」トグルを 「オン」 に設定します。
コンピュートの要件
- コンピュートは Databricks Runtime 16.4以上でご利用ください。
- サーバレス コンピュートは、常にABACと連携します。
古いランタイムを実行しているコンピュートは、ABAC によって保護されたテーブルにアクセスできません。 一時的な回避策として、特定のグループにのみ適用されるように ABAC を設定できます。そのグループに制限するユーザーを追加します。グループに属さないユーザーでも、テーブルにアクセスできます。
オブジェクトに対するポリシーの作成
行フィルターまたは列マスクポリシーを作成するには、次のものが必要です。
-
ABAC ベータ版とタグ ポリシーのベータ版がワークスペースで有効になっている。「 ABAC の有効化」を参照してください。
-
適用する行フィルターまたは列マスク ロジックを実装する既存の ユーザー定義関数 (UDF)。
ベストプラクティスと UDF の例については、「 ABAC ポリシーのベストプラクティスの UDF」を参照してください。 -
MANAGE
オブジェクトまたはオブジェクトの所有権について。 -
サーバレス コンピュートは、常にABACと連携します。
-
コンピュートは Databricks Runtime 16.4以上でご利用ください。
古いランタイムを実行しているコンピュートは、ABAC によって保護されたテーブルにアクセスできません。 一時的な回避策として、特定のグループにのみ適用されるように ABAC を設定できます。そのグループに制限するユーザーを追加します。グループに属さないユーザーでも、テーブルにアクセスできます。
- Catalog Explorer
- SQL
-
Databricks ワークスペースで、
カタログ をクリックします。
-
ポリシーのスコープを決定するオブジェクト (カタログ、スキーマ、テーブルなど) を選択します。
-
[ ポリシー ] タブをクリックします。
-
[新しいポリシー ] をクリックします。
-
[全般] に、ポリシーの名前と説明を入力します。
-
プリンシパル では:
- [ 適用先] で、ポリシーが管理するプリンシパルを検索して選択します。
- [除外] で、ポリシーから除外するプリンシパルを検索して選択します。たとえば、ポリシーが適用されるグループに属するユーザーを除外できます。
-
「タイプとターゲット 」で、次の操作を行います。
- [ポリシーの種類 ] で、[ 行フィルター ] または [列マスク ] を選択します。
- [ポリシー ターゲット ] で、ポリシーの範囲を選択します。これは、カタログ全体やスキーマなどの広範なスコープにすることも、その中の特定のテーブルや列などのより狭いスコープにすることもできます。
- [テーブル レベルの条件 ] で、このポリシーを適用するテーブルに一致する条件を指定します。たとえば、
hasTag("tag")
やhasTagValue("tag", "value")
などです。
-
[関数] で、このポリシーで使用する関数を選択し、必要なパラメーターを入力します。新しい関数を作成するには、「 Unity Catalog での UDF の作成」を参照してください。ベストプラクティスと関数の例については、「 ABAC ポリシーのベストプラクティスの UDF」を参照してください。
-
「 ポリシーの作成 」をクリックします。
ポリシーを作成するための一般的な構文を次に示します。
CREATE POLICY <policy_name>
ON <securable_type> <securable_name>
COMMENT '<policy_description>'
-- One of the following:
ROW FILTER <udf_name>
| COLUMN MASK <udf_name> ON COLUMN <target_column>
TO <principal_name>[, <principal_name>, ...]
[EXCEPT <principal_name>[, <principal_name>, ...]]
FOR TABLES
[WHEN hasTag('<key>') OR hasTagValue('<key>', '<value>')]
MATCH COLUMNS hasTag('<key>') OR hasTagValue('<key>', '<value>') AS <alias>
USING COLUMNS <alias>[, <alias>, ...];
この例では、米国を拠点とするアナリストによるクエリからヨーロッパの顧客の行を除外する行フィルタポリシーを定義しています。
CREATE POLICY hide_eu_customers
ON SCHEMA prod.customers
COMMENT 'Hide rows with European customers from sensitive tables'
ROW FILTER non_eu_region
TO us_analysts
FOR TABLES
MATCH COLUMNS
hasTag('geo_region') AS region
USING COLUMNS (region);
この例では、米国のアナリストから社会保障番号を非表示にする列マスク ポリシーを定義します ( admins
グループ内のアナリストを除く)。
CREATE POLICY mask_SSN
ON SCHEMA prod.customers
COMMENT 'Mask social security numbers'
COLUMN MASK mask_SSN
TO us_analysts
EXCEPT admins
FOR TABLES
MATCH COLUMNS
hasTagValue('pii', 'ssn') AS ssn
ON COLUMN ssn;
タグデータはプレーンテキストとして保存され、グローバルに複製できます。リソースのセキュリティを損なう可能性のあるタグ名、値、または記述子は使用しないでください。たとえば、個人情報や機密情報を含むタグ名、値、または記述子は使用しないでください。
ポリシーの編集
必要な権限: オブジェクトまたはオブジェクトの所有者に対する MANAGE
。
- Catalog Explorer
- SQL
- Databricks ワークスペースで、
カタログ をクリックします。
- ポリシーのスコープを決定するオブジェクト (カタログ、スキーマ、テーブルなど) を選択します。
- [ ポリシー ] タブをクリックします。
- ポリシーを選択し、編集します。
- [ ポリシーの更新 ] をクリックします。
CREATE OR REPLACE POLICY <policy_name>
ON <securable_type> <securable_name>
COMMENT '<policy_description>'
-- One of the following:
ROW FILTER <udf_name>
| COLUMN MASK <udf_name> ON COLUMN <target_column>
TO <principal_name>[, <principal_name>, ...]
[EXCEPT <principal_name>[, <principal_name>, ...]]
FOR TABLES
[WHEN hasTag('<key>') OR hasTagValue('<key>', '<value>')]
MATCH COLUMNS hasTag('<key>') OR hasTagValue('<key>', '<value>') AS <alias>
USING COLUMNS <alias>[, <alias>, ...];
ポリシーを削除する
必要な権限: オブジェクトまたはオブジェクトの所有者に対する MANAGE
。
- Catalog Explorer
- SQL
- Databricks ワークスペースで、
カタログ をクリックします。
- ポリシーのスコープを決定するオブジェクト (カタログ、スキーマ、テーブルなど) を選択します。
- [ ポリシー ] タブをクリックします。
- ポリシーを選択します。
- [ ポリシーの削除 ] をクリックします。
DROP POLICY <policy_name> ON <securable_type> <securable_name>