Aller au contenu principal

Authentification pour les agents d’IA (Model Serving)

info

Pour les nouveaux cas d’utilisation, Databricks recommande de déployer des agents sur Databricks Apps pour un contrôle total sur le code d’agent, la configuration du serveur et le workflow de déploiement. Consultez Créer un agent IA et le déployer sur Databricks Apps. Pour migrer un agent existant, consultez Migrer un agent de Model Serving vers Databricks Apps.

Les agents d'IA ont souvent besoin de s'authentifier auprès d'autres Ressources pour accomplir des tâches. Par exemple, un agent déployé peut avoir besoin d'accéder à un index AI Search pour interroger des données non structurées ou au Registre d'invites pour charger des invites dynamiques.

Cette page présente les méthodes d'authentification disponibles lors du développement et du déploiement d'agents à l'aide d'Agents personnalisés.

Méthodes d'authentification.

Le tableau suivant compare les méthodes d'authentification disponibles. Vous pouvez combiner n’importe laquelle de ces approches :

Méthode

Description

Posture de sécurité

Complexité de la configuration

Transmission automatique de l'authentification

L’agent s’exécute avec les autorisations de l’utilisateur qui l’a déployé.

Databricks gère automatiquement les identifiants de courte durée pour les ressources déclarées

Identifiants de courte durée, rotation automatique

Faible - déclarer les dépendances au moment de la journalisation

Authentification utilisateur « Au nom de » (OBO)

L'agent s'exécute avec les permissions de l'utilisateur final effectuant la demande.

Utilise les informations d'identification de l'utilisateur final avec des portées restreintes

Moyen - nécessite une déclaration de portée et une initialisation du runtime

Authentification manuelle

Fournissez explicitement les informations d’identification à l’aide des variables d’environnement

Les identifiants à long terme nécessitent une gestion de la rotation.

Élevé - nécessite une gestion manuelle des identifiants

Méthode

Description

Posture de sécurité

Complexité de la configuration

Transmission automatique de l'authentification

L’agent s’exécute avec les autorisations de l’utilisateur qui l’a déployé.

Databricks gère automatiquement les identifiants de courte durée pour les ressources déclarées

Identifiants de courte durée, rotation automatique

Faible - déclarer les dépendances au moment de la journalisation

Authentification utilisateur « Au nom de » (OBO)

L'agent s'exécute avec les permissions de l'utilisateur final effectuant la demande.

Utilise les informations d'identification de l'utilisateur final avec des portées restreintes

Moyen - nécessite une déclaration de portée et une initialisation du runtime

Authentification manuelle

Fournissez explicitement les informations d’identification à l’aide des variables d’environnement

Les identifiants à long terme nécessitent une gestion de la rotation.

Élevé - nécessite une gestion manuelle des identifiants

Choisissez la bonne méthode d'authentification pour votre ressource

Utilisez cet organigramme pour choisir la bonne méthode d'authentification pour chaque ressource. Vous pouvez combiner les méthodes au besoin, et un agent peut utiliser une méthode différente pour chaque ressource en fonction de son cas d'utilisation.

  1. Un contrôle d'accès par utilisateur ou un audit attribué à l'utilisateur est-il requis ?

  2. Toutes les Ressources supportent-elles l'authentification automatique?

S’authentifier auprès des serveurs MCP Databricks

Pour vous authentifier auprès des serveurs Databricks MCP, spécifiez toutes les ressources dont votre agent a besoin au moment de la connexion.

Par exemple, si votre agent utilise les URL de serveur MCP énumérées ci-dessous, vous devez spécifier tous les index de recherche IA dans les schémas prod.customer_support et prod.billing. Vous devez également spécifier toutes les fonctions Unity Catalog dans prod.billing:

  • https://<your-workspace-hostname>/api/2.0/mcp/ai-search/prod/customer_support
  • https://<your-workspace-hostname>/api/2.0/mcp/ai-search/prod/billing
  • https://<your-workspace-hostname>/api/2.0/mcp/functions/prod/billing

