行フィルターと列マスクのポリシーの要件、クォータ、および制限
このページでは、行フィルターおよび列マスクポリシーの要件、クォータ、および制限について説明します。GRANT ポリシーについては、ABAC GRANT ポリシーを参照してください。
このページには、Unity CatalogにおけるABAC行フィルターおよび列マスクのポリシーに関する要件、ポリシーのクォータ、および現在の制限事項が記載されています。
コンピュート要件
ABAC ポリシーを使用するには、次のコンピュート構成のいずれかを使用する必要があります。
- サーバーレスコンピュート
- Databricks Runtime 16.4 以降の標準コンピューティング
- 専用コンピューティングDatabricks Runtime 16.4 以降(詳細なアクセス制御フィルタリングが有効)
古いランタイムを必要とするワークロードの実行方法については、 「古いランタイムからのアクセス」を参照してください。
管理タグの要件
ABAC ポリシーでは、非管理タグではなく、管理タグを使用します。 管理タグは、誰が作成、割り当て、管理できるかを決定するアクセス制御を備えたアカウント レベルで定義されます。 詳細については、管理タグを参照してください。
タグの割り当てまたは変更後、変更が反映されるまで数分かかる場合があります。
ポリシーの割り当て
リソース | 上限 |
|---|---|
ポリシー per metastore (all objects) | 10,000 |
メタストアごとのポリシー、直接アタッチ(ベータ) | 100 |
カタログごとのポリシー | 100 |
スキーマごとのポリシー | 100 |
テーブルごとのポリシー | 50 |
ポリシーあたりのプリンシパル( | 20 |
| 3 |
管理タグのクォータなどの詳細については、 「サービスの制限」を参照してください。
ABACの制限
ポリシー条件における ID 属性
has_identity_attribute_value 関数と has_identity_attribute_tag_match 関数は、クエリーを実行しているユーザーのID属性を評価します。これらは、列マスクポリシーの WHEN 句でサポートされています。次の制限が適用されます:
- これらは、列マスクポリシーの
MATCH COLUMNS句ではサポートされていません。 - これらは
GRANTまたはDENYポリシーではサポートされていません。 - カタログエクスプローラーのポリシー作成インターフェイスは、属性関数をサポートしていません。SQL を使用してこれらのポリシーを作成します。
使用パターンについては、クエリーを実行するユーザーの属性に基づいて列をマスクするを参照してください。
古いランタイムからのアクセス
Databricks Runtimeバージョン 16.4 より前の標準および専用のコンピュートは、ABAC で保護されたテーブルにアクセスできません。 古いランタイムで実行し続けるために特定のワークロードが必要な場合は、ABAC ポリシーを広範囲に適用するのではなく、特定のグループに適用します。 ポリシーを適用するユーザーまたはプリンシパルのみをそのグループに追加し、 EXCEPT句を使用して古いランタイムワークロードを実行するプリンシパルを除外します。グループ外のユーザーは、基となるテーブルへの完全なアクセス権を保持します。これにより、サポートされているランタイムへの移行中も、ワークロードは引き続きテーブルにアクセスできるようになります。
ビューに対するABACポリシー
ベータ版
ビューへの ABAC ポリシーの適用は ベータ版です。これを使用するには、ワークスペース管理者がワークスペース設定の [プレビュー] ページから ABAC on Views プレビューを有効にする必要があり、Databricks Runtime 19 以降を使用する必要があります。ワークスペースレベルのプレビューの管理を参照してください。
ビュー上のポリシーには、次の要件と制限が適用されます:
- メトリクス ビューはサポートされていません :メトリクス ビューに ABAC ポリシーを適用することはできません。
- 1つのクエリーでレイヤー化できるポリシーは最大20個です :ベーステーブルにポリシーを設定でき、その上に構築された各ビューに独自のポリシーを設定できます。クエリーがビューを読み取る場合、階層の各レベルですべての適用可能なポリシーが適用されます。適用されるポリシーが20個を超える場合、クエリーは失敗します。
CREATE OR REPLACE VIEWは管理タグと直接アタッチされたポリシーを削除します :ビューをCREATE OR REPLACEステートメントで置き換えると、ビューのメタデータが、管理タグおよび直接アタッチされたポリシーとともにクリアされます。メタデータを保持するには、代わりにALTER VIEWを使用してください。CREATE OR REPLACEを使用する場合は、後で管理タグとポリシーを再適用してください。- 管理タグが付いた列は、タグが削除されるまで削除できません : ベーステーブルと同様に、ビューの列を削除する前に、その列から管理タグを削除する必要があります。そうしないと、タグに依存するポリシーが誤って削除される可能性があります。
- 受信者側で共有ビューにABACポリシーを適用することはできません :OpenSharingを介してビューを共有する場合、受信者はその共有ビューにABACポリシーを適用できません。受信者側でポリシーを適用するには、代わりにベーステーブルを共有し、共有テーブルに対するABACポリシーを設定した上で、受信者にそのベーステーブル上に受信者ローカルビューを作成してもらいます。「共有テーブル上の受信者ローカルビュー」を参照してください。
ABACのマテリアライズドビューとストリーミングテーブルに関するポリシー
パイプラインがマテリアライズドビューまたはストリーミングテーブルを更新する際、パイプラインの所有者またはランのIDを使用してポリシーを評価します。そのIDがABACポリシーの対象である場合、マテリアライズドビューまたはストリーミングテーブルには、マスクまたはフィルター処理されたデータが永続的に含まれます。これを回避するには、パイプラインの更新中に読み取られるすべてのテーブルに関連付けられたABACポリシーの EXCEPT 句に、パイプライン所有者またはランとしてのIDを追加します。TO 句を使用して、マスクまたはフィルター処理されたデータを受け取るユーザーとグループを指定します。
ABACポリシーを含むOpenSharingテーブル、またはそれらを参照するビュー
ABACポリシーが割り当てられたテーブル、またはABACポリシーが割り当てられたテーブルを参照するビューは、共有所有者がそのポリシーから免除されている場合(EXCEPT句に記載されている場合)に限り、OpenSharingを介してのみ共有できます。ポリシーは、受信者のアクセス権を管理するものではありません。受領者は、共有テーブルに独自のABACポリシーを適用することで、自身の側でアクセス制御を実施できます。
- 共有プロバイダーについては、 「ABAC ポリシーによって保護されたテーブルとスキーマを共有に追加する」を参照してください。
- 共有受信者については、 「ABAC で保護されたデータの読み取りと ABAC ポリシーの適用」を参照してください。
OpenSharing を ABAC とともに使用する方法について詳しくは、OpenSharing と ABAC をご覧ください。
ABAC ポリシーを使用したテーブルのクローン作成
ABACポリシーが設定されているテーブルでは、ディープクローンとシャロークローンはサポートされていません。テーブルをクローンするには、テーブルに適用されるすべてのポリシーの EXCEPT 句にリストされているService Principalまたはグループを使用します。
免除された校長は、フィルタリングもマスクもされていないデータを見ることができる。ETLやパイプラインワークロードに使用されるサービスプリンシパルなど、信頼できるIDのみを除外します。
例えば、次のポリシーは、テーブルをクローンできる etl_service_principal を除くすべてのユーザーに対して PII 列をマスクします。
CREATE POLICY mask_pii
ON CATALOG prod
COLUMN MASK prod.governance.mask_value
TO `account users`
EXCEPT `etl_service_principal`
FOR TABLES
MATCH COLUMNS
has_tag_value('pii', 'ssn') AS ssn
ON COLUMN ssn;
AI SearchインデックスとABACポリシー
そのテーブルから作成されたAI Searchインデックスには、ソーステーブルのABACポリシーは適用されません。インデックスはソーステーブルからすべての行を同期し、クエリの処理時に行フィルターまたは列マスクのポリシーを適用しません。
列マスクが設定されているテーブルの場合、同期する列の設定を使用して、マスクされた列をインデックスから除外できます。
同一ユーザーに対して、同じテーブルまたは列に複数のポリシーが存在する
特定のテーブルと特定のユーザーに対しては、解決できる行フィルタは 1 つだけです。また、特定の列と特定のユーザーに対しては、解決できる列マスクは 1 つだけです。 複数のポリシーを定義できますが、ユーザーがテーブルをクエリするときは、1 つのポリシーの条件のみが一致する必要があります。 同じユーザー、テーブル、または列に対して複数の異なる行フィルターまたは列マスクが適用された場合、Databricks はアクセスをブロックし、エラーを返します。同じ引数を持つ同じ行フィルタまたは列マスクUDFに解決される場合、複数のポリシーが許可されます。
詳細は、競合するフィルターとマスクを参照してください。
専用コンピュート上のABAC
専用コンピュートでの ABAC の制限については、 「制限事項」を参照してください。
ABACとテーブルレベルの行フィルターおよび列マスクに共通する制限事項
ABAC とテーブルレベルの行フィルターおよび列マスクの両方に適用される行フィルターおよび列マスクの一般的な制限については、 「制限事項」を参照してください。