サービス ポリシー関数リファレンス
ベータ版
この機能はベータ版です。アカウント管理者は、アカウント コンソールの [プレビュー] ページからこの機能へのアクセスを制御できます。 Databricksのプレビューを管理するを参照してください。
カスタム SQL サービスポリシーは、Unity Catalog に登録された SQL ユーザー定義関数 (UDF) であり、Databricks はそれがアタッチされているサービスとのすべてのインタラクション時に評価します。This page is the field and syntax reference for those functions.For the end-to-end procedure, see Create a SQL ポリシー.
関数シグネチャ
サービスポリシー関数は単一のevent VARIANTパラメーターを受け取り、VARIANTを返します:
CREATE OR REPLACE FUNCTION <catalog>.<schema>.<function_name>(
event VARIANT
)
RETURNS VARIANT
LANGUAGE SQL
RETURN <expression>;
この関数は両方の評価ポイントで実行されます。それらを区別するためにevent:type::stringで分岐します。
'request': サービスが呼び出される前の 入力 フェーズ ( ON CALL )。'response': サービスが応答した後の 出力 フェーズ( ON RESULT )。
event 引数
event インタラクションデータとコンテキストを保持します。利用可能なフィールドはサービスタイプによって異なります。
フィールド | 適用対象 | 説明 |
|---|---|---|
| すべてのサービス | フェーズ: |
| すべてのサービス | ポリシーがアタッチされているサービスのUnity Catalog完全名 (オプション)。 |
| モデルサービス、モデルプロバイダーサービス、MCPサービス( | 呼び出し元が指定した文字列のキーと文字列の値を持つ JSON オブジェクト。リクエストタグを参照してください。 |
| すべてのサービス | リクエストの認証に使用される実行 ID |
| すべてのサービス |
|
| すべてのサービス | アクティングIDのOAuthクライアントID(存在する場合、OBOコール時)。 |
| すべてのサービス | 存在する場合、エージェントなどのアクション実行アイデンティティのリソース。 |
| すべてのサービス |
|
| MCPサービス | 呼び出されているツールとその引数(例: |
| モデルサービス、モデルプロバイダーサービス | 抽出された最後のユーザーまたはアシスタントメッセージ(API非依存)。コンテンツの確認にご利用ください。 |
| モデルサービス、モデルプロバイダーサービス | リクエストまたはレスポンスのペイロード全体。 |
| モデルサービス、モデルプロバイダーサービス | 出力フェーズ(ON RESULT)で利用可能な元のリクエスト。 |
パスアクセス (event:...) は VARIANT を返します。スカラー型にキャストしてからリテラルと比較します (例えば、event:type::string = 'request')。そうしないと、比較は DATATYPE_MISMATCH エラーで失敗します。
タグのリクエスト
カスタムポリシーによって、Databricks-Ai-Gateway-Request-Tagsヘッダーで送信されたタグを評価できます。
Databricks-Ai-Gateway-Request-Tags: {"project":"p-1042"}
このサポートは、MCP tools/call を含め、サービスポリシーが実行されるパス上の Unity Gateway リクエストに適用されます。
タグはリクエストヘッダーから取得され、他のポリシーメタデータとともに event:context に表示されます。event:data および event:request_data には、ペイロード本体が含まれます。
event:context.request_tags は event VARIANT 内のオブジェクトであり、文字列のキーと文字列の値を持ち、論理的には MAP<STRING, STRING> です。event:context.request_tags.project::string を使用してタグを読み取ります。キーと値は、大文字と小文字、句読点、および空の文字列を保持します。ヘッダーのないリクエストには、空のオブジェクト({})が含まれます。両方の評価フェーズは、リクエスト変換、リトライ、モデルfallbackを含め、同じリクエストタグを受け取ります。
defaultでは、デコードされたキーと値の合計サイズは 10 KiB の UTF-8 データに制限されます。HTTP ヘッダーのサイズ制限も適用されます。SDK および REST の例については、リクエストのタグ付けを参照してください。
モデルサービスは、不正な形式またはサイズオーバーのタグヘッダーを拒否します。適用可能なサービスポリシーが設定された MCP tools/call リクエストの場合、ゲートウェイはポリシーを評価する前( Log モードを含む)にこれらのヘッダーも拒否します。
タグは呼び出し元から提供されるものであり、サービスタグや認証済みアクターのコンテキストとは別個のものです。タグ単体では、IDやプロジェクトを使用する権限は確立されません。これらの権限を確認する際は、信頼できるIDおよび認可データを使用してください。タグ値の確認例については、適格なプロジェクトの要件を参照してください。
次の制限が適用されます:
- リクエストタグは、外部ポリシー プロバイダーに送信されるイベントに含まれないか、LLM-as-a-judgeのプロンプトに自動的に追加されません。
- MCPの
ASK承認ではリクエストのタグが区別されず、承認プロンプトにも表示されません。タグが異なっていても、それ以外が一致する呼び出しに対して承認を再利用できます。タグベースの適用にはALLOWおよびDENYの決定を使用します。これらの決定は、各リクエストに対して評価されます。
戻り値
カスタムポリシーは決定ポリシーです。これは、ALLOW、DENY、またはASK (大文字と小文字を区別しません) の result フィールドと、オプションの reason を含む VARIANT を返します。result の値によって、何が起こるかが決まります。
ALLOW:対話が進行します。DENY:Databricksがインタラクションをブロックします。エラーの代わりに、呼び出し元は成功(HTTP 200)レスポンスを受け取ります。このレスポンスのアシスタントターンはブロックを報告し、最上位のdatabricks_service_policyオブジェクト内にreasonが含まれます。ASK:MCPサービスでは、ツールのラン前にユーザーの承認を得るためにリクエストが停止する。カスタムSQLまたはPythonのポリシーがモデルサービスまたはモデルプロバイダーサービスに対してASKを返す場合、これらのサービスはユーザーに承認を求めることができないため、Databricksはリクエストまたはレスポンスをブロックします。
named_structで結果を構築し、関数がVARIANTを返すようにto_variant_objectでラップし、resultとreasonをトップレベルフィールドとして保持します。単純なnamed_structはSTRUCTを返しますが、CAST(... AS VARIANT)はサポートされていません。
to_variant_object(named_struct('result', 'DENY', 'reason', 'GitHub push operations are not permitted by policy.'))
ゲートウェイは、将来を見据えたエンベロープ形式も受け入れます。
to_variant_object(named_struct('decision', named_struct('result', 'DENY', 'reason', '...')))
Fail-closedフィールドアクセス: パラメーターに存在しないフィールドにアクセスすると、エラーが発生し、VARIANT DENYになります(標準のSQLVARIANT NULLアクセスでは、フィールドがない場合に が返されます)。これにより、予期されたフィールドがない場合にポリシーがインタラクションを許可することを防ぎます。
サポートされている SQL
Databricks はポリシー本文を CEL に変換し、ランタイムで評価するため、関数本文は SQL の制限付きサブセットのみをサポートします。Databricks は、ポリシーをアタッチするときにサポートされない関数または構文を拒否し、評価時にポリシーは fail closed(DENY)になります。
カテゴリー | ポリシー本文でサポートされています |
|---|---|
演算子 | 比較演算子、論理演算子、および算術演算子、 |
コントロールフロー |
|
キャスト |
|
データアクセス | VARIANT / JSON パス アクセス |
文字列関数 |
|
その他の機能 |
|
サポートされていません: ai_query、サブクエリ、BETWEEN、集計関数、ラムダ / EXISTS、および可変長引数 CONCAT または COALESCE。