Pour simplifier le processus d'identification de toutes les ressources dépendantes pour les serveurs MCP gérés, utilisez le package PyPI databricks-mcp databricks_mcp.DatabricksMCPClient().get_databricks_resources(<server_url>) pour récupérer les ressources nécessaires au serveur MCP géré.

Si votre agent interroge un serveur MCP personnalisé hébergé sur une application Databricks, vous pouvez configurer l'autorisation en incluant explicitement le serveur en tant que ressource lors de l'enregistrement de votre modèle.

Transmission automatique de l'authentification

L'authentification automatique par transmission est le moyen le plus simple d'accéder aux Ressources gérées par Databricks. Déclarez les dépendances des ressources lors de l'enregistrement de l'agent, et Databricks provisionne, renouvelle et gère automatiquement les informations d'identification à courte durée de vie lorsque l'agent est déployé.

Ce comportement d'authentification est similaire au comportement « Run as owner » pour les tableaux de bord Databricks. Les Ressources en aval, telles que les tables Unity Catalog, sont accessibles à l'aide des identifiants d'un Service Principal avec un accès à privilèges minimum uniquement aux Ressources dont l'agent a besoin.

Fonctionnement de la transmission automatique de l'authentification

Lorsqu’un agent est servi derrière un **Endpoint** en utilisant le passthrough d’authentification automatique, **Databricks** effectue les étapes suivantes :

  1. Vérification des autorisations : Databricks vérifie que le créateur de l'endpoint peut accéder à toutes les dépendances spécifiées lors de la journalisation de l'agent.

  2. Création et octrois de Service Principal : Un Service Principal est créé pour la version du modèle d'agent et se voit accorder automatiquement un accès en lecture aux ressources de l'agent.

remarque

Le service principal généré par le système n'apparaît pas dans les listes d'API ou d'interface utilisateur. Si la version du modèle d'agent est supprimée de l'Endpoint, le Service Principal est également supprimé.

  1. **Provisionnement et rotation des identifiants** : Des identifiants de courte durée (un jeton OAuth M2M) pour le Service Principal sont injectés dans l'endpoint, permettant au code de l'agent d'accéder aux Ressources Databricks. Databricks alterne également les identifiants, garantissant que votre agent dispose d'un accès continu et sécurisé aux Ressources dépendantes.

Ressources prises en charge pour la transmission directe de l'authentification automatique

Le tableau suivant répertorie les ressources Databricks qui prennent en charge le passthrough d'authentification automatique et les autorisations que le créateur de l'Endpoint doit avoir lors du déploiement de l'agent.

remarque

Les ressources Unity Catalog nécessitent également USE SCHEMA sur le schéma parent et USE CATALOG sur le catalogue parent.

Type de ressource

Autorisation

Version minimale de MLflow

SQL Warehouse

Use Endpoint

2.16.1 ou supérieur

Endpoint de Model Serving

Can Query

2,13,1 ou supérieur

Fonction Unity Catalog

EXECUTE

2.16.1 ou supérieur

Genie Agent

Can Run

2.17.1 ou version supérieure

Index de recherche IA

Can Use

2,13,1 ou supérieur

Table Unity Catalog.

SELECT

2,18.0 ou supérieur

Connexion Unity Catalog

Use Connection

2.17.1 ou version supérieure

Lakebase

databricks_superuser

3.3.2 ou au-dessus

Type de ressource

Autorisation

Version minimale de MLflow

SQL Warehouse

Use Endpoint

2.16.1 ou supérieur

Endpoint de Model Serving

Can Query

2,13,1 ou supérieur

Fonction Unity Catalog

EXECUTE

2.16.1 ou supérieur

Genie Agent

Can Run

2.17.1 ou version supérieure

Index de recherche IA

Can Use

2,13,1 ou supérieur

Table Unity Catalog.

SELECT

2,18.0 ou supérieur

Connexion Unity Catalog

Use Connection

2.17.1 ou version supérieure

Lakebase

databricks_superuser

3.3.2 ou au-dessus

Implémenter le passthrough d'authentification automatique

