メインコンテンツまでスキップ

外部サービスポリシー API リファレンス

備考

ベータ版

この機能はベータ版です。ワークスペース管理者は、 Unity Gateway サービス ポリシー プレビューにオプトインすることで、 プレビュー ページからこの機能へのアクセスを制御できます。ワークスペースレベルのプレビューの管理を参照してください。

顧客が 外部サービスポリシー をサービスに関連付けると、Unity Gateway は管理対象の各対話でガードレールベンダーの HTTP Endpoint を呼び出し、Endpoint が返す判定を適用します。このページでは、エンドポイントが実装するコントラクト、つまり Databricks が送信するリクエスト、Databricks が期待するレスポンス、および Databricks が各レスポンスをどのように処理するかを説明します。

このページを使用して、顧客が外部サービスポリシーで使用できるEndpointを構築するか、ベンダーのEndpointが互換性があるかを確認します。顧客のセットアップについては、外部サービスポリシーでパートナー ガードレールを適用するを参照してください。

仕組み​

制御された各インタラクションにおいて、Databricksは JSON 本文を持つ POST 要求をEndpointに送信します。Endpointは内容を検査し、 ALLOW、 DENY、またはMCPツール呼び出しの場合は ASKを返します。 Databricksはその判定を適用します。

1つのEndpointで多数の顧客とポリシーに対応できます。顧客はポリシー構成で目的の動作を選択します。Databricks はリクエストのたびにその構成をEndpointに渡します。

Endpointの要件​

Endpointは以下の要件を満たす必要があります。

  • 顧客が接続で設定するホストとパスでJSON本文を含むPOSTリクエストを受け入れます。
  • OAuthマシン間 (M2M) 認証を受け入れます。顧客は、接続時にクライアント ID、クライアント シークレット、トークン Endpoint、およびオプションのスコープを構成します。DatabricksはトークンEndpointからアクセストークンを取得し、リクエストごとにAuthorizationヘッダーで送信します。トークンEndpointは、OAuth 2.0仕様で定義された形式でトークンを返す必要があります。外部サービスは OAuth 2.0 仕様に準拠している必要がありますを参照してください。
  • HTTPS を使用してください。Databricks は平文の HTTP 経由で Endpoint を呼び出しません。
  • 5秒以内に応答してください。Endpointが時間内に応答しない場合、Databricks は対話を拒否します。
  • すべての決定 (ブロックを含む) について、最大 64 KB の応答本文で JSON 判定と共に HTTP 200 を返します。

Endpointが異なる検出プロファイルのような複数の動作をサポートしている場合は、ポリシー設定として何を入力するかを顧客に伝えます。

リクエスト​

Databricksは、各評価をHTTPリクエストとして接続のホストとパスに送信します。パスは、接続に何もない場合に/になります。

HTTP
POST /<path> HTTP/1.1
Host: <host>
Authorization: Bearer <access-token>
Content-Type: application/json

本文は、次の2つのメンバーを持つJSONオブジェクトです。

JSON
{
"event": {},
"config": {}
}
  • event は評価中の相互作用です。event オブジェクトを参照してください。
  • config 顧客のポリシー設定を含むポリシーのオプションを保持します。config オブジェクトを参照してください。

eventオブジェクト​

フィールド

型

説明

type

String

インタラクションとフェーズ: tool_call、 tool_result、 model_call、または model_result。すべてのイベントに存在します。イベントタイプを参照してください。

target

String

Unity Catalog内の管理されたサービスの3レベルの名前。例:main.default.github_mcp。すべてのイベントに存在します。

data

オブジェクト

評価対象のコンテンツ。その形状は type に依存します。すべてのイベントに存在します。

request_data

オブジェクト

元となるリクエスト。リクエストのコンテキストで結果を判断できます。tool_result および model_result のみに存在します。

api_type

String

data と request_data の API 形式。model_call と model_result にのみ存在します。APIタイプを参照してください。

trace_id

String

ガバナンスされたリクエストのOpenTelemetryトレース ID。これを使用して、Logs内の評価をリクエストと照合します。リクエストにトレースがある場合にのみ存在するため、必須ではありません。

フィールド

型

説明

type

String

インタラクションとフェーズ: tool_call、 tool_result、 model_call、または model_result。すべてのイベントに存在します。イベントタイプを参照してください。

target

String

