Référence de l’API de politique de service externe
Bêta
Cette fonctionnalité est en bêta. Les administrateurs du Workspace peuvent contrôler l’accès à cette fonctionnalité depuis la page Aperçus en optant pour l’aperçu Unity Gateway Service Policies . Consultez Gérer les aperçus au niveau du workspace.
Lorsqu’un client associe une politique de service externe à un service, Unity Gateway appelle l’Endpoint HTTP d’un fournisseur de garde-fous pour chaque interaction régie et applique le verdict renvoyé par l’Endpoint. Cette page décrit le contrat implémenté par l’Endpoint : la requête envoyée par Databricks, la réponse attendue et la manière dont chaque réponse est traitée.
Utilisez cette page pour créer un endpoint que les clients pourront utiliser avec des politiques de service externes, ou pour vérifier la compatibilité de l’endpoint d’un fournisseur. Pour la configuration client, consultez Appliquer un garde-fou partenaire avec une politique de service externe.
Comment ça marche
À chaque interaction gouvernée, Databricks envoie une requête POST avec un corps JSON à l'endpoint. L'endpoint inspecte le contenu et retourne ALLOW, DENY ou, pour un appel d'outil MCP, ASK, et Databricks applique le verdict.
Un endpoint peut servir de nombreux clients et stratégies. Un client choisit le comportement qu'il souhaite avec la configuration de la stratégie, que Databricks transmet à l'endpoint à chaque requête.
Conditions requises pour Endpoint
L’endpoint doit :
- Acceptez
POSTrequêtes avec un corps JSON à l'hôte et au chemin que le client configure sur la connexion. - Accepter l’authentification machine-to-machine (M2M) OAuth. Le client configure un ID client, un secret client, votre endpoint de jeton et des scopes optionnels sur la connexion. Databricks obtient un jeton d’accès à partir de votre endpoint de jeton et l’envoie dans l’en-tête
Authorizationde chaque requête. Votre endpoint de jeton doit retourner des jetons dans le format défini par la spécification OAuth 2.0. Consultez Les services externes doivent respecter les spécifications OAuth 2.0. - Utilisez HTTPS. Databricks n’appelle pas d’endpoint sur HTTP brut.
- Répondez en moins de 5 secondes. Databricks refuse l'interaction lorsque l'endpoint ne répond pas à temps.
- Retourner HTTP
200avec un verdict JSON pour chaque décision, y compris un bloc, dans un corps de réponse ne dépassant pas 64 Ko.
Si l’endpoint prend en charge plusieurs comportements, comme différents profils de détection, indiquez aux clients quoi saisir comme configuration de stratégie.
Demande
Databricks envoie chaque évaluation sous la forme d'une requête HTTP vers l'hôte et le chemin de la connexion. Le chemin est / quand la connexion n'en a aucun.
POST /<path> HTTP/1.1
Host: <host>
Authorization: Bearer <access-token>
Content-Type: application/json
Le corps est un objet JSON avec deux membres :
{
"event": {},
"config": {}
}
eventest l'interaction en cours d'évaluation. Voir L'objetevent.configcontient les options de la stratégie, y compris la configuration de la stratégie du client. Voir L’objetconfig.
L’objet event
Champ | Type | Description |
|---|---|---|
| Chaîne | L'interaction et la phase : |
| Chaîne | Le nom à trois niveaux du service administré dans Unity Catalog, par exemple |
| Objet | Le contenu en cours d’évaluation. Sa forme dépend de |
| Objet | La requête d’origine, afin que vous puissiez juger d’un résultat dans le contexte de sa requête. Présent sur |
| Chaîne | Format d’API de |
| Chaîne | L’ID de trace OpenTelemetry de la requête gouvernée. Utilisez-le pour faire correspondre une évaluation dans vos logs à la requête. Présent uniquement lorsque la requête a une trace, ne le demandez donc pas. |
L'événement contient uniquement du contenu. Il n'inclut pas l'identité de l'utilisateur, de l'agent ou de l'application qui a effectué l'appel.
Types d'événement
| Service et phase |
|
|
|---|---|---|---|
| Service MCP, avant l'exécution de l'outil |
| Non présent |
| Service MCP, après l’exécution de l’outil | Résultat de l’outil |
|
| Service de modèle ou service de fournisseur de modèle, avant que le modèle ne soit appelé | Le corps de la requête de modèle complète, au format désigné par | Non présent |
| Service de modèle ou service de fournisseur de modèle, après que le modèle a répondu | Le corps complet de la réponse du modèle, dans le format nommé par | Corps complet de la demande de modèle |
Le corps d’une requête de modèle comprend les messages de la requête, tels que l’invite système et les tours de conversation précédents. Si le client définit une fenêtre de conversation pour la stratégie, le corps ne peut contenir que les messages les plus récents ; ne présumez donc pas que la conversation entière est présente.
Types d’API
Les événements de modèle contiennent les corps de requête et de réponse au format API utilisé par l’appelant. Databricks ne les convertit pas dans un format commun. Le champ api_type indique le format :
| Format |
|---|---|
| Complétions de chat Databricks, compatibles avec les complétions de chat OpenAI |
| Complétions Databricks |
| Embeddings Databricks |
| Réponses ouvertes Databricks |
| Achèvements de discussion OpenAI |
| Achèvements OpenAI |
| Intégrations OpenAI |
| Réponses OpenAI |
| Messages Anthropic |
| Gemini |
| Gemini |
| Achèvements du chat par curseur |
| Réponses Codex |
|
Unity Gateway peut ajouter des types d’API à mesure qu’il prend en charge davantage d’API. Traitez un api_type que vous ne reconnaissez pas comme un contenu que vous ne pouvez pas analyser et renvoyez un verdict délibéré à son sujet, tel que DENY.
L’objet config
config contient les options de la stratégie sous forme de chaînes. Il n'inclut pas la connexion ou le chemin.
Champ | Type | Description |
|---|---|---|
| Chaîne | Configuration de stratégie exactement telle que le client l’a saisie, en tant qu’objet JSON passé dans une chaîne. Analysez la chaîne en tant que JSON, par exemple |
| Chaîne | Les phases auxquelles la politique s’applique : |
config peut inclure d’autres options de politique. Ignorez les clés que vous ne reconnaissez pas.
Exemples de requête
Un appel d’outil MCP, avant l’exécution de l’outil :
{
"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"
}
}
Résultat d'un outil MCP, après l'exécution de l'outil :
{
"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"
}
}
Une requête de modèle, avant que le modèle ne soit appelé :
{
"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"
}
}
Réponse du modèle, après la réponse du modèle :
{
"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"
}
}
Réponse
Renvoyez HTTP 200 avec un corps JSON :
{
"result": "DENY",
"reason": "The message contains a payment card number."
}
Champ | Type | Description |
|---|---|---|
| Chaîne | Obligatoire. |
| Chaîne | Facultatif. Sur |
Renvoyez un bloc en tant que verdict DENY avec HTTP 200, pas comme une erreur HTTP. Databricks traite une erreur HTTP comme une évaluation échouée, elle refuse donc l’interaction, mais l’appelant ne voit pas votre raison.
Les stratégies de service externe ne peuvent pas rédiger ou réécrire le contenu, ne renvoyez donc pas de charge utile modifiée.
Suspendre un appel d’outil pour approbation
Sur un événement tool_call, renvoyez ASK pour suspendre l’appel d’outil jusqu’à ce que l’utilisateur l’approuve. Si l’utilisateur approuve, Databricks exécute l’appel d’outil. Renvoyez ASK uniquement pour un événement tool_call :
- Sur un événement
tool_result,ASKne bloque pas. Le résultat passe comme si vous aviez renvoyéALLOW. Pour bloquer un résultat, renvoyezDENY. - Lors d'un événement
model_calloumodel_result, Databricks bloque l'interaction, car les services de modèle et les services de fournisseur de modèle ne peuvent pas demander l'approbation de l'utilisateur.
Comment Databricks gère chaque réponse
Les politiques de service externe échouent par défaut. Databricks refuse l’interaction chaque fois qu’il ne peut pas lire un verdict de l’endpoint :
Réponse | Ce que fait Databricks |
|---|---|
| Autorise l'interaction. |
| Refuse l'interaction et renvoie |
| Sur un |
| Refuse l'interaction. |
Le corps n'est pas un JSON valide ou il possède un membre | Refuse l'interaction. |
Le corps est supérieur à 64 Ko | Refuse l'interaction. |
Le statut HTTP n’est pas 2xx | Refuse l'interaction. |
Aucune réponse dans les 5 secondes | Refuse l'interaction. |
La connexion échoue | Refuse l'interaction. |
Les clients ne peuvent pas configurer une politique de service externe pour autoriser le trafic en cas d’échec de l’endpoint.
Lorsque Databricks appelle l’endpoint
- Databricks appelle l’endpoint une fois pour chaque phase sur laquelle la politique s’exécute : avant que le service ne soit appelé, après qu’il répond, ou les deux. Une politique qui s’exécute sur les deux phases envoie deux requêtes pour chaque interaction.
- Lorsque le client attache la stratégie en mode Log , Databricks appelle toujours l'endpoint et enregistre votre verdict, mais ne l'applique pas.
- Une
DENYprovenant d’une autre règle qui s’exécute avant la règle de service externe peut arrêter l’interaction avant que Databricks n’appelle votre endpoint. Voir Ordre d’évaluation.
Traitement des données
Chaque requête contient du contenu client : corps de requête et de réponse de modèle, y compris les invites système et les messages précédents, ainsi que les noms, arguments et résultats d’outils MCP. Traitez-le comme des données client et documentez pour les clients ce que votre endpoint stocke, pendant combien de temps et où il traite le contenu.
Tester votre endpoint
Avant que les clients utilisent votre endpoint, envoyez-lui une requête exemple et vérifiez qu’il retourne un HTTP 200 avec un result de ALLOW, DENY ou ASK en moins de 5 secondes :
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"}}'
Pour tester le flux complet, attachez une politique de service externe qui utilise votre endpoint à un service dans un workspace Databricks, en mode Log , et consultez les verdicts enregistrés dans la table de trace unifiée. Voir Appliquer une garde-fou de partenaire avec une politique de service externe.