Pour activer la transmission automatique de l'authentification, spécifiez les Ressources dépendantes lorsque vous enregistrez l'agent. Utilisez le paramètre resources de l'API log_model() :

remarque

N'oubliez pas d'enregistrer toutes les Ressources dépendantes en aval également. Par exemple, si vous Log un Genie Agent, vous devez également Log ses tables, ses SQL Warehouse et ses fonctions Unity Catalog.

Python
import mlflow
from mlflow.models.resources import (
DatabricksVectorSearchIndex,
DatabricksServingEndpoint,
DatabricksSQLWarehouse,
DatabricksFunction,
DatabricksGenieSpace,
DatabricksTable,
DatabricksUCConnection,
DatabricksApp,
DatabricksLakebase
)

with mlflow.start_run():
logged_agent_info = mlflow.pyfunc.log_model(
python_model="agent.py",
artifact_path="agent",
input_example=input_example,
example_no_conversion=True,
# Specify resources for automatic authentication passthrough
resources=[
DatabricksVectorSearchIndex(index_name="prod.agents.databricks_docs_index"),
DatabricksServingEndpoint(endpoint_name="databricks-meta-llama-3-3-70b-instruct"),
DatabricksServingEndpoint(endpoint_name="databricks-bge-large-en"),
DatabricksSQLWarehouse(warehouse_id="your_warehouse_id"),
DatabricksFunction(function_name="ml.tools.python_exec"),
DatabricksGenieSpace(genie_space_id="your_genie_space_id"),
DatabricksTable(table_name="your_table_name"),
DatabricksUCConnection(connection_name="your_connection_name"),
DatabricksApp(app_name="app_name"),
DatabricksLakebase(database_instance_name="lakebase_instance_name"),
]
)

Authentification de l’utilisateur au nom d’un autre utilisateur

info

Aperçu

Cette fonctionnalité est en aperçu public.

L'authentification « au nom de l'utilisateur » (OBO) permet à un agent d'agir en tant qu'utilisateur Databricks qui exécute la query. Ceci fournit :

  • Accès par utilisateur aux données sensibles
  • Contrôles de données affinés appliqués par Unity Catalog.
  • Les jetons de sécurité sont restreints (dont la portée est limitée) aux seules APIs que votre agent déclare, réduisant ainsi les risques de mauvaise utilisation.

Exigences

  • L'authentification « au nom de l'utilisateur » nécessite MLflow 2.22.1 et versions ultérieures.
  • L’authentification au nom de l’utilisateur est désactivée par default et doit être activée par un administrateur du Workspace. Examinez les considérations de sécurité avant d'activer cette fonctionnalité.

Ressources prises en charge par OBO

Sur les Endpoints Model Serving, les agents avec authentification OBO peuvent uniquement accéder aux Ressources Databricks listées dans le tableau suivant. Les Ressources non listées ici, telles que les Volumes Unity Catalog (upload/download de fichiers), ne sont pas prises en charge pour OBO sur Model Serving.

remarque

Si votre agent nécessite un accès OBO à un ensemble plus large de ressources, Databricks recommande de déployer votre agent sur Databricks Apps, qui prend en charge des étendues OAuth supplémentaires. Consultez Migrer un agent de Model Serving vers Databricks Apps.

Ressource Databricks

Clients compatibles

Index de recherche IA

databricks_langchain.VectorSearchRetrieverTool, databricks_openai.VectorSearchRetrieverTool, VectorSearchClient

Endpoint de Model Serving

databricks.sdk.WorkspaceClient

SQL Warehouse

databricks.sdk.WorkspaceClient

Connexions UC

databricks.sdk.WorkspaceClient

Tables et fonctions UC

databricks.sdk.WorkspaceClient (Pour accéder aux tables UC, vous devez utiliser des queries SQL à l'aide de l'API d'exécution d'instructions SQL)

Genie Agent

databricks.sdk.WorkspaceClient (recommandé), databricks_langchain.GenieAgent, ou databricks_ai_bridge.GenieAgent

Model Context Protocol (MCP)

