サービス ポリシーを作成してアタッチする
ベータ版
この機能はベータ版です。アカウント管理者は、アカウント コンソールの [プレビュー] ページからこの機能へのアクセスを制御できます。 Databricksのプレビューを管理するを参照してください。
サービスポリシーの概要については、AIセキュリティ可能オブジェクトのサービスポリシーを参照してください。
サービスポリシーを作成するには、SQLポリシー関数を記述し、 Unity AI Gateway UIを通じてMCPサービス 、モデルサービス 、またはモデルプロバイダーサービス にアタッチします。ポリシーは、 ON CALL (Databricksがサービスを呼び出す前)と ON RESULT (サービスが応答した後)の2つの評価ポイントで各インタラクションを管理します。
前提条件
- アカウント管理者は、アカウントコンソールの**[プレビュー]**ページからアカウントでベータ版を有効にする必要があります。
- ポリシー関数を作成するには: ターゲットスキーマに対する
CREATE FUNCTION権限。 - サービスにポリシーをアタッチするには:ターゲットサービスのセキュリティ保護可能な項目で
MANAGE**および**EXECUTEポリシー機能で 。
ステップ 1:ポリシー関数を記述します
サービスポリシー関数は、Unity Catalogに登録されているSQL UDFです。単一のVARIANTパラメーターであるevent(対話データとコンテキスト)を受け取り、VARIANTの結果を返します。
CREATE OR REPLACE FUNCTION <catalog>.<schema>.<function_name>(
event VARIANT
)
RETURNS VARIANT
LANGUAGE SQL
RETURN <expression>;
関数は両方の評価ポイントで実行されます。単一フェーズで動作するには、event:type::string(ON CALL の場合は 'request'、ON RESULT の場合は 'response')で分岐します。完全な event フィールド、戻り値、およびサポートされている SQL サブセットについては、「サービスポリシー関数リファレンス」を参照してください。
意思決定ポリシーの作成
ディシジョンポリシーは、ALLOW、DENY、またはASKのresultフィールドとオプションのreasonを持つVARIANTを返します。結果をnamed_structで構築し、to_variant_objectで囲み、関数がVARIANTを返し、resultおよびreasonをトップレベルフィールドとして保持するようにします。
resultの値によって何が起こるかが決まります (大文字と小文字は区別されません):
ALLOW:対話が進行します。DENY: Databricksはインタラクションをブロックします。呼び出し元は、reasonを含む構造化エラーを受け取ります。ASK人間による承認が得られるまで一時停止します。
サポートされているSQLサブセットと、VARIANTを返すためのルールについては、サービスポリシー関数リファレンスを参照してください。
例: MCPサービスからのGitHubプッシュを拒否する
このポリシーは、push_filesツールへのあらゆる呼び出しをブロックし、それ以外のすべての操作を許可します。ポリシーが特定の MCP サービスにアタッチされているため、関数はツール名を確認するだけで済みます。
CREATE OR REPLACE FUNCTION main.governance.block_github_push(
event VARIANT
)
RETURNS VARIANT
LANGUAGE SQL
RETURN
CASE
WHEN event:type::string = 'request'
AND event:context.tool.name::string = 'push_files'
THEN to_variant_object(named_struct('result', 'DENY', 'reason', 'GitHub push operations are not permitted by policy.'))
ELSE to_variant_object(named_struct('result', 'ALLOW', 'reason', ''))
END;
例:破壊的なツールを実行する前に人の承認が必要です
このポリシーは、delete_repositoryツールへの呼び出しを、人間の承認のために一時停止し、他のすべてのインタラクションを許可します。
CREATE OR REPLACE FUNCTION main.governance.ask_before_repo_delete(
event VARIANT
)
RETURNS VARIANT
LANGUAGE SQL
RETURN
CASE
WHEN event:context.tool.name::string = 'delete_repository'
THEN to_variant_object(named_struct('result', 'ASK', 'reason', 'Deleting a repository requires human approval.'))
ELSE to_variant_object(named_struct('result', 'ALLOW', 'reason', ''))
END;
このポリシーがASKを返すと、Databricksは実行前に人間の承認を求めて呼び出しを停止します。
MCPサービスを呼び出す外部エージェントに対して、DatabricksはMCP URLモードの誘引を使用して承認決定を提供します。ユーザーは提供されたURLを開いて呼び出しを承認または拒否します。外部エージェントは、承認後に呼び出しを再試行する必要があります。外部エージェントでASKを使用するには、エージェントのMCPクライアントがMCPプロトコルバージョン2025-11-25以降をサポートしている必要があります。
MCPサービスの場合、ツール呼び出しを承認すると承認が1時間キャッシュされるため、その期間内に同じ呼び出しが再度促されることはありません。
ツール許可リスト、キーワードおよびトピックのブロック、プロンプト長の制限、応答チェック、LLM-as-a-judge分類器など、その他のカスタムポリシーについては、サービスポリシーの例を参照してください。
ステップ2:ポリシーをサービスにアタッチする
ベータ期間中、**Unity AI Gateway** UI を介して、個別のMCPサービス、モデルサービス、またはモデルプロバイダーサービスにサービスポリシーをアタッチします。サービスに複数のポリシーをアタッチできます。各アタッチメントには優先度 (ランク) があり、チェーンは最初のDENYで停止します。ON CALL では、ポリシーは昇順 (ランクが低いものが最初) で評価されます。ON RESULT では、逆の順序で評価されます。
ポリシーをアタッチするには:
-
ワークスペースのサイドバーで、[ AI Gateway ] をクリックします。
-
管理するサービスを選択してください: モデル タブのモデルサービス、 プロバイダー タブのモデルプロバイダーサービス、または MCP タブのMCPサービス。
-
[ ポリシー ]タブを開き、[ 新しいポリシー ]をクリックします。
-
ポリシーの 名前 を入力します。
-
適用対象 で、ポリシーを適用するプリンシパルを選択します。デフォルトの すべてのアカウントユーザー は、全員に適用されます。
-
ガードレールタイプ で、ポリシーが実行する内容を選択してください。
- 安全でないコンテンツ や ジェイルブレイク などの組み込みガードレール。チェックをランする Evaluator model サービス (LLM ジャッジ) はあらかじめ選択されています。別のものを使用するには、 [詳細オプション] を展開して選択します (選択するモデルには
CAN_QUERYが必要です)。 - カスタム : 「 カスタム関数 」をクリックし、次に「 関数の選択 」をクリックして、ステップ1で記述したSQL関数を選択します。
- 安全でないコンテンツ や ジェイルブレイク などの組み込みガードレール。チェックをランする Evaluator model サービス (LLM ジャッジ) はあらかじめ選択されています。別のものを使用するには、 [詳細オプション] を展開して選択します (選択するモデルには
-
フェーズ で、ポリシーが実行される場所を選択します: 入力ガードレール (ON CALL、サービスが呼び出される前)、 出力ガードレール (ON RESULT、応答後)、またはその両方。カスタム関数は両方のフェーズで実行でき、
event:typeで分岐して1つにスコープを限定できます。一部の組み込みガードレールは、入力時のジェイルブレイク検出や出力時の幻覚検出のように、単一のフェーズでのみ実行されます。 -
**ランク**を設定して評価順序を制御します。ランクが最も低いものがリクエストで最初に実行され、レスポンスで最後に実行されます。
-
「 ポリシーの作成 」をクリックします。
ポリシーはサービスの**ポリシー**タブに表示されます。ベータ期間中は、伝播のためにしばらく時間を置き、その後にテストしてください。
ベータ期間中、ポリシーUIが変更される可能性があります。ラベルがこれらのステップと異なる場合は、製品内のラベルに従ってください。
組み込みポリシーを使用する
Databricks は、安全でないコンテンツや有害なコンテンツをブロックするための system.ai.block_unsafe_content など、system.ai 名前空間の下で組み込みサービスポリシーを提供しています。使用するには、ステップ 2 に従いますが、 ガードレールタイプ では カスタム ではなく組み込みガードレールを選択してください。組み込みガードレールにはポリシー固有の設定は不要です。他のポリシーと同様に、同じ フェーズ 、 ランク 、 評価者モデルサービス 、および Mode フィールドを設定します。
組み込みポリシーの全リストと、それらが Unity Catalog にどのように表示されるかについての注記については、組み込みサービスポリシーを参照してください。
組み込みのポリシー関数に対してEXECUTE権限が、ターゲットサービスに対してMANAGE権限が必要です。
ポリシーを確認する
ポリシーをアタッチした後、それがアクティブであり、期待される結果を生成していることを確認してください。
ポリシーをアタッチまたは変更した後、テストする前に変更が有効になるまでしばらくお待ちください。ベータ期間中、ポリシーの変更が反映されるまでに1、2分かかる場合があります。
アタッチの確認
Unity AI Gatewayで、対象のサービスを開き、アタッチされているポリシーを表示します。作成したポリシーがリストに表示されます。
「ポリシーの結果を監視する」
ポリシーが有効になっていることを確認できます。
- 呼び出し元から : ポリシーが
DENYを返すと、呼び出し元は指定したreasonを含む構造化エラーを受け取ります。ASKは人間の承認のために呼び出しを停止する。 - システムテーブル では、モデルと MCP アクティビティが使用状況テーブルに記録され、完全なリクエストとレスポンスのペイロードが推論テーブルに記録されます。
制限事項
ベータ版では、次の制限が適用されます:
- 変換 : サービスポリシーは決定 (ALLOW、DENY、またはASK) を返します。ベータ版では、リクエストまたはレスポンスのコンテンツは変換されません。
- ポリシー言語 : カスタムポリシー関数は
LANGUAGE SQLのみをサポートしています。 - **適用範囲**:ポリシーの適用はUIのみであり、個々のサービスに限定されており、そのポリシーはすべてのアカウントユーザーに適用されます。カタログレベルまたはスキーマレベルでのポリシーの適用、属性ベースのアクセス制御 (ABAC) の条件、およびカスタムプリンシパルは利用できません。