Unity Catalog内の管理されたサービスの3レベルの名前。例:main.default.github_mcp。すべてのイベントに存在します。

data

オブジェクト

評価対象のコンテンツ。その形状は type に依存します。すべてのイベントに存在します。

request_data

オブジェクト

元となるリクエスト。リクエストのコンテキストで結果を判断できます。tool_result および model_result のみに存在します。

api_type

String

data と request_data の API 形式。model_call と model_result にのみ存在します。APIタイプを参照してください。

trace_id

String

ガバナンスされたリクエストのOpenTelemetryトレース ID。これを使用して、Logs内の評価をリクエストと照合します。リクエストにトレースがある場合にのみ存在するため、必須ではありません。

イベントはコンテンツのみを運びます。呼び出しを行ったユーザー、エージェント、またはアプリのIDは含まれません。

イベントタイプ​

type

サービスとフェーズ

data

request_data

tool_call

MCP サービス、ツールの実行前

{"name": "<tool>", "arguments": {...}}

プレゼンテーションなし

tool_result

MCPサービス、ツールラン後

ツールの結果

{"name": "<tool>", "arguments": {...}}、発信元の呼び出し

model_call

モデルが呼び出される前のモデル サービスまたはモデル プロバイダー サービス

という名前の形式による完全なモデル要求本文。 api_type

プレゼンテーションなし

model_result

モデル サービスまたはモデル プロバイダー サービス、モデルが応答した後

完全なモデル レスポンス本文(名前で指定された形式で) api_type

完全なモデル要求本文

type

サービスとフェーズ

data

request_data

tool_call

MCP サービス、ツールの実行前

{"name": "<tool>", "arguments": {...}}

プレゼンテーションなし

tool_result

MCPサービス、ツールラン後

ツールの結果

{"name": "<tool>", "arguments": {...}}、発信元の呼び出し

model_call

モデルが呼び出される前のモデル サービスまたはモデル プロバイダー サービス

という名前の形式による完全なモデル要求本文。 api_type

プレゼンテーションなし

model_result

モデル サービスまたはモデル プロバイダー サービス、モデルが応答した後

完全なモデル レスポンス本文(名前で指定された形式で) api_type

完全なモデル要求本文

モデルの要求本文には、システム プロンプトや会話の以前のターンなど、要求内のメッセージが含まれています。顧客がポリシーの会話ウィンドウを設定した場合、本文には最新のメッセージのみが含まれる可能性があるため、完全な会話が存在しているとは想定しないでください。

APIタイプ​

モデル イベントは、呼び出し元が使用した API 形式でリクエストとレスポンス本体を運びます。Databricks はそれらを共通の形式に変換しません。api_type フィールドは形式の名前を指定します:

api_type

フォーマット

mlflow/v1/chat/completions

OpenAI Chat Completions と互換性のある Databricks Chat Completions

mlflow/v1/completions

Databricks 補完

mlflow/v1/embeddings

Databricks 埋め込み

mlflow/v1/responses

Databricks Open Responses

openai/v1/chat/completions

OpenAIチャット完了

openai/v1/completions

OpenAI完了

openai/v1/embeddings

OpenAI Embeddings

openai/v1/responses

OpenAI Responses

anthropic/v1/messages

Anthropic Messages

gemini/v1/generateContent

Gemini generateContent

gemini/v1/streamGenerateContent

Gemini streamGenerateContent

cursor/v1/chat/completions

カーソルチャット完了

codex/v1/responses

Codexの応答

typesafe/v1/systemone

システム 1

api_type

フォーマット

mlflow/v1/chat/completions

OpenAI Chat Completions と互換性のある Databricks Chat Completions

mlflow/v1/completions

Databricks 補完

mlflow/v1/embeddings

Databricks 埋め込み

mlflow/v1/responses

Databricks Open Responses

openai/v1/chat/completions

OpenAIチャット完了

openai/v1/completions

OpenAI完了

openai/v1/embeddings

OpenAI Embeddings

openai/v1/responses

OpenAI Responses

anthropic/v1/messages

Anthropic Messages

gemini/v1/generateContent

Gemini generateContent

gemini/v1/streamGenerateContent

Gemini streamGenerateContent

cursor/v1/chat/completions

カーソルチャット完了

codex/v1/responses

Codexの応答

typesafe/v1/systemone

システム 1

