Autenticar seus agentes de IA

Ao implantar um agente no Cloud Run, você pode atribuir a ele uma identidade que permita a autenticação segura ao se comunicar com APIs e outros agentes.

Autenticar em Google Cloud APIs, outros agentes e ferramentas

Quando a carga de trabalho do Cloud Run é configurada com o tipo de identidade agent-identity, ela recebe uma identidade gerenciada pelo sistema neste formato:

principal://agents.global.org-ORGANIZATION_ID.system.id.goog/resources/run/projects/PROJECT_NUMBER/locations/REGION/services/SERVICE_NAME

Para projetos sem uma organização, o formato usa o número do projeto:

principal://agents.global.project-PROJECT_NUMBER.system.id.goog/resources/run/projects/PROJECT_NUMBER/locations/REGION/services/SERVICE_NAME

Você pode usar essa identidade para autenticar seu agente com segurança ao se comunicar com Google Cloud APIs, outros agentes ou ferramentas.

Autenticar em Google Cloud APIs

Os agentes podem usar a identidade atribuída para autenticar em Google Cloud APIs como a Vertex AI, o Cloud Storage e outros Google Cloud produtos usando tokens de acesso buscados no servidor de metadados do Cloud Run.

  1. Conceda o papel do IAM apropriado ao principal do agente, por exemplo:

    • Conceder acesso à Vertex AI:

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member="AGENT_PRINCIPAL" \
          --role="roles/aiplatform.user"
    • Conceder acesso a outras Google Cloud APIs:

      Conceda o papel necessário no recurso de destino a AGENT_PRINCIPAL, por exemplo, roles/storage.objectViewer em um bucket do Cloud Storage. Para mais detalhes, consulte Autenticar com o Application Default Credentials.

    Substitua:

    • PROJECT_ID: o ID do Google Cloud projeto.
    • AGENT_PRINCIPAL: a identidade do agente, por exemplo, principal://agents.global.org-ORGANIZATION_ID.system.id.goog/resources/run/projects/PROJECT_NUMBER/locations/REGION/services/AGENT_NAME.
  2. No código do aplicativo do agente, use as bibliotecas de cliente padrão do Google Cloud. As bibliotecas de cliente usam automaticamente o Application Default Credentials (ADC) para buscar tokens de acesso de curta duração no servidor de metadados.

    Como alternativa, você pode buscar manualmente um token de acesso no servidor de metadados dentro do contêiner:

    curl -s -H "Metadata-Flavor: Google" \
    "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token"

Autenticar em outros agentes no Cloud Run

Quando um agente precisa chamar outro agente hospedado no Cloud Run como agentes A2A, autentique usando um token de identidade JSON Web Token (JWT) validado pela verificação roles/run.invoker integrada do IAM do Cloud Run:

  1. Conceda à identidade do agente de chamada o papel roles/run.invoker no serviço de destino do Cloud Run:

    gcloud run services add-iam-policy-binding TARGET_SERVICE_NAME \
        --member="CALLER_AGENT_PRINCIPAL" \
        --role="roles/run.invoker" \
        --region=REGION

    Substitua:

    • TARGET_SERVICE_NAME: o nome do serviço de agente de destino do Cloud Run.
    • CALLER_AGENT_PRINCIPAL: a identidade do agente de chamada.
    • REGION: a Google Cloud região do serviço de destino.

Opções de validação de token

O Cloud Run oferece suporte a dois métodos de validação de token de identidade:

  • Tokens não vinculados: tokens de identidade padrão vinculados ao público-alvo gerados pelo servidor de metadados. Esse é o mecanismo padrão para autenticação de serviço para serviço e de agente para agente.
  • Tokens vinculados: fornece vinculação criptográfica entre o token e o certificado da carga de trabalho usando mTLS. Para usar tokens vinculados, o cliente de chamada fornece a cadeia de certificados de folha na solicitação.
Buscar um token de ID não vinculado
  1. No contêiner do agente de chamada, busque um token de identidade com o URL do serviço de destino como público-alvo:
    TOKEN=$(curl -s -H "Metadata-Flavor: Google" \
      "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=TARGET_SERVICE_URL")
    Substitua TARGET_SERVICE_URL pelo URL do serviço de destino do Cloud Run, por exemplo, https://target-agent-1234567890.us-central1.run.app.
  2. Envie solicitações ao serviço de destino com o token no Authorization cabeçalho:
    curl -H "Authorization: Bearer $TOKEN" \
      TARGET_SERVICE_URL/endpoint
