メタストアレベルの ABAC ポリシー (ベータ)
ベータ版
Metastore-level attribute-based access control (ABAC) ポリシー are in Beta.You can attach ABAC ポリシー at the metastore, the root of the Unity Catalog object hierarchy, so a single policy applies across every catalog in the metastore.
メタストアは、ABACポリシーの有効なスコープです。メタストアにアタッチされたポリシーは、ポリシーを定義した後に作成されたオブジェクトを含め、メタストア内の各ポリシータイプでサポートされるすべてのカタログ、スキーマ、およびオブジェクトに適用されます。これにより、ガバナンスチームは、カタログごとにポリシーを設定または複製することなく、組織全体のデータ保護ルールを定義する単一の場所を持つことができます。メタストアを直接タグ付けすることはできないため、タグベースのポリシーは、カタログおよび下位レベルのオブジェクトに適用された管理タグによってオブジェクトに一致します。
行フィルター、列マスク、GRANT、DENY(ベータ)の4つのABACポリシータイプすべてがメタストアレベルでサポートされています。メタストアレベルのポリシーは、他のABACポリシーと同じフィールド、条件、および評価動作を使用します。スコープのみが異なります。
Catalog Explorer 、 SQL 、または REST API を使用して、メタストアレベルのポリシーを作成および管理できます。管理タグや、has_tagやhas_tag_valueなどの組み込み関数を含む ABAC とコア概念の概要については、 属性ベースアクセス制御(ABAC)の基本概念を参照してください。
要件
コンピュートの要件
SQLを使用してメタストアレベルのポリシーを作成、変更、または削除するには、Databricks Runtime 19以上を実行しているコンピュートが必要です。
権限要件
- メタストアレベルのポリシーの作成、更新、削除を行うには、メタストア管理者ロールが必要です。
- メタストア レベルのポリシーを一覧表示および表示するには、
READ METADATAまたはメタストア管理者ロールが必要です。
メタストアレベルのポリシーの仕組み
メタストア レベルのポリシーは、他の ABAC ポリシーと同じルールを使用して、オブジェクト階層の下位に継承されます。
- 1つのポリシーがメタストア全体をカバーします。 メタストアにアタッチされたポリシーは、メタストア内のすべてのカタログとスキーマにわたって、
FOR句で指定されたタイプのすべてのオブジェクトに対して評価されます。 - 新しいカタログは自動的に対象となります。 ポリシーの定義後に作成されたカタログは、カタログ所有者または管理者の操作なしで、ポリシーの条件に一致したときに自動的に対象になります。
- 動作は下位レベルのポリシーに一致します。 メタストアレベルのポリシーは、DENY の優先順位、ワークスペースバインディング、行フィルターの構成など、各ポリシータイプがサポートする標準機能と評価動作を維持します。メタストアの範囲に固有の評価ロジックはありません。
メタストアに直接タグを付けることはできないため、メタストアレベルのポリシーでタグ条件を使用する場合は、ポリシーの対象とする各カタログまたは下位レベルのオブジェクトに管理タグを適用してください。
サポートされているポリシーのターゲット
メタストアレベルのポリシーは、カタログレベルでポリシータイプがサポートする(FOR)すべての保護可能なタイプに適用できます:
- 行フィルターおよび列マスクポリシーは
FOR TABLESを適用します。これには、ストリーミングテーブル、マテリアライズドビュー、およびビュー(ベータ)が含まれます。 - GRANTポリシーは、サポートされているセキュリティ保護可能なオブジェクトと権限にリストされているセキュリティ保護可能なタイプに適用されます。
- DENY ポリシーは、サポートされているセキュリティ保護可能なタイプと特権にリストされているセキュリティ保護可能なタイプに適用されます。
GRANTおよびDENYポリシーは、外部ロケーション、ストレージ資格情報、共有、受信者、プロバイダー、接続など、メタストア内のカタログ以外のオブジェクトを対象にすることはできません。制限事項を参照してください。
メタストアレベルのポリシーを作成する
カタログエクスプローラ UI、CREATE POLICY SQL ステートメント、または REST API を使用して、メタストアレベルのポリシーを作成できます。
- Catalog Explorer
- SQL
- REST API
- Databricks ワークスペースで、
カタログ をクリックします。
- カタログ ペインの上部にある
歯車アイコンをクリックし、 メタストア を選択します。
- [ ポリシー ] タブをクリックします。
- 新しいポリシー をクリックします。
- 選択した ポリシーの種類 に必要なポリシーフィールドを入力します。 Scope フィールドは現在のメタストアに設定されています。
- 「 ポリシーの作成 」をクリックします。
ON METASTORE でポリシーをアタッチします。このポリシーの対象は、現在操作しているメタストアです。メタストア名は指定しないでください。制限事項を参照してください。
HR admins グループを除くすべてのアカウントユーザーに対して、メタストア内のすべてのテーブルにわたり、ssn のタグが付けられたすべての列をマスクする次の列マスクポリシー:
CREATE POLICY ssn_mask
ON METASTORE
COLUMN MASK ssn_to_last_nr
TO `account users` EXCEPT `HR admins`
FOR TABLES
MATCH COLUMNS has_tag('ssn') AS ssn
ON COLUMN ssn
USING COLUMNS (4);
次のDENYポリシーにより、管理者以外はメタストア内のタグsensitiveが付けられたすべてのテーブルでアクセス制御を管理できなくなります。これは、data_adminsグループを除くすべてのアカウントユーザーに適用されます。
CREATE POLICY managed_access
ON METASTORE
COMMENT 'Prevent non-admins from managing permissions on sensitive tables'
TO `account users` EXCEPT `data_admins`
DENY MANAGE ACCESS CONTROL
FOR TABLES
WHEN has_tag('sensitive');
完全な SQL 構文については、CREATE POLICY を参照してください。
on_securable_type を METASTORE に設定し、 on_securable_fullname を現在のメタストアの名前に設定します。ペイロードの残りの部分は、カタログスコープのポリシーと同一です。
次の例では、 SQL タブに表示される DENY ポリシーを作成します。
curl -X POST "https://${DATABRICKS_HOST}/api/2.1/unity-catalog/policies" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" \
-H "Content-Type: application/json" \
--data-binary @- << 'EOF'
{
"name": "managed_access",
"comment": "Prevent non-admins from managing permissions on sensitive tables",
"on_securable_type": "METASTORE",
"on_securable_fullname": "my_metastore",
"for_securable_type": "TABLE",
"policy_type": "POLICY_TYPE_DENY",
"to_principals": ["account users"],
"except_principals": ["data_admins"],
"deny": {
"privileges": ["MANAGE_ACCESS_CONTROL"]
},
"when_condition": "has_tag('sensitive')"
}
EOF
on_securable_fullname 現在操作しているメタストアの名前のみを受け付けます。メタストアIDや、別のメタストアの名前は拒否されます。メタストアの名前を確認するには、カタログエクスプローラーの カタログ ペインの上部にある歯車アイコン をクリックし、 メタストア を選択します。リクエストとレスポンスの詳細については、REST API リファレンスの ポリシーの作成 を参照してください。
メタストアレベルのポリシーを削除する
- Catalog Explorer
- SQL
- REST API
メタストアの Policies tab から、メタストアレベルのポリシーを管理します。
- Databricks ワークスペースで、
カタログ をクリックします。
- カタログ ペインの上部にある
歯車アイコンをクリックし、 メタストア を選択します。
- [ ポリシー ] タブをクリックします。
- ポリシーを選択します。
- ポリシーの削除 をクリックします。
SQL でメタストア レベルのポリシーを削除するには、DROP POLICY をランします。
DROP POLICY ssn_mask ON METASTORE;
curl -X DELETE "https://${DATABRICKS_HOST}/api/2.1/unity-catalog/policies/METASTORE/my_metastore/ssn_mask" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}"
ポリシーを表示
SHOW POLICIESを使用して、セキュリティ保護可能なオブジェクトで定義されているポリシーを一覧表示します。SHOW EFFECTIVE POLICIESを使用して、カタログに影響を与えるメタストアレベルのポリシーなど、親スコープから継承されたポリシーも含めます。
SHOW [EFFECTIVE] POLICIES ON METASTORE
result includes the ポリシー name, ポリシー type, the catalog and schema of the securable each ポリシー is defined on, and that securable's type and full name.メタストアレベルのポリシーは、on_securable_type が METASTORE に設定され、on_securable_fullname がメタストア名に設定されて返されます。Table 列は、ポリシーがテーブルに定義されている場合にのみ入力されます。
例:
SHOW POLICIES ON METASTORE;
Policy Name Policy Type Catalog Schema Table Comment on_securable_type on_securable_fullname
-------------- ----------- ------- ------ ----- ---------------------------------------------------------------- ----------------- ---------------------
ssn_mask COLUMN_MASK NULL NULL NULL NULL METASTORE my_metastore
managed_access DENY NULL NULL NULL Prevent non-admins from managing permissions on sensitive tables METASTORE my_metastore
ポリシーの説明
DESCRIBE POLICY を使用して、特定のメタストアレベルのポリシーの詳細を表示します。メタストア上の READ METADATA、またはメタストア管理者ロールが必要です。
{ DESC | DESCRIBE } POLICY policy_name ON METASTORE
結果には、名前、セキュリティ保護可能なオブジェクトのタイプ、セキュリティ保護可能なオブジェクトの名前、プリンシパル、特権、WHEN条件など、ポリシーのプロパティがキーと値のペアとして表示されます。
情報スキーマを使用したクエリーポリシー定義
メタストアレベルのポリシー定義を一覧表示するには、SYSTEM.INFORMATION_SCHEMA.ABAC_POLICY_DEFINITIONS をクエリーし、on_securable_type でフィルター処理します。
SELECT *
FROM system.information_schema.abac_policy_definitions
WHERE on_securable_type = 'METASTORE';
メタストアレベルのポリシーは、on_securable_typeでMETASTOREを返し、catalog_name、schema_name、およびsecurable_nameはすべてNULLになります。利用可能な列とその他の例については、ABAC_POLICY_DEFINITIONSを参照してください。
ポリシーのクォータ
リソース | ポリシーの種類 | 上限 |
|---|---|---|
メタストアあたりのポリシー(すべてのオブジェクト) | 行フィルター / 列マスク | 10,000 |
メタストアあたりのポリシー(すべてのオブジェクト) | GRANT / DENY | 10,000 |
メタストアごとのポリシー(直接アタッチ) | 行フィルター / 列マスク | 100 |
メタストアごとのポリシー(直接アタッチ) | GRANT / DENY | 100 |
Row filter and column mask ポリシー share one quota, and GRANT and DENY ポリシー share a separate quota.The two groups are counted independently.
行フィルターおよび列マスク ポリシーのクォータの詳細については、ポリシー クォータを参照してください。GRANT ポリシーのクォータの詳細については、ポリシー クォータを参照してください。DENY ポリシーのクォータの詳細については、ポリシー クォータを参照してください。
監査ログ
メタストアレベルのポリシーの作成、変更、およびドロップの各操作は、他のABACポリシーと同じ createPolicy、deletePolicy、getPolicy、および listPolicies アクションの下でログに記録され、on_securable_type は METASTORE に設定されます。監査ログのクエリーの例については、監査ロギングを参照してください。
制限事項
- SQL は現在のメタストアのみをターゲットとします。
ON METASTOREは常に、操作対象のメタストアをターゲットとします。ON METASTOREの後にメタストア名を指定すると構文エラーになり、別のメタストアでポリシーを管理することはできません。 - GRANT および DENY のターゲット。 GRANT および DENY ポリシーは、外部ロケーション、ストレージ資格情報、共有、受信者、プロバイダー、接続など、メタストア内のカタログ以外のオブジェクトをターゲットにすることはできません。オブジェクト階層全体の詳細については、Unity Catalog のオブジェクト階層を参照してください。
- 情報スキーマ。
ABAC_POLICY_DEFINITIONSビューにはmetastore_name列がありません。メタストア レベルのポリシーは、on_securable_type=METASTOREによって識別されます。