Unity Gatewayは、より多くのAPIをサポートするにつれてAPIタイプを追加できます。認識できない api_type は解析できないコンテンツとして扱い、DENY のような意図的な評価を返します。

configオブジェクト​

config ポリシーのオプションを文字列として保持します。接続またはパスは含まれていません。

フィールド

型

説明

policy_config

String

顧客が入力した通りのポリシー構成(文字列として渡される JSON オブジェクト)。たとえば "{\"profile\": \"strict\"}" のように、文字列を JSON として解析します。Databricks はこの値を読み取りません。顧客が空のままにすると、存在しません。

phases

String

ポリシーがランされるフェーズ: pre_call、post_call、または pre_call,post_call。

フィールド

型

説明

policy_config

String

顧客が入力した通りのポリシー構成(文字列として渡される JSON オブジェクト)。たとえば "{\"profile\": \"strict\"}" のように、文字列を JSON として解析します。Databricks はこの値を読み取りません。顧客が空のままにすると、存在しません。

phases

String

ポリシーがランされるフェーズ: pre_call、post_call、または pre_call,post_call。

config 他のポリシー オプションを含めることができます。認識できないキーは無視してください。

リクエストの例​

MCPツールの呼び出し、ツールラン前:

JSON
{
"event": {
"type": "tool_call",
"target": "main.default.github_mcp",
"trace_id": "4bf92f3577b34da6a3ce929d0e0e4736",
"data": {
"name": "create_issue",
"arguments": { "repo": "acme/website", "title": "Bug: checkout returns 500" }
}
},
"config": {
"policy_config": "{\"profile\": \"strict\"}",
"phases": "pre_call"
}
}

MCP ツールのラン後のツールの結果:

JSON
{
"event": {
"type": "tool_result",
"target": "main.default.github_mcp",
"trace_id": "4bf92f3577b34da6a3ce929d0e0e4736",
"data": { "content": [{ "type": "text", "text": "Issue #4213 created" }] },
"request_data": { "name": "create_issue", "arguments": { "repo": "acme/website" } }
},
"config": {
"phases": "pre_call,post_call"
}
}

モデルが呼び出される前のモデル要求:

JSON
{
"event": {
"type": "model_call",
"target": "main.default.support_assistant",
"api_type": "mlflow/v1/chat/completions",
"trace_id": "4bf92f3577b34da6a3ce929d0e0e4736",
"data": {
"messages": [
{ "role": "system", "content": "You are a support agent." },
{ "role": "user", "content": "My card number is 4111 1111 1111 1111. Please refund me." }
],
"max_tokens": 512
}
},
"config": {
"phases": "pre_call"
}
}

モデルが応答した後のモデルの応答:

JSON
{
"event": {
"type": "model_result",
"target": "main.default.support_assistant",
"api_type": "mlflow/v1/chat/completions",
"trace_id": "4bf92f3577b34da6a3ce929d0e0e4736",
"data": { "choices": [{ "message": { "role": "assistant", "content": "Here is your refund link." } }] },
"request_data": { "messages": [{ "role": "user", "content": "Please refund me." }] }
},
"config": {
"phases": "post_call"
}
}

レスポンス​

JSON本文でHTTP 200を返します:

JSON
{
"result": "DENY",
"reason": "The message contains a payment card number."
}

フィールド

型

説明

result

String

必須。ALLOW、DENY、またはASK。値は大文字と小文字を区別しません。tool_callイベントの場合のみASKを返します。承認のためにツール呼び出しを保留するを参照してください。

reason

String

オプション。DENY の場合、Databricks はそれを呼び出し元に返します。空であるか欠落している場合、呼び出し元はdefaultの理由「Access denied: this request is not permitted by a policy on this サービス.」を受け取ります。

フィールド

型

説明

result

String

必須。ALLOW、DENY、またはASK。値は大文字と小文字を区別しません。tool_callイベントの場合のみASKを返します。承認のためにツール呼び出しを保留するを参照してください。

reason

String

オプション。DENY の場合、Databricks はそれを呼び出し元に返します。空であるか欠落している場合、呼び出し元はdefaultの理由「Access denied: this request is not permitted by a policy on this サービス.」を受け取ります。

ブロックをHTTP 200 で DENY の判定として返します(HTTPエラーではありません)。DatabricksはHTTPエラーを失敗した評価として扱うため、インタラクションを拒否しますが、呼び出し元には理由は表示されません。

