Autenticação para agentes AI (modelo de serviço)
Para novos casos de uso, Databricks recomenda a implantação de agentes no Databricks Apps para controle total sobre o código do agente, a configuração do servidor e o fluxo de trabalho de implantação. Veja Criar um agente AI e implantá-lo em Databricks Apps.
Os agentes AI frequentemente precisam se autenticar em outros recursos para concluir tarefas. Por exemplo, um agente implantado pode precisar acessar um índice de pesquisa vetorial para consultar dados não estruturados ou o Registro de prompts para carregar prompts dinâmicos.
Esta página aborda os métodos de autenticação disponíveis ao desenvolver e implantar agentes usando o Agent Framework.
Métodos de autenticação
A tabela a seguir compara os métodos de autenticação disponíveis. Você pode combinar quaisquer dessas abordagens:
Método | Descrição | Postura de segurança | Complexidade de configuração |
|---|---|---|---|
Execução do agente com as permissões do usuário que o implantou Databricks gerencia automaticamente credenciais de curta duração para recursos declarados. | Credenciais de curta duração, rotação automática | Baixa - declarar dependências no momento do registro de logs | |
A execução do agente ocorre com as permissões do usuário final que fez a solicitação. | Utiliza as credenciais do usuário final com escopos restritos. | Nível Médio - requer declaração de escopo e inicialização em tempo de execução. | |
Forneça credenciais explicitamente usando variável de ambiente | As credenciais de longa duração precisam de gestão de rotação. | Nível elevado - requer gerenciamento manual de credenciais. |
Escolha o método de autenticação adequado para o seu recurso.
Utilize este fluxograma para escolher o método de autenticação correto para cada recurso. Você pode combinar métodos conforme necessário, e um agente pode usar um método diferente para cada recurso, dependendo do seu caso de uso.
-
É necessário controle de acesso por usuário ou auditoria com atribuição de usuários?
- Sim → Usar autenticação em nome do usuário
- Não → Continue para o passo 2
-
Todos os recursos suportam autenticação automática?
- Sim → Usar autenticação automática (recomendado)
- Não → Usar autenticação manual
Autentique-se nos servidores Databricks MCP.
Para autenticar nos servidores Databricks MCP, especifique todos os recursos que seu agente precisa no momento do login.
Por exemplo, se o seu agente usar os URLs do servidor MCP listados abaixo, você deverá especificar todos os índices do Vector Search nos esquemas prod.customer_support e prod.billing . Você também deve especificar todas as funções do Unity Catalog em prod.billing:
https://<your-workspace-hostname>/api/2.0/mcp/vector-search/prod/customer_supporthttps://<your-workspace-hostname>/api/2.0/mcp/vector-search/prod/billinghttps://<your-workspace-hostname>/api/2.0/mcp/functions/prod/billing
Para simplificar o processo de identificação de todos os recursos dependentes para servidores de gerenciamento MCP, use o pacote PyPI databricks-mcp databricks_mcp.DatabricksMCPClient().get_databricks_resources(<server_url>) para recuperar os recursos necessários para o servidor de gerenciamento MCP.
Se o seu agente consultar um servidor MCP personalizado hospedado em um aplicativo Databricks, você poderá configurar a autorização incluindo explicitamente o servidor como um recurso ao registrar seu modelo.
Autenticação automática pass-through
A autenticação automática passthrough é a maneira mais simples de acessar Databricks-gerenciar recurso. Declare as dependências de recursos ao registrar o agente, e Databricks provisionará, rotacionará e gerenciará automaticamente as credenciais de curta duração quando o agente for implantado.
Esse comportamento de autenticação é semelhante ao comportamento de "execução como proprietário" dos dashboards Databricks . Os recursos downstream, como as tabelas Unity Catalog , são acessados usando as credenciais de uma entidade de serviço com acesso de privilégio mínimo, restringindo-se apenas aos recursos necessários ao agente.
Como funciona a autenticação automática direta
Quando um agente é atendido por trás de um endpoint usando autenticação automática direta, Databricks executa os seguintes passos:
-
Verificação de permissões : o Databricks verifica se o criador do endpoint pode acessar todas as dependências especificadas durante o registro do agente.
-
criação e concessão de entidade de serviço : Uma entidade de serviço é criada para a versão do modelo do agente e recebe automaticamente acesso de leitura ao recurso do agente.
A entidade de serviço gerada pelo sistema não aparece nas listagens da API ou da interface do usuário. Se a versão do modelo de agente for removida do endpoint, a entidade de serviço também será excluída.
- Provisionamento e rotação de credenciais : Credenciais de curta duração ( tokens OAuth M2M) para a entidade de serviço são injetadas no endpoint, permitindo que o código do agente acesse o recurso Databricks . Databricks também rotaciona as credenciais, garantindo que seu agente tenha acesso contínuo e seguro aos recursos dependentes.
Recurso compatível para passagem automática de autenticação
A tabela a seguir lista os recursos Databricks que suportam autenticação automática e as permissões que o criador endpoint deve ter ao implantar o agente.
O recurso Unity Catalog também requer USE SCHEMA no esquema pai e USE CATALOG no catálogo pai.
Tipo de recurso | Permissão | Versão mínima do MLflow |
|---|---|---|
SQL Warehouse |
| 2.16.1 ou superior |
Modelo de ponto de extremidade de serviço |
| 2.13.1 ou superior |
Função Unity Catalog |
| 2.16.1 ou superior |
Espaço Genie |
| 2.17.1 ou superior |
Índice de busca vetorial |
| 2.13.1 ou superior |
Tabela Unity Catalog |
| 2.18.0 ou superior |
Conexão Unity Catalog |
| 2.17.1 ou superior |
Lakebase |
| 3.3.2 ou acima |
Implementar autenticação automática pass-through
Para habilitar a autenticação automática, especifique o recurso dependente ao fazer log no agente. Utilize o parâmetro resources da API log_model() :
Lembre-se também de log todos os recursos dependentes subsequentes. Por exemplo, se você log um Genie Space, também deverá log suas tabelas, o banco de dados SQL e as funções Unity Catalog .
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"),
]
)
Autenticação em nome do usuário
Visualização
Este recurso está em Pré-visualização Pública.
A autenticação em nome do usuário (OBO) permite que um agente atue como o usuário Databricks que executou a consulta. Isto proporciona:
- Acesso a dados sensíveis por usuário
- Controles de dados refinados aplicados pelo Unity Catalog
- Os tokens de segurança são restritos ("com escopo reduzido") apenas às APIs que seu agente declara, reduzindo o risco de uso indevido.
Requisitos
- A autenticação em nome do usuário requer MLflow 2.22.1 ou superior.
- A autenticação em nome do usuário está desativada por default e deve ser ativada por um administrador workspace . Analise as considerações de segurança antes de ativar este recurso.
Recurso apoiado pela OBO
Agentes com autenticação OBO podem acessar o seguinte recurso Databricks :
Recurso Databricks | Clientes compatíveis |
|---|---|
Índice de Busca Vetorial |
|
Endpoint do serviço de modelos |
|
SQL Warehouse |
|
Conexões da UC |
|
Tabelas e funções da UC |
|
Espaço Genie |
|
Protocolo de Contexto do Modelo (MCP) |
|
Implementar autenticação OBO
Para habilitar a autenticação em nome do usuário, siga os passos abaixo:
- Atualize as chamadas SDK para especificar que os recursos são acessados em nome do usuário final.
- Atualize o código do agente para inicializar o acesso OBO dentro da função
predict, não em__init__, porque a identidade do usuário só é conhecida em tempo de execução. - Ao registrar o agente para implantação, declare os escopos da API REST do Databricks que o agente requer.
Os trechos de código a seguir demonstram como configurar o acesso em nome do usuário a diferentes recursos Databricks . Ao inicializar ferramentas, trate erros de permissão de forma elegante, envolvendo a inicialização em um bloco try-except .
- Vector Search Retriever Tool
- Vector Search Client
- MCP
- Model Serving Endpoint
- UC Connections
- Genie Spaces (WorkspaceClient)
- Genie Spaces (LangChain)
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")
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")
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
)
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")
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"},
)
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")
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
)
Inicialize o agente na função de previsão.
Como a identidade do usuário só é conhecida no momento da consulta, você deve acessar o recurso OBO dentro de predict ou predict_stream, não no método __init__ do agente. Isso garante que os recursos fiquem isolados entre as invocações.
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)
...
Declare os escopos da API REST ao registrar o agente.
Ao log seu agente OBO para implantação, você deve listar os escopos API REST Databricks que seu agente chama em nome do usuário. Isso garante que o agente siga o princípio do menor privilégio: tokens são restritos apenas às APIs que o agente requer, reduzindo a possibilidade de ações não autorizadas ou uso indevido de tokens.
A seguir, uma lista dos escopos necessários para acessar vários tipos comuns de recursos Databricks :
Tipo de recurso | Escopo de API necessário |
|---|---|
servindo modelo endpoint |
|
Endpoints de pesquisa vetorial |
|
Índices de busca vetorial |
|
SQL warehouses |
|
Genie spaces |
|
Conexões da UC |
|
Databricks Apps |
|
Genie spaces |
|
Funções MCP UC |
|
Busca vetorial MCP |
|
MCP DBSQL |
|
funções externas do MCP |
|
Para habilitar a autenticação em nome do usuário, passe um MLflow AuthPolicy para 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
)
)
Autenticação OBO para clientes OpenAI
Para agentes que utilizam o cliente OpenAI, use o SDK do Databricks para autenticar automaticamente durante a implantação. O SDK Databricks possui um wrapper para construir o cliente OpenAI com autenticação configurada automaticamente, 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()
Em seguida, especifique o endpoint servindo modelo em resources para autenticar automaticamente no momento da implantação.
Considerações de segurança da OBO
Considere as seguintes questões de segurança antes de habilitar a autenticação em nome do usuário com agentes.
Acesso expandido a recursos : os agentes podem acessar recursos confidenciais em nome dos usuários. Embora os escopos restrinjam APIs, o endpoint pode permitir mais ações do que seu agente solicita explicitamente. Por exemplo, o escopo API serving.serving-endpoints concede a um agente permissão para executar um endpoint de serviço em nome do usuário. No entanto, o endpoint de serviço pode acessar escopos API adicionais que o agente original não está autorizado a usar.
Exemplo de caderno OBO
O seguinte Notebook mostra como criar um agente com o Vector Search usando autorização em nome do usuário.
Em nome da autorização do usuário com a Vector Search
O seguinte Notebook mostra como criar um agente que suporta a execução SQL em um data warehouse SQL usando autorização em nome do usuário. Isso permite que o agente invoque funções do Unity Catalog com segurança, usando as credenciais do usuário.
Atualmente, esta é a maneira recomendada de executar funções UC com o OBO, visto que a execução Spark sem servidor com o OBO ainda não é suportada.
Autorização em nome do usuário com execução de SQL
Autenticação manual
A autenticação manual permite que as credenciais sejam especificadas explicitamente durante a implantação do agente. Este método oferece maior flexibilidade, mas requer mais configuração e gerenciamento contínuo de credenciais. Utilize este método quando:
- O recurso dependente não suporta a autenticação automática.
- O agente precisa usar credenciais diferentes das do implantador do agente.
- O agente acessa recursos externos ou APIs fora do Databricks
- O agente implantado acessa o registro de prompts.
Sobrescrever a variável de segurança de ambiente desativa a passagem automática para outros recursos dos quais seu agente depende.
Autenticação OAuth (recomendada)
OAuth é a abordagem recomendada para autenticação manual, pois oferece autenticação segura baseada em tokens para entidades de serviço, com recursos refresh automática de tokens:
-
Conceda à entidade de serviço permissões para qualquer recurso Databricks ao qual o agente tenha Databricks de acesso. Para acessar o registro de prompts, conceda permissões
CREATE FUNCTION,EXECUTEeMANAGEno esquema do Unity Catalog para armazenar prompts. -
Crie segredos do Databricks para as credenciais OAuth.
-
Configure as credenciais OAuth no código do agente:
Pythonimport 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) -
Utilize as senhas para se conectar ao workspace:
Pythonw = WorkspaceClient(
host=os.environ["DATABRICKS_HOST"],
client_id=os.environ["DATABRICKS_CLIENT_ID"],
client_secret = os.environ["DATABRICKS_CLIENT_SECRET"]
) -
Quando implantado com
agents.deploy(), inclua as credenciais OAuth como variável de ambiente:Pythonagents.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}}"
},
)
autenticação PAT
A autenticação por token de acesso pessoal (PAT) oferece uma configuração mais simples para ambientes de desenvolvimento e teste, embora exija um gerenciamento de credenciais mais manual:
-
Obtenha um PAT usando uma entidade de serviço ou account pessoal:
entidade de serviço (recomendado para segurança):
- Criar uma entidade de serviço.
- Conceda à entidade de serviço permissões para qualquer recurso Databricks ao qual o agente tenha Databricks de acesso. Para acessar o registro de prompts, conceda permissões
CREATE FUNCTION,EXECUTEeMANAGEno esquema do Unity Catalog usado para armazenar prompts. - Crie um PAT para a entidade de serviço.
account pessoal:
-
Armazene o PAT com segurança criando um segredo do Databricks para o PAT.
-
Configure a autenticação PAT no código do agente:
Pythonimport 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" -
Ao implantar o agente usando
agents.deploy(), inclua o PAT como variável de ambiente:Pythonagents.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}}"
},
)