databricks_mcp.DatabricksMCPClient

Ressource Databricks

Clients compatibles

Index de recherche IA

databricks_langchain.VectorSearchRetrieverTool, databricks_openai.VectorSearchRetrieverTool, VectorSearchClient

Endpoint de Model Serving

databricks.sdk.WorkspaceClient

SQL Warehouse

databricks.sdk.WorkspaceClient

Connexions UC

databricks.sdk.WorkspaceClient

Tables et fonctions UC

databricks.sdk.WorkspaceClient (Pour accéder aux tables UC, vous devez utiliser des queries SQL à l'aide de l'API d'exécution d'instructions SQL)

Genie Agent

databricks.sdk.WorkspaceClient (recommandé), databricks_langchain.GenieAgent, ou databricks_ai_bridge.GenieAgent

Model Context Protocol (MCP)

databricks_mcp.DatabricksMCPClient

Implémenter l'authentification OBO

Pour activer l'authentification utilisateur « au nom de », suivez les étapes suivantes :

  1. Mettez à jour les appels SDK pour spécifier que les Ressources sont consultées au nom de l'utilisateur final.
  2. Mettez à jour le code de l'agent pour initialiser l'accès OBO dans la fonction predict, et non dans __init__, car l'identité de l'utilisateur n'est connue qu'au moment de l'exécution.
  3. Lorsque vous enregistrez l'agent pour le déploiement, déclarez les périmètres d'API REST Databricks requis par l'agent.

Les extraits de code suivants montrent comment configurer l'accès au nom de l'utilisateur à différentes ressources Databricks. Lors de l'initialisation des outils, gérez les erreurs d'autorisation avec élégance en enveloppant l'initialisation dans un bloc try-except.

Python
from databricks.sdk import WorkspaceClient
from databricks_ai_bridge import ModelServingUserCredentials
from databricks_langchain import VectorSearchRetrieverTool

# Configure a Databricks SDK WorkspaceClient to use on behalf of end
# user authentication
user_client = WorkspaceClient(credentials_strategy = ModelServingUserCredentials())

vector_search_tools = []
# Exclude exception handling if the agent should fail
# when users lack access to all required Databricks resources
try:
tool = VectorSearchRetrieverTool(
index_name="<index_name>",
description="...",
tool_name="...",
workspace_client=user_client # Specify the user authorized client
)
vector_search_tools.append(tool)
except Exception as e:
_logger.debug("Skipping adding tool as user does not have permissions")

Initialiser l'agent dans la fonction de prédiction

Étant donné que l’identité de l’utilisateur n’est connue qu’au moment de la query, vous devez accéder aux ressources OBO à l’intérieur de predict ou predict_stream, et non dans la méthode __init__ de l’agent. Cela garantit que les ressources sont isolées entre les invocations.

Python
from mlflow.pyfunc import ResponsesAgent

class OBOResponsesAgent(ResponsesAgent):
def initialize_agent():
user_client = WorkspaceClient(
credentials_strategy=ModelServingUserCredentials()
)
system_authorized_client = WorkspaceClient()
### Use the clients above to access resources with either system or user authentication

def predict(
self, request
) -> ResponsesAgentResponse:
agent = initialize_agent() # Initialize the Agent in Predict

agent.predict(request)
...

Déclarez les périmètres de l'API REST lors de la journalisation de l'agent

Lorsque vous enregistrez votre agent OBO pour le déploiement, vous devez lister les champs d’application de l’API REST Databricks que votre agent appelle au nom de l’utilisateur. Ceci garantit que l'agent suit le principe du moindre privilège : les jetons sont limités aux seules APIs requises par votre agent, réduisant ainsi les risques d'actions non autorisées ou d'utilisation abusive des jetons.

Sur les endpoints Model Serving, vous ne pouvez utiliser que des portées qui correspondent aux ressources prises en charge par OBO listées ci-dessus.

Pour activer l'authentification au nom de l'utilisateur, transmettez un AuthPolicy MLflow à log_model():

