ABAC GRANT モデル向けポリシー(ベータ版)
ベータ版
ABAC GRANT ポリシーはベータ版です。ベータ版では、GRANT ポリシーは、カタログまたはスキーマ レベルでアタッチされたモデルにEXECUTE権限を付与できます。追加の権限とセキュリティ保護可能なタイプは今後のリリースでサポートされます。
このページでは、管理タグが条件に一致するセキュリティ保護可能なオブジェクトに Unity Catalog の権限を動的に付与する ABAC GRANT ポリシーについて説明します。Catalog Explorer、SQL、Databricks SDK でそれらを作成、編集、一覧表示、削除する方法、GRANT ポリシーが直接付与とどのように相互作用するか、および現在のベータスコープと制限について説明します。
ABACの概要、および管理タグやhas_tag、has_tag_valueなどの組み込み関数といった主要な概念については、属性ベースアクセス制御(ABAC)の基本概念を参照してください。
コンピュートの要件
SQL を使用して GRANT ポリシーを作成、変更、または破棄するには、Databricks Runtime 18.3 以降を実行している クラシック コンピュート クラスター が必要です。
GRANT ポリシーとは何ですか?
GRANTポリシーは、管理タグがポリシーの条件と一致するセキュリティ保護可能なオブジェクトに、Unity Catalogの権限を動的に付与する属性ベースのアクセス制御ポリシーです。Unity Catalog は、アクセスがチェックされるたびに、ポリシーのスコープ内にある各セキュリティ保護可能なオブジェクトの管理タグに対して、ポリシーの WHEN 条件を評価し、一致するすべてのセキュリティ保護可能なオブジェクトに権限を付与します。
これに対し、直接のGRANTステートメントは、3階層の名前空間(catalog.schema.object)で識別される保護可能なオブジェクトに権限を割り当てます。
ベータ版では、GRANT ポリシーは1つのセキュリティ保護可能なタイプに対して1つの権限、つまりモデルに対するEXECUTEをサポートしています。顧客が登録した MLflow モデルと、Databricks がホストする基盤モデルの両方が、system.ai で対象となります。MLflow モデルが Unity Catalog にどのように登録されているかについては「Unity Catalogでのモデルのライフサイクルの管理」を、Databricks がホストする基盤モデルについては「Unity Catalog から生成AIおよびLLMモデルにアクセス」を参照してください。
GRANT ポリシーは、作成した管理タグ、または Databricks によって条件で事前定義されたシステムタグのいずれかを参照できます。
例えば、以下のポリシーは、production.ml_modelsの顧客登録済みMLflowモデルに適用されているlifecycleの管理タグを使用しています。ポリシーは、lifecycle = 'production'タグが付けられたモデルに対してのみEXECUTEを付与します:
CREATE POLICY grant_production_model_access
ON SCHEMA production.ml_models
COMMENT 'Grant EXECUTE on production MLflow models'
TO `analysts`
GRANT EXECUTE FOR MODELS
WHEN has_tag_value('lifecycle', 'production');
次のポリシーは、ai.model_creatorシステムタグと一致させることにより、system.ai内のAnthropicがホストする基盤モデルに対して、contractorsを除くdata_scientistsにEXECUTEを付与します。すべてのai.model_creator = 'anthropic'を持つモデルが対象となり、個別のモデルへの許可は不要です。
CREATE POLICY grant_anthropic_foundation_models
ON SCHEMA system.ai
COMMENT 'Grant EXECUTE on Anthropic foundation models'
TO `data_scientists`
EXCEPT `contractors`
GRANT EXECUTE FOR MODELS
WHEN has_tag_value('ai.model_creator', 'anthropic');
直接付与を使用した同等のアクセスでは、system.aiにあるモデルごとに1つのステートメントが必要であり、Databricksが新しいAnthropicモデルを追加するたびに再発行されます。
GRANT EXECUTE ON MODEL `system`.`ai`.`databricks-claude-sonnet-4-6` TO `data_scientists`;
GRANT EXECUTE ON MODEL `system`.`ai`.`databricks-claude-opus-4-7` TO `data_scientists`;
GRANT EXECUTE ON MODEL `system`.`ai`.`databricks-claude-haiku-4-5` TO `data_scientists`;
GRANTポリシーは、行フィルターおよび列マスクポリシーとは2つの点で異なります。
- 行フィルターと列マスクのポリシーは、ユーザーがすでにアクセスできるデータの内容を制限します。GRANT ポリシーは、ユーザーがそもそもオブジェクトにアクセスできるかどうかを決定します。
- 行フィルターと列マスクのポリシーには、フィルターまたはマスクを実装するためのユーザー定義関数 (UDF) が必要です。GRANT ポリシーは UDF を使用しません。条件はポリシー定義にインラインで表現されます。
GRANT ポリシーと直接のGRANTの連携
オブジェクトに対する有効な権限は、直接付与と適用されるGRANTポリシーの集合です。次のいずれかの条件が当てはまる場合、プリンシパルはモデルに対して EXECUTE を保持します。
- モデルのカタログまたはスキーマにアタッチされたGRANTポリシーは、
TOにプリンシパルをリストし(EXCEPTにはリストしません)、ポリシーのWHEN条件がモデルのタグと一致します。 - モデル、そのスキーマ、またはそのカタログに対する直接の
GRANT EXECUTEは、直接付与されたか、グループメンバーシップを通じてか、あるいは他の管理権限を通じてかにかかわらず、そのプリンシパルに適用されます。
アクセスはこれらのソースの結合であるため、より選択的なGRANTポリシーは、除外されたプリンシパルがEXECUTEを欠いていることを意味しません。プリンシパルは、モデルに対する直接付与、またはその親スキーマもしくは親カタログを介して、まだ権限を保持できます。モデルに対するEXECUTEの制御の主な方法としてGRANTポリシーを使用する予定がある場合は、まず、すでに存在する直接のGRANTがそのポリシーを上書きする可能性があるかどうかを判断してください。
- スコープがそのスキーマまたはカタログ内のモデルをカバーするすべてのGRANTポリシーを一覧表示するには、
SHOW EFFECTIVE POLICIES ON SCHEMA <parent_schema>(またはON CATALOG <parent_catalog>) を使用できます。SHOW EFFECTIVE POLICIESはON MODELを直接サポートしていません。対応する REST API はGET /api/2.1/unity-catalog/policies/{on_securable_type}/{on_securable_fullname}?include_inherited=trueです(Python SDK:w.policies.list_policies(..., include_inherited=True))。 - 直接の許可を列挙するために、モデルとその祖先に
SHOW GRANTSを適用してください。セキュラブルオブジェクトへの直接付与に対する同等のREST APIはGET /api/2.1/unity-catalog/permissions/{securable_type}/{full_name}です(Python SDK:w.grants.get(...));直接付与と継承された付与の結合については、GET /api/2.1/unity-catalog/effective-permissions/{securable_type}/{full_name}を使用します(Python SDK:w.grants.get_effective(...))。
GRANT ポリシーを作成
GRANT ポリシーは、カタログ エクスプローラ UI、CREATE POLICY SQL ステートメント、または Databricks SDK を使用して作成できます。
GRANT ポリシーを作成するには、ポリシーがアタッチされているカタログまたはスキーマに対するMANAGEが必要か、またはそのセキュリティ保護可能なオブジェクトを所有している必要があります。
- Catalog Explorer
- SQL
- Python SDK
-
Databricks ワークスペースで、
カタログ をクリックします。
-
ポリシーを適用するカタログまたはスキーマを選択してください。GRANT ポリシーはベータ版では、カタログまたはスキーマレベルでのみ適用できます。
-
[ ポリシー ] タブをクリックします。
-
新しいポリシー をクリックします。
-
「 ポリシー識別 」の下で、 ポリシー名 とオプションの 説明 を入力します。
-
プリンシパルとスコープ:
- 「 適用先 」で、ポリシーが適用されるプリンシパル(ユーザー、グループ、またはサービスプリンシパル)を選択します。
- 除外対象 で、ポリシーから除外するプリンシパルを任意で選択します。
- **スコープ**で、ポリシーがアタッチされているカタログまたはスキーマを確認してください。
-
「**ポリシータイプ**」で、「**アクセス権の付与**」を選択します。
-
「**セキュリティ保護可能なオブジェクト**」で「**モデル**」を選択します。 ベータ版では、GRANTポリシーでサポートされている保護可能なタイプはモデルのみです。リスト内の他のタイプ(テーブル、ボリューム、スキーマ、カタログ)は、[アクセス権を付与]と組み合わせることはできません。
-
条件 :選択したカタログまたはスキーマ内のモデルにポリシーの適用範囲を設定する方法を選択します。
- 条件なしで 、選択されたカタログまたはスキーマ下のすべてのモデルにポリシーが適用されます。
- これらのタグのいずれかに一致するセキュリティ保護可能なオブジェクト は、選択された管理タグの少なくともいずれか1つが付与されているモデルにのみポリシーを適用します。
- カスタム式に一致するセキュリティ保護可能なオブジェクトを使用すると、ポリシーの適用対象となるモデルを決定するタグベースの式を記述できます。使用可能な条件関数については、条件と組み込み関数を参照してください。
-
「**権限**」項目で、「**実行**」を選択します。EXECUTEは、ベータ版のモデルでサポートされている唯一の権限です。
-
保存する前に、同等のSQLステートメントを確認するため、[ コードを表示 ] をクリックしてから、[ ポリシーを作成 ] をクリックします。
GRANTポリシーのSQL構文は、ROW FILTERまたはCOLUMN MASKの代わりにGRANT ... FOR ... WHEN ...本体を使用します。
CREATE [OR REPLACE] POLICY policy_name
ON { CATALOG catalog_name | SCHEMA schema_name }
[COMMENT description]
TO principal [, ...]
[EXCEPT principal [, ...]]
GRANT EXECUTE FOR MODELS
[WHEN condition]
パラメーター:
policy_name: ポリシー名です。同じセキュリティ保護可能なオブジェクトに定義されているすべてのポリシーの中で、一意である必要があります。ON { CATALOG | SCHEMA }:ポリシーがアタッチされているスコープ。ベータ版では、GRANT ポリシーはカタログレベルまたはスキーマレベルで適用できますが、個々のモデルには適用できません。TO principal [, ...]ポリシーの対象となるユーザー、グループ、またはサービスプリンシパルです。EXCEPT principal [, ...]:ポリシーの対象外となるプリンシパル。GRANT EXECUTE FOR MODELS: 権限とセキュリティ保護可能なタイプを指定します。Beta では、EXECUTEのMODELS上での組み合わせのみがサポートされています。WHEN condition:適用範囲内で、ポリシーがどのモデルに適用されるかを決定するタグベースのBoolean式組み込み関数has_tag('tag_name')およびhas_tag_value('tag_name', 'tag_value')を使用します。省略した場合は、TRUEがデフォルトになります(スコープ内のすべてのモデルに適用されます)。使用可能な条件関数については、条件と組み込み関数を参照してください。
完全なドキュメントについては、Databricks SDK for Python のドキュメントを参照してください。
この例では、請負業者を除き、data_scientistsに対し、system.aiでai.model_creator = 'anthropic'のタグが付けられたAnthropicホストの基盤モデルにEXECUTEを付与するGRANT ポリシーを作成します。
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.catalog import (
GrantOptions,
PolicyInfo,
PolicyType,
SecurableType,
)
w = WorkspaceClient()
w.policies.create_policy(PolicyInfo(
name="grant_anthropic_foundation_models",
comment="Grant EXECUTE on Anthropic foundation models",
on_securable_type=SecurableType.SCHEMA,
on_securable_fullname="system.ai",
for_securable_type=SecurableType.MODEL,
policy_type=PolicyType.POLICY_TYPE_GRANT,
to_principals=["data_scientists"],
except_principals=["contractors"],
grant=GrantOptions(privileges=["EXECUTE"]),
when_condition="has_tag_value('ai.model_creator', 'anthropic')",
))
GRANTポリシーの編集
- Catalog Explorer
- SQL
- Python SDK
- Databricks ワークスペースで、
カタログ をクリックします。
- ポリシーが関連付けられているカタログまたはスキーマを選択してください。
- [ ポリシー ] タブをクリックします。
- 編集したいポリシーを選択します。
- 変更したい任意のフィールドを更新してください。
- 「 ポリシーを更新 」をクリックします。
SQL で GRANT ポリシーを編集するには、CREATE OR REPLACE POLICY を同じ名前とターゲットで実行します。「GRANT ポリシーの作成」を参照してください。
SQLのCREATE OR REPLACE POLICYとは異なり、update_policyは部分的な更新をサポートしています。変更するフィールドを指定するには、update_maskパラメーターを使用します。更新されるのは、それらのフィールドのみです。update_mask が "*" であるか空の場合、policy_info 内のすべてのフィールドが適用されます。
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.catalog import PolicyInfo
w = WorkspaceClient()
w.policies.update_policy(
on_securable_type="SCHEMA",
on_securable_fullname="system.ai",
name="grant_anthropic_foundation_models",
policy_info=PolicyInfo(
except_principals=["contractors", "interns"],
),
update_mask="except_principals",
)
GRANT ポリシーを削除する
- Catalog Explorer
- SQL
- Python SDK
- Databricks ワークスペースで、
カタログ をクリックします。
- ポリシーが関連付けられているカタログまたはスキーマを選択してください。
- [ ポリシー ] タブをクリックします。
- ポリシーを選択してください。
- ポリシーを削除 をクリックします。
SQL で GRANT ポリシーを削除するには、DROP POLICY を実行します:
DROP POLICY IF EXISTS grant_anthropic_foundation_models ON SCHEMA system.ai;
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
w.policies.delete_policy(
on_securable_type="SCHEMA",
on_securable_fullname="system.ai",
name="grant_anthropic_foundation_models",
)
ポリシーを表示
セキュリティ保護可能なオブジェクトで定義されているポリシーを一覧表示するには、SHOW POLICIES を使用します。SHOW EFFECTIVE POLICIES を使用すると、スキーマに影響するカタログ レベルのポリシーなど、親スコープから継承されたポリシーも含められます。
SHOW [EFFECTIVE] POLICIES ON { CATALOG | SCHEMA } securable_name
結果には、ポリシー名、ポリシータイプ、および各ポリシーが定義されているカタログまたはスキーマが含まれます。GRANT ポリシーは、同じスコープにアタッチされている行フィルターおよび列マスクポリシーと共に、ポリシータイプGRANTとして返されます。table列は、テーブルスコープのポリシー(行フィルターと列マスク)にのみ値が設定されます。カタログまたはスキーマにアタッチされているGRANTポリシーの場合、NULLとなります。
例:
SHOW EFFECTIVE POLICIES ON SCHEMA system.ai;
ポリシー名 | ポリシータイプ | カタログ | スキーマ | テーブル | Comment |
|---|---|---|---|---|---|
アンソロピック・ファウンデーションモデルの付与 | GRANT | システム | AI | NULL | Anthropic基盤モデルに対する実行権を付与する |
SHOW GRANTS GRANT ポリシーによって付与された権限は含まれません。モデルに対するすべてのEXECUTEアクセスを表示するには、モデルのSHOW GRANTS出力を、親スキーマまたはカタログ上でSHOW EFFECTIVE POLICIESによって返されるGRANTポリシーと組み合わせます。
ポリシーについて説明します
特定のGRANTポリシーの詳細を表示するには、DESCRIBE POLICYを使用してください。対象のセキュリティ保護可能なオブジェクトまたはオブジェクトの所有権において、MANAGEが必要です。
{ DESC | DESCRIBE } POLICY policy_name ON { CATALOG | SCHEMA } securable_name
結果には、名前、セキュリティ保護可能なオブジェクトのタイプ、セキュリティ保護可能なオブジェクトの名前、プリンシパル、権限、およびWHEN条件を含む、ポリシーのプロパティがキーと値のペアとして表示されます。
例:
DESCRIBE POLICY grant_anthropic_foundation_models ON SCHEMA system.ai;
info_name | 情報値 |
|---|---|
名前 | アンソロピック・ファウンデーションモデルの付与 |
セキュリティ保護可能なタイプ | スキーマ |
セキュリティ対象について | system.ai |
プリンシパルへ | データサイエンティスト |
プリンシパルを除く | 請負業者 |
セキュリティ保護可能なタイプ | モデル |
ポリシーの種類 | GRANT |
付与された権限 | EXECUTE |
条件時 | AIモデル作成者:Anthropic |
ポリシー クォータ
リソース | 上限 |
|---|---|
メタストアごとのポリシー | 10,000 |
カタログまたはスキーマごとのポリシー | 100 |
これらのクォータは、行フィルターと列マスクのポリシーに関するクォータとは別です。
監査ログ
GRANT ポリシーの作成、変更、および削除操作は、行フィルターポリシーおよび列マスキングポリシーと同じcreatePolicy、deletePolicy、getPolicy、およびlistPoliciesのアクションとしてログに記録されます。監査ログクエリのサンプルについては、監査ログを参照してください。
ベストプラクティス
次の推奨事項は、保守、監査、および理解が容易なGRANT ポリシーを設計するのに役立ちます。
TOおよびEXCEPTでグループを使用し、個々のユーザーは使用しないでください。 ポリシーで指定されたグループにユーザーを追加または削除すると、ポリシーを編集することなく、ポリシーの適用対象が変更されます。- 対象をカバーする最小のスコープでポリシーをアタッチしてください。 ポリシーを適用する保護対象を含む最も狭いスコープを使用してください。より広範なスコープでは、ポリシーのタグ照合に無関係なセキュリティ保護可能オブジェクトを含めてしまい、意図しないアクセスを許可してしまう可能性があります。
- 安全なデフォルト設定にはタグ継承を使用してください。 子孫が継承するように、親カタログまたはスキーマでデフォルトのタグ値を適用します。継承されたタグは、異なる値が必要な特定のオブジェクトでのみ上書きする必要があります。
EXCEPTと組み合わせて、ポリシーの制御された例外を処理します。 - 同じ権限に対して、GRANTポリシーと直接付与を併用しないでください。 特定の保護可能なオブジェクトに対する特定の権限については、GRANTポリシーまたは直接付与のいずれかを選択してください。両方を選択することはできません。GRANT ポリシーは直接付与される権限と統合されます。そのため、それらを同じ保護対象で混在させると、誰がアクセス権を持っているかを把握し、変更を監査することが難しくなります。
USE CATALOGおよびUSE SCHEMAには直接GRANTを使用し、EXECUTEにはGRANTポリシーを適用してください。 GRANTポリシーでは、モデルへのアクセスに必要なUSE CATALOGとUSE SCHEMAの前提条件が付与されません。それらを直接付与し、タグ別に個々のモデルにEXECUTEをスコープ設定するためにGRANTポリシーを使用します。
制限事項:
- モデルに対する
EXECUTE権限のみがサポートされています。CREATE MODEL、CREATE MODEL VERSION、APPLY TAGは GRANT ポリシーではサポートされておらず、直接付与する必要があります。 - ユーザーがモデルにアクセスするために必要となる前提条件の権限
USE SCHEMAおよびUSE CATALOGは、GRANTポリシーではサポートされておらず、直接付与する必要があります。 - ポリシーはモデルではなく、カタログまたはスキーマにアタッチできます。
SHOW GRANTSGRANT ポリシーによって付与された権限は返されません。INFORMATION_SCHEMAGRANT ポリシーは含まれていません。- モデルまたはモデルバージョンの削除はGRANTポリシーの対象外です。モデルのバージョンとモデルを削除する方法については、Unity Catalogでのモデルのライフサイクルの管理を参照してください。
- Delta Sharing を使用して、GRANT ポリシーが定義されているモデルを共有することはできません。
詳細情報
Unity Catalog での特権の管理も参照してください。