Buscar um token de ID vinculado (mTLS)
  1. No contêiner do agente de chamada, leia a cadeia de certificados de folha e solicite um token vinculado do servidor de metadados usando uma solicitação POST:
    CERT_PATH="/var/run/secrets/workload-spiffe-credentials/certificates.pem"
    JSON_PAYLOAD=$(jq -n --arg certs "$(cat $CERT_PATH)" '{"certificate_chain": $certs}')
    
    TOKEN=$(curl -s -X POST \
        -H "Metadata-Flavor: Google" \
        -H "Content-Type: application/json" \
        -d "$JSON_PAYLOAD" \
      "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=TARGET_SERVICE_MTLS_URL")
  2. Chame o endpoint mTLS do serviço de destino, apresentando os certificados de carga de trabalho durante o handshake TLS:
    KEY_PATH="/var/run/secrets/workload-spiffe-credentials/private_key.pem"
    
    curl --cert $CERT_PATH \
        --key $KEY_PATH \
        -H "Authorization: Bearer $TOKEN" \
      TARGET_SERVICE_MTLS_URL/endpoint
Exemplo do Python

Se você escrever um código de agente baseado em Python, as bibliotecas de cliente padrão do Google Cloud vão solicitar automaticamente tokens vinculados por padrão quando os certificados estiverem presentes. Se você precisar fazer solicitações HTTP manuais:

import os
import requests
import google.auth
from google.auth.transport.requests import Request
from google.oauth2 import id_token

# Target agent's mTLS URL
target_mtls_url = "TARGET_SERVICE_MTLS_URL"

# 1. Fetch the ID token.
# google-auth automatically requests a bound ID token via POST because
# the platform configures the workload certificate environment variables.
auth_req = Request()
token = id_token.fetch_id_token(auth_req, target_mtls_url)

# 2. Make the HTTP call over mTLS, presenting the workload certificates.
cert_path = "/var/run/secrets/workload-spiffe-credentials/certificates.pem"
key_path = "/var/run/secrets/workload-spiffe-credentials/private_key.pem"

response = requests.get(
    target_mtls_url,
    headers={"Authorization": f"Bearer {token}"},
    cert=(cert_path, key_path)
)
print(response.text)

Substitua TARGET_SERVICE_MTLS_URL pelo URL mTLS do serviço de destino do Cloud Run, por exemplo, https://target-agent-12345.us-central1.mtls.run.app.

Autenticar em servidores MCP no Cloud Run

Para se conectar a um servidor ou ferramenta MCP hospedada no Cloud Run, use o identificador --functional-type=mcp-server para ativar o registro automático do servidor MCP no Agent Registry.

Se o servidor MCP só for acessado por outros agentes em execução no Cloud Run, use a verificação de invocador do IAM integrada. Permita que seus agentes se comuniquem nativamente usando políticas de invocador de execução padrão:

gcloud run services add-iam-policy-binding MCP_SERVICE_NAME \
    --member="CALLING_AGENT_PRINCIPAL" \
    --role="roles/run.invoker" \
    --region=REGION

Substitua:

  • MCP_SERVICE_NAME: o nome do serviço de destino do Cloud Run que hospeda o servidor MCP.
  • CALLING_AGENT_PRINCIPAL: a identidade principal do agente que invoca o servidor MCP. Por exemplo, serviceAccount:my-agent@my-project.iam..
  • REGION: a Google Cloud região em que o servidor MCP está implantado.

Depois de conceder o papel run.invoker, o agente de chamada poderá buscar um token de identidade conforme descrito na seção Opções de validação de token.

Para saber como proteger servidores MCP com o IAP para acesso programático e da CLI do SDK, consulte Autenticar servidores MCP.

Autenticar em nome dos usuários

Quando o agente acessa ferramentas e serviços externos em nome de um usuário, ele pode usar a identidade do agente provisionada para gerenciar a autenticação com servidores MCP e endpoints externos.

Para processar fluxos de trabalho de autorização complexos com segurança, como consentimento OAuth de três partes (3LO), OAuth de duas partes (2LO) e chaves de API, configure o gerenciador de autenticação de identidade do agente.

Para instruções sobre como vincular esses gerenciadores de autenticação aos conjuntos de ferramentas, consulte Autenticar em ferramentas e recursos.