Python
import mlflow
from mlflow.models.auth_policy import AuthPolicy, SystemAuthPolicy, UserAuthPolicy
from mlflow.models.resources import DatabricksServingEndpoint

# System policy: resources accessed with system credentials
system_policy = SystemAuthPolicy(
resources=[DatabricksServingEndpoint(endpoint_name="my_endpoint")]
)

# User policy: API scopes for OBO access
user_policy = UserAuthPolicy(api_scopes=[
"model-serving",
"ai-search"
])

# Log the agent with both policies
with mlflow.start_run():
mlflow.pyfunc.log_model(
name="agent",
python_model="agent.py",
auth_policy=AuthPolicy(
system_auth_policy=system_policy,
user_auth_policy=user_policy
)
)

Authentification OBO pour les clients OpenAI

Pour les agents qui utilisent le client OpenAI, utilisez le Databricks SDK pour vous authentifier automatiquement lors du déploiement. Le SDK Databricks dispose d’un wrapper pour construire le client OpenAI avec l’authentification configurée automatiquement, get_open_ai_client():

Python
% pip install databricks-sdk[openai]
Python
from databricks.sdk import WorkspaceClient
def openai_client(self):
w = WorkspaceClient()
return w.serving_endpoints.get_open_ai_client()

Ensuite, spécifiez l’Endpoint Model Serving dans resources pour vous authentifier automatiquement au moment du déploiement.

Considérations de sécurité OBO

Prenez en compte les considérations de sécurité suivantes avant d'activer l'authentification « au nom de l'utilisateur » avec des agents.

Accès aux ressources étendu : Les agents peuvent accéder aux ressources sensibles au nom des utilisateurs. Alors que les portées restreignent les APIs, les Endpoint pourraient autoriser plus d'actions que votre agent ne le demande explicitement. Par exemple, le périmètre d'API model-serving accorde à un agent l'autorisation d'exécuter un Endpoint de déploiement au nom de l'utilisateur. Cependant, l'Endpoint de déploiement peut accéder à des périmètres d'API supplémentaires que l'agent d'origine n'est pas autorisé à utiliser.

Exemples de Notebooks OBO

Le notebook suivant vous montre comment créer un agent avec AI Search en utilisant l'autorisation utilisateur « Au nom de ».

Autorisation utilisateur « Au nom de » avec AI Search

Le Notebook suivant vous montre comment créer un agent qui prend en charge l'exécution SQL sur un SQL Warehouse en utilisant l'autorisation au nom de l'utilisateur. Ceci permet à l'agent d'invoquer en toute sécurité les fonctions d'Unity Catalog à l'aide des identifiants utilisateur.

remarque

C’est actuellement le moyen recommandé d’exécuter les fonctions UC avec OBO, car l’exécution Serverless Spark avec OBO n’est pas encore prise en charge.

Autorisation utilisateur « Au nom de » avec exécution SQL

Authentification manuelle

L'authentification manuelle permet de spécifier explicitement les identifiants lors du déploiement de l'agent. Cette méthode offre la plus grande flexibilité, mais elle nécessite plus de configuration et une gestion continue des identifiants. Utilisez cette méthode lorsque :

  • La ressource dépendante ne prend pas en charge la transmission automatique de l'authentification
  • L'agent doit utiliser des identifiants autres que ceux du déployeur de l'agent
  • L'agent accède à des ressources ou des APIs externes à Databricks.
  • L'agent déployé accède au registre d'invite
important

La substitution des variables d’environnement de sécurité désactive le passage automatique pour d’autres Ressources dont votre agent dépend.

Authentification OAuth (recommandé)

