Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
A menudo, los agentes de inteligencia artificial necesitan autenticarse en otros recursos para completar tareas. Por ejemplo, un agente implementado podría necesitar acceder a un índice de búsqueda vectorial para consultar datos no estructurados o el Registro de mensajes para cargar avisos dinámicos.
En esta página se tratan los métodos de autenticación disponibles al desarrollar e implementar agentes mediante Mosaic AI Agent Framework.
Métodos de autenticación
En la tabla siguiente se comparan los métodos de autenticación disponibles. Puede combinar y hacer coincidir cualquiera de estos enfoques:
| Método | Description | Posición de seguridad | Complejidad de la configuración |
|---|---|---|---|
| Acceso directo de autenticación automática | El agente se ejecuta con los permisos del usuario que lo implementó Databricks administra automáticamente las credenciales de corta duración para los recursos declarados. |
Credenciales de corta duración, rotación automática | Bajo: declarar dependencias en tiempo de registro |
| Autenticación en nombre del usuario (OBO) | El agente se ejecuta con los permisos del usuario final que realiza la solicitud. | Usa las credenciales del usuario final con ámbitos restringidos | Medio: requiere la declaración de ámbito y la inicialización en tiempo de ejecución. |
| Autenticación manual | Proporcionar explícitamente credenciales mediante variables de entorno | Las credenciales de larga vida necesitan gestión de rotación | Alto: requiere administración manual de credenciales |
Autenticación en sistemas externos y servidores MCP
Para obtener instrucciones sobre cómo autenticarse en API externas y servidores MCP desde el agente, consulte Conexión de herramientas del agente de IA a servicios externos. Estos recursos también se pueden consultar en nombre del agente o usuario, como se describe en Métodos de autenticación.
Elección del método de autenticación adecuado para el recurso
Use este diagrama de flujo para elegir el método de autenticación adecuado para cada recurso. Puede combinar métodos según sea necesario y un agente puede usar un método diferente para cada recurso en función de su caso de uso.
¿Se requiere el control de acceso por usuario o la auditoría con atributos de usuario?
- Sí → Usar autenticación por cuenta del usuario
- No → Continuar con el paso 2
¿Todos los recursos admiten la autenticación automática?
- Sí → Usar el paso de autenticación automática (recomendado)
- No → usar autenticación manual
Traspaso automático de autenticación
El paso directo de autenticación automática es el método más sencillo para acceder a los recursos administrados por Databricks. Declare las dependencias de recursos cuando se registre el agente, y Databricks aprovisiona, rota y administra automáticamente credenciales temporales cuando se implementa el agente.
Este comportamiento de autenticación es similar al comportamiento de "Ejecutar como propietario" para los paneles de Databricks. A los recursos downstream, como las tablas del Catálogo de Unity, se accede mediante las credenciales de una entidad de servicio con el acceso de privilegio mínimo solo a los recursos que necesita el agente.
Funcionamiento del paso a través de autenticación automática
Cuando se proporciona un agente detrás de un punto de conexión mediante el paso directo de autenticación automática, Databricks realiza los pasos siguientes:
Comprobación de permisos: Databricks comprueba que el creador del punto de conexión puede acceder a todas las dependencias especificadas durante el registro del agente.
Creación y concesión de permisos de entidad de servicio: se crea una entidad de servicio para la versión del modelo del agente y se concede automáticamente acceso de lectura a los recursos del agente.
Nota:
La entidad de servicio generada por el sistema no aparece en las listas de la API ni de la interfaz de usuario. Si la versión del modelo del agente se quita del punto de conexión, también se elimina la entidad de servicio.
Aprovisionamiento y rotación de credenciales: las credenciales de corta duración (un token de OAuth de M2M) para la entidad de servicio se insertan en el punto de conexión, lo que permite que el código del agente acceda a los recursos de Databricks. Databricks también rota las credenciales, asegurando que el agente tenga acceso continuo y seguro a los recursos dependientes.
Recursos admitidos para el paso directo de autenticación automática
En la tabla siguiente se enumeran los recursos de Databricks que admiten el paso directo de autenticación automática y los permisos que debe tener el creador del punto de conexión al implementar el agente.
Nota:
Los recursos del catálogo de Unity también requieren USE SCHEMA en el esquema primario y USE CATALOG en el catálogo primario.
| Tipo de recurso | Permiso | Versión mínima de MLflow |
|---|---|---|
| SQL Warehouse | Use Endpoint |
2.16.1 o superior |
| Modelo de puntos de conexión de servicio | Can Query |
2.13.1 o superior |
| Función de catálogo de Unity | EXECUTE |
2.16.1 o superior |
| Espacio de Genie | Can Run |
2.17.1 o superior |
| Índice de búsqueda vectorial | Can Use |
2.13.1 o superior |
| Tabla de catálogos de Unity | SELECT |
2.18.0 o superior |
| Conexión de catálogo de Unity | Use Connection |
2.17.1 o superior |
| Lakebase | databricks_superuser |
3.3.2 o superior |
Implementación del paso directo de autenticación automática
Para habilitar el paso directo de autenticación automática, especifique los recursos dependientes al registrar el agente. Use el resources parámetro de la log_model() API:
Nota:
Recuerde registrar también todos los recursos dependientes de nivel inferior. Por ejemplo, si registra un espacio de Genie, también debe registrar sus tablas, SQL Warehouses y funciones de catálogo de Unity.
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"),
]
)
Autenticación en representación del usuario
Importante
Esta característica está en versión preliminar pública.
La autenticación en nombre del usuario (OBO) permite a un agente actuar como el usuario de Databricks que ejecuta la consulta. Esto proporciona:
- Acceso por usuario a datos confidenciales
- Controles de datos específicos aplicados por el catálogo de Unity
- Los tokens de seguridad están restringidos ("downscoped") solo a las API que declara el agente, lo que reduce el riesgo de uso indebido.
Requisitos
- La autenticación en nombre del usuario requiere MLflow 2.22.1 y versiones posteriores.
- La autenticación en nombre de usuario está deshabilitada de forma predeterminada y debe estar habilitada por un administrador del área de trabajo. Revise las consideraciones de seguridad antes de habilitar esta característica.
Recursos compatibles con OBO
Los agentes con autenticación de OBO pueden acceder a los siguientes recursos de Databricks:
| Recurso de Databricks | Clientes compatibles |
|---|---|
| Índice de búsqueda vectorial |
databricks_langchain.VectorSearchRetrieverTool, , databricks_openai.VectorSearchRetrieverTool, VectorSearchClient |
| Modelo de puntos de conexión de servicio | databricks.sdk.WorkspaceClient |
| SQL Warehouse | databricks.sdk.WorkspaceClient |
| Conexiones UC | databricks.sdk.WorkspaceClient |
| Funciones y tablas uc |
databricks.sdk.WorkspaceClient (Para acceder a las tablas uc, debe usar consultas SQL mediante SQL Statement Execution API) |
| Espacio de Genie |
databricks.sdk.WorkspaceClient (recomendado), databricks_langchain.GenieAgento databricks_ai_bridge.GenieAgent |
| Protocolo de contexto de modelo (MCP) | databricks_mcp.DatabricksMCPClient |
Implementación de la autenticación de OBO
Para habilitar la autenticación en nombre del usuario, complete los pasos siguientes:
- Actualice las llamadas del SDK para especificar que se accede a los recursos en nombre del usuario final.
- Actualice el código del agente para inicializar el acceso de OBO dentro de la
predictfunción, no en__init__, porque la identidad del usuario solo se conoce en tiempo de ejecución. - Al registrar el agente para la implementación, declare los ámbitos de la API REST de Databricks que requiere el agente.
Los fragmentos de código siguientes muestran cómo configurar el acceso en nombre del usuario a distintos recursos de Databricks. Al inicializar las herramientas, controle correctamente los errores de permisos envolviendo la inicialización en un bloque try-except.
Herramienta de búsqueda de vectores
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")
Cliente de búsqueda de vectores
from databricks.vector_search.client import VectorSearchClient
from databricks.vector_search.utils import CredentialStrategy
# Configure a VectorSearch Client to use on behalf of end
# user authentication
user_authenticated_vsc = VectorSearchClient(credential_strategy=CredentialStrategy.MODEL_SERVING_USER_CREDENTIALS)
# Exclude exception handling if the agent should fail when
# users lack access to all required Databricks resources
try:
vs_index = user_authenticated_vsc.get_index(endpoint_name="endpoint_name", index_name="index_name")
...
except Exception as e:
_logger.debug("Skipping Vector Index because user does not have permissions")
MCP
from databricks.sdk import WorkspaceClient
from databricks_ai_bridge import ModelServingUserCredentials
from databricks_mcp import DatabricksMCPClient
# Configure a Databricks SDK WorkspaceClient to use on behalf of end
# user authentication
user_client = WorkspaceClient(credentials_strategy=ModelServingUserCredentials())
mcp_client = DatabricksMCPClient(
server_url="<mcp_server_url>",
workspace_client=user_client, # Specify the user client here
)
Modelo de puntos de conexión de servicio
from databricks.sdk import WorkspaceClient
from databricks_ai_bridge import ModelServingUserCredentials
# Configure a Databricks SDK WorkspaceClient to use on behalf of end
# user authentication
user_client = WorkspaceClient(credentials_strategy=ModelServingUserCredentials())
# Exclude exception handling if the agent should fail
# when users lack access to all required Databricks resources
try:
user_client.serving_endpoints.query("endpoint_name", input="")
except Exception as e:
_logger.debug("Skipping Model Serving Endpoint due to no permissions")
Conexiones UC
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.serving import ExternalFunctionRequestHttpMethod
from databricks_ai_bridge import ModelServingUserCredentials
# Configure a Databricks SDK WorkspaceClient to use on behalf of end
# user authentication
user_client = WorkspaceClient(credentials_strategy=ModelServingUserCredentials())
user_client.serving_endpoints.http_request(
conn="connection_name",
method=ExternalFunctionRequestHttpMethod.POST,
path="/api/v1/resource",
json={"key": "value"},
headers={"extra_header_key": "extra_header_value"},
)
Genie Spaces (WorkspaceClient)
from databricks_langchain.genie import GenieAgent
from databricks.sdk import WorkspaceClient
from databricks_ai_bridge import ModelServingUserCredentials
# Configure a Databricks SDK WorkspaceClient to use on behalf of end
# user authentication
user_client = WorkspaceClient(credentials_strategy=ModelServingUserCredentials())
genie_agent = GenieAgent(
genie_space_id="space-id",
genie_agent_name="Genie",
description="This Genie space has access to sales data in Europe"
client=user_client
)
# Use the Genie SDK methods available through WorkspaceClient
try:
response = agent.invoke("Your query here")
except Exception as e:
_logger.debug("Skipping Genie due to no permissions")
Genie Spaces (LangChain)
from databricks.sdk import WorkspaceClient
from databricks_ai_bridge import ModelServingUserCredentials
from databricks_langchain.genie import GenieAgent
# Configure a Databricks SDK WorkspaceClient to use on behalf of end
# user authentication
user_client = WorkspaceClient(credentials_strategy=ModelServingUserCredentials())
genie_agent = GenieAgent(
genie_space_id="<genie_space_id>",
genie_agent_name="Genie",
description="Genie_description",
client=user_client, # Specify the user client here
)
Inicializar el agente en la función predict
Dado que la identidad del usuario solo se conoce en el momento de la consulta, debe acceder a los recursos de OBO dentro predict de o predict_stream, no en el método del __init__ agente. Esto garantiza que los recursos estén aislados entre invocaciones.
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)
...
Declaración de ámbitos de la API REST al registrar el agente
Al registrar el agente de OBO para la implementación, debe enumerar los ámbitos de la API REST de Databricks a los que llama el agente en nombre del usuario. Esto garantiza que el agente siga el principio de privilegios mínimos: los tokens están restringidos solo a las API que requiere el agente, lo que reduce la posibilidad de acciones no autorizadas o uso indebido de tokens.
A continuación se muestra una lista de ámbitos necesarios para acceder a varios tipos comunes de recursos de Databricks:
| Tipo de recurso | Ámbito de API requerido |
|---|---|
| Puntos de conexión de servicio de modelos | serving.serving-endpoints |
| Puntos de conexión de búsqueda vectorial | vectorsearch.vector-search-endpoints |
| Índices de búsqueda vectorial | vectorsearch.vector-search-indexes |
| Almacenes de SQL |
sql.warehouses, sql.statement-execution |
| Espacios de Genie | dashboards.genie |
| Conexiones UC |
catalog.connections y serving.serving-endpoints |
| Aplicaciones de Databricks | apps.apps |
| Espacios de MCP Genie | mcp.genie |
| Funciones uc de MCP | mcp.functions |
| Búsqueda de vectores de MCP | mcp.vectorsearch |
| MCP DBSQL |
mcp.sql, , sql.warehouses, sql.statement-execution |
| Funciones externas de MCP | mcp.external |
Para habilitar la autenticación en nombre de un usuario, pase un MLflow AuthPolicy a log_model():
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=[
"serving.serving-endpoints",
"vectorsearch.vector-search-endpoints",
"vectorsearch.vector-search-indexes"
])
# 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
)
)
Autenticación de OBO para clientes OpenAI
Para los agentes que usan el cliente de OpenAI, use el SDK de Databricks para autenticarse automáticamente durante la implementación. El SDK de Databricks tiene un contenedor para construir el cliente openAI con la autenticación configurada automáticamente, get_open_ai_client():
% pip install databricks-sdk[openai]
from databricks.sdk import WorkspaceClient
def openai_client(self):
w = WorkspaceClient()
return w.serving_endpoints.get_open_ai_client()
A continuación, especifique el punto de conexión De servicio de modelos como parte de para autenticarse automáticamente en el momento de resources la implementación.
Consideraciones de seguridad de OBO
Tenga en cuenta las siguientes consideraciones de seguridad antes de habilitar la autenticación en nombre del usuario con agentes.
Acceso expandido a los recursos: los agentes pueden acceder a recursos confidenciales en nombre de los usuarios. Aunque los ámbitos restringen las API, los puntos de conexión pueden permitir más acciones que las solicitudes explícitas del agente. Por ejemplo, el ámbito de la serving.serving-endpoints API concede a un agente permiso para ejecutar un punto de conexión de servicio en nombre del usuario. Sin embargo, el punto de conexión de servicio puede acceder a ámbitos de API adicionales que el agente original no está autorizado a usar.
Cuadernos de ejemplo de OBO
En el cuaderno siguiente se muestra cómo crear un agente con la búsqueda vectorial mediante la autorización en nombre del usuario.
En nombre de la autorización de usuario con la búsqueda de vectores
En el cuaderno siguiente se muestra cómo crear un agente que admita la ejecución de SQL en un almacén de SQL mediante la autorización en nombre del usuario. Esto permite al agente invocar de forma segura funciones de Catálogo de Unity mediante credenciales de usuario. Nota: Actualmente, esta es la manera recomendada de ejecutar funciones UC con OBO, ya que la ejecución de Spark sin servidor con OBO todavía no se admite.
En nombre de la autorización de usuario con la ejecución de SQL
Autenticación manual
La autenticación manual permite especificar explícitamente las credenciales durante la implementación del agente. Este método tiene la mayor flexibilidad, pero requiere más configuración y administración de credenciales en curso. Use este método cuando:
- El recurso dependiente no admite la transferencia automática de autenticación.
- El agente debe usar credenciales distintas de las del implementador del agente.
- El agente accede a recursos externos o API fuera de Databricks.
- El agente implementado accede al registro de comandos.
Importante
La invalidación de variables de entorno de seguridad deshabilita el paso automático para otros recursos de los que depende el agente.
Autenticación de OAuth (recomendado)
OAuth es el enfoque recomendado para la autenticación manual porque tiene autenticación segura basada en tokens para entidades de servicio con funcionalidades de actualización automática de tokens:
Cree una entidad de servicio y genere credenciales de OAuth.
Conceda a la entidad de servicio permisos para cualquier recurso de Databricks al que el agente tenga privilegios de acceso permisos para acceder a recursos de Databricks. Para acceder al registro de mensajes, conceda permisos en
CREATE FUNCTION,EXECUTEyMANAGEen el esquema del Catálogo de Unity para almacenar mensajes.Cree secretos de databricks para las credenciales de OAuth.
Configure las credenciales de OAuth en el código del agente:
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)Use los secretos para conectarse al área de trabajo:
w = WorkspaceClient( host=os.environ["DATABRICKS_HOST"], client_id=os.environ["DATABRICKS_CLIENT_ID"], client_secret = os.environ["DATABRICKS_CLIENT_SECRET"] )Al implementar con
agents.deploy(), incluya las credenciales de OAuth como variables de entorno:agents.deploy( UC_MODEL_NAME, uc_registered_model_info.version, environment_vars={ "DATABRICKS_HOST": "https://<your-workspace-url>", "DATABRICKS_CLIENT_ID": f"{{{{secrets/{secret_scope_name}/{client_id_key}}}}}", "DATABRICKS_CLIENT_SECRET": f"{{{{secrets/{secret_scope_name}/{client_secret_key}}}}}" }, )
Autenticación PAT
La autenticación de token de acceso personal (PAT) proporciona una configuración más sencilla para entornos de desarrollo y pruebas, aunque requiere una administración de credenciales más manual:
Obtenga un PAT mediante una entidad de servicio o una cuenta personal:
Entidad de servicio (recomendada para la seguridad):
- Cree una entidad de servicio.
- Conceda a la entidad de servicio permisos para cualquier recurso de Databricks al que el agente tenga privilegios de acceso permisos para acceder a recursos de Databricks. Para acceder al registro de mensajes, conceda los permisos en
CREATE FUNCTION,EXECUTEyMANAGEen el esquema del catálogo de Unity que se usa para almacenar mensajes. - Cree un PAT para la entidad de servicio.
Cuenta personal:
Almacene el PAT de forma segura mediante la creación de un secreto de Databricks para el PAT.
Configure la autenticación PAT en el código del agente:
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"Al implementar el agente mediante
agents.deploy(), incluya el PAT como una variable de entorno:agents.deploy( UC_MODEL_NAME, uc_registered_model_info.version, environment_vars={ "DATABRICKS_HOST": "https://<your-workspace-url>", "DATABRICKS_TOKEN": f"{{{{secrets/{secret_scope_name}/{secret_key_name}}}}}" }, )