外部サービスポリシーはコンテンツを編集または書き換えることができないため、変更されたペイロードを返さないでください。

ツールの呼び出しを承認保留にする​

tool_call イベントで ASK を返し、ユーザーが承認するまでツール呼び出しを保持します。ユーザーが承認すると、Databricksはツール呼び出しをランします。ASK イベントの時のみ tool_call を返します:

  • tool_result イベントでは、ASK はブロックしません。結果は ALLOW を返したかのように進みます。結果をブロックするには、DENY を返します。
  • model_callまたはmodel_resultイベントが発生したときに、モデルサービスとモデルプロバイダーサービスがユーザーに承認を求めることができないため、Databricksは対話をブロックします。

Databricksが各応答を処理する方法​

外部サービスのポリシーはクローズで失敗します。Endpointから判定を読み取ることができない場合、Databricksはやり取りを拒否します:

レスポンス

Databricksの機能

result は ALLOW

対話を許可します。

result は DENY

インタラクションを拒否し、あなたの reason、または default の理由を返します。

result は ASK

tool_callでは、ユーザーが承認するまでツール呼び出しを保持します。tool_resultでは、結果を許可します。モデル イベントでは、対話を拒否します。

result が欠落しているか、空であるか、文字列ではないか、認識できない値です

対話を拒否します。

本文が有効なJSONでないか、最上位レベルのerrorメンバーがあります

対話を拒否します。

ボディが64 KBを超えています

対話を拒否します。

HTTP ステータスが 2xx ではありません

対話を拒否します。

5秒以内に応答がありません

対話を拒否します。

接続が失敗しました

対話を拒否します。

レスポンス

Databricksの機能

result は ALLOW

対話を許可します。

result は DENY

インタラクションを拒否し、あなたの reason、または default の理由を返します。

result は ASK

tool_callでは、ユーザーが承認するまでツール呼び出しを保持します。tool_resultでは、結果を許可します。モデル イベントでは、対話を拒否します。

result が欠落しているか、空であるか、文字列ではないか、認識できない値です

対話を拒否します。

本文が有効なJSONでないか、最上位レベルのerrorメンバーがあります

対話を拒否します。

ボディが64 KBを超えています

対話を拒否します。

HTTP ステータスが 2xx ではありません

対話を拒否します。

5秒以内に応答がありません

対話を拒否します。

接続が失敗しました

対話を拒否します。

顧客は、Endpointの障害時にトラフィックを許可する外部サービスポリシーを構成できません。

DatabricksがEndpointを呼び出すとき​

  • Databricksは、ポリシーが実行される各フェーズでendpointを1回呼び出します。サービスが呼び出される前、応答した後、またはその両方です。両方のフェーズで実行されるポリシーは、各インタラクションに対して2つのリクエストを送信します。
  • 顧客がポリシーを Log モードで添付した場合、Databricks は引き続き Endpoint を呼び出して判定を記録しますが、適用はしません。
  • 外部サービスポリシーの前に実行される別のポリシーからのDENYは、DatabricksがEndpointを呼び出す前にインタラクションを停止できます。評価順序を参照してください。

データ処理​

各リクエストには顧客コンテンツが含まれます。モデルのリクエストおよびレスポンスの本文(システムプロンプトや以前のメッセージを含む)、ならびにMCPツールの名前、引数、結果が含まれます。それを顧客データとして扱い、あなたのEndpointが何を、どのくらいの期間、どこで処理するのかを顧客に対して文書化してください。

Endpointのテスト​

顧客がEndpointを使用する前に、サンプルリクエストを送信し、5秒以内にALLOW、DENY、またはASKのresultでHTTP 200が返されることを確認します。

Bash
curl -X POST "https://api.example.com/ai-security/v1" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"event": {"type": "tool_call", "target": "main.default.github_mcp", "data": {"name": "create_issue", "arguments": {"repo": "acme/website", "config": {"policy_config": "{\"profile\": \"strict\"}", "phases": "pre_call"}}'

完全なフローをテストするには、Endpointを使用する外部サービスポリシーをDatabricksワークスペース内のサービスに Log モードでアタッチし、統合トレーステーブルで記録された判定を確認してください。外部サービスポリシーでのパートナーガードレールの適用を参照してください。

次のステップ​