OAuth est l'approche recommandée pour l'authentification manuelle, car elle dispose d'une authentification sécurisée basée sur les jetons pour les Service Principal avec des capacités de automatic token refresh :

  1. Créez un service principal et générez des identifiants OAuth.

  2. Accordez au Service Principal des autorisations sur toute Ressource Databricks à laquelle l’agent a accès privilèges d’accès aux Ressources Databricks. Pour accéder au registre d’invites, accordez les autorisations CREATE FUNCTION, EXECUTE et MANAGE sur le schéma Unity Catalog pour le stockage des invites.

  3. Créez des secrets Databricks pour les identifiants OAuth.

  4. Configurez les identifiants OAuth dans le code de l'agent :

    Python
    import os

    # Configure OAuth authentication for Prompt Registry access
    # Replace with actual secret scope and key names
    secret_scope_name = "your-secret-scope"
    client_id_key = "oauth-client-id"
    client_secret_key = "oauth-client-secret"

    os.environ["DATABRICKS_HOST"] = "https://<your-workspace-url>"
    os.environ["DATABRICKS_CLIENT_ID"] = dbutils.secrets.get(scope=secret_scope_name, key=client_id_key)
    os.environ["DATABRICKS_CLIENT_SECRET"] = dbutils.secrets.get(scope=secret_scope_name, key=client_secret_key)
  5. Utilisez les secrets pour vous connecter au workspace :

    Python
    w = WorkspaceClient(
    host=os.environ["DATABRICKS_HOST"],
    client_id=os.environ["DATABRICKS_CLIENT_ID"],
    client_secret = os.environ["DATABRICKS_CLIENT_SECRET"]
    )
  6. Lors du déploiement avec agents.deploy(), incluez les identifiants OAuth comme variables d’environnement :

    Python
    agents.deploy(
    UC_MODEL_NAME,
    uc_registered_model_info.version,
    environment_vars={
    &quot;DATABRICKS_HOST&quot;: &quot;https://&lt;your-workspace-url&gt;&quot;,
    &quot;DATABRICKS_CLIENT_ID&quot;: f&quot;{secrets/{secret_scope_name}/{client_id_key}}",
    "DATABRICKS_CLIENT_SECRET": f"{secrets/{secret_scope_name}/{client_secret_key}}"
    },
    )

Authentification PAT

L'authentification par jeton d'accès personnel (PAT) fournit une configuration plus simple pour les environnements de développement et de test, bien qu'elle nécessite une gestion des identifiants plus manuelle :

  1. Obtenez un PAT à l'aide d'un Service Principal ou d'un compte personnel :

    Service Principal (recommandé pour la sécurité) :

    1. Créer un Service Principal.
    2. Accordez au Service Principal les autorisations sur toute ressource Databricks à laquelle l'agent a accès privilèges d'accès aux ressources Databricks. Pour accéder au registre de prompts, accordez les autorisations CREATE FUNCTION, EXECUTE et MANAGE sur le schéma Unity Catalog utilisé pour stocker les prompts.
    3. Créez un PAT pour le Service Principal.

    Compte personnel :

    1. Créer un PAT pour un compte personnel.
  2. Stockez le jeton PAT en toute sécurité en créant un secret Databricks pour le jeton PAT.

  3. Configurez l'authentification PAT dans le code de l'agent :

    Python
    import os

    # Configure PAT authentication for Prompt Registry access
    # Replace with your actual secret scope and key names
    secret_scope_name = "your-secret-scope"
    secret_key_name = "your-pat-key"

    os.environ["DATABRICKS_HOST"] = "https://<your-workspace-url>"
    os.environ["DATABRICKS_TOKEN"] = dbutils.secrets.get(scope=secret_scope_name, key=secret_key_name)

    # Validate configuration
    assert os.environ["DATABRICKS_HOST"], "DATABRICKS_HOST must be set"
    assert os.environ["DATABRICKS_TOKEN"], "DATABRICKS_TOKEN must be set"
  4. Lors du déploiement de l'agent à l'aide de agents.deploy(), incluez le PAT en tant que variable d'environnement :

    Python
    agents.deploy(
    UC_MODEL_NAME,
    uc_registered_model_info.version,
    environment_vars={
    &quot;DATABRICKS_HOST&quot;: &quot;https://&lt;your-workspace-url&gt;&quot;,
    &quot;DATABRICKS_TOKEN&quot;: f&quot;{secrets/{secret_scope_name}/{secret_key_name}}"
    },
    )