As cargas de trabalho do agente implantadas em clusters do Google Kubernetes Engine (GKE) geralmente precisam acessar ferramentas e serviços externos, seja como a própria identidade do agente ou em nome dos usuários finais. Os administradores de segurança e de plataforma também querem saber o que os agentes implantados fazem nos serviços do Google Cloud. Neste documento, mostramos como configurar a autenticação para cargas de trabalho de agente solicitando uma identidade do agente para seus pods. Essa identidade de agente permite configurar a autenticação sem precisar gerenciar manualmente as credenciais para diferentes fluxos de trabalho e integra seus agentes do GKE à Gemini Enterprise Agent Platform. Este documento é destinado a desenvolvedores de aplicativos que criam e executam cargas de trabalho de agentes em clusters do GKE.
Você já precisa conhecer os seguintes tópicos:
Preços
A identidade do agente é fornecida sem custo financeiro adicional no GKE.
Limitações
- É possível registrar automaticamente apenas implantações no Agent Registry. Outros controladores de carga de trabalho e pods estáticos não oferecem suporte ao registro automático. Embora seja possível solicitar identidades de agente para todos os tipos de carga de trabalho, o registro no Agent Registry permite integrar essas identidades à Agent Platform.
- Os tokens de acesso de identidade do agente vinculados usam apenas o escopo OAuth
https://www.googleapis.com/auth/cloud-platform. Não é possível especificar um escopo diferente para os tokens de acesso vinculados.
Antes de começar
Antes de começar, verifique se você realizou as tarefas a seguir:
- Ative a API Google Kubernetes Engine. Ativar a API Google Kubernetes Engine
- Se você quiser usar a Google Cloud CLI para essa tarefa, instale e inicialize a CLI gcloud. Se você instalou a CLI gcloud anteriormente, instale a versão
mais recente executando o comando
gcloud components update. Talvez as versões anteriores da CLI gcloud não sejam compatíveis com a execução dos comandos neste documento.
Ative a API Agent Registry, se ela ainda não estiver ativada:
Funções necessárias para ativar APIs
Para ativar APIs, você precisa da permissão
serviceusage.services.enable. Se você criou o projeto, provavelmente já tem essa permissão pelo papel de Proprietário (roles/owner). Caso contrário, é possível receber essa permissão pelo papel de Administrador do Service Usage (roles/serviceusage.serviceUsageAdmin). Saiba como conceder papéis.gcloud services enable agentregistry.googleapis.com
Verifique se você tem um cluster do Autopilot ou um cluster padrão com a Federação de Identidade da Carga de Trabalho para GKE ativada e que executa a versão 1.37.0-gke.3503000 ou mais recente do GKE.
Verifique se você tem cota suficiente para operações de troca de tokens. Essa cota tem o nome Solicitações de token de identidade da carga de trabalho do Exchange por minuto e região. Para mais informações, consulte Cotas e limites.
Funções exigidas
Para receber as permissões necessárias para solicitar uma identidade de agente e implantar cargas de trabalho,
peça ao administrador para conceder a você o papel do IAM de
Desenvolvedor do Kubernetes Engine (roles/container.developer) no seu projeto Google Cloud .
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.
Solicitar uma identidade de agente para uma carga de trabalho
Para receber uma identidade de agente para pods, adicione anotações à especificação do pod para solicitar um ID do SPIFFE para a carga de trabalho e injetar o pacote de certificados X.509 em cada pod. Para pods gerenciados por implantações, também é necessário adicionar uma anotação e um rótulo para registrar o agente no Agent Registry. Embora o registro seja opcional, apenas agentes registrados podem usar serviços da Agent Platform, como o Gateway de Agente. Para mais informações sobre as anotações e rótulos específicos, consulte Configuração no nível da carga de trabalho.
As etapas a seguir mostram como criar uma implantação de exemplo que solicita identidades de agente:
Encontre o ID da sua organização. Se o projeto não estiver em uma organização, pule esta etapa e encontre o número do projeto.
gcloud projects get-ancestors PROJECT_IDSubstitua
PROJECT_IDpelo ID do projeto de cluster.O resultado será o seguinte:
ID: my-project TYPE: project ID: 811159889184 TYPE: folder ID: 301928500920 TYPE: organizationAnote o valor no campo
IDdo recursoorganization.Conecte-se ao cluster:
gcloud container clusters get-credentials CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATIONSubstitua:
CLUSTER_NAME: o nome do cluster.CONTROL_PLANE_LOCATION: a região ou zona do plano de controle do cluster.
Crie um namespace para executar a implantação de exemplo:
kubectl create namespace NAMESPACE_NAMESubstitua
NAMESPACE_NAMEpor um nome para o namespace.Crie uma conta de serviço do Kubernetes para a implantação:
kubectl create serviceaccount SERVICEACCOUNT_NAME \ --namespace=NAMESPACE_NAMESubstitua
SERVICEACCOUNT_NAMEpor um nome para a conta de serviço.Salve o seguinte manifesto de implantação como
agent-identity-deployment.yaml:apiVersion: apps/v1 kind: Deployment metadata: name: agent-identity-deployment namespace: NAMESPACE_NAME # Add the agent to Agent Registry labels: registry.gke.io/functional-type: "AGENT" annotations: # A2A protocol metadata annotation for automated Agent Card discovery a2a-protocol.org/agent-card: | card: endpoint: /.well-known/agent-card.json protocol: HTTP port: 8080 spec: replicas: 2 selector: matchLabels: workload-type: agent template: metadata: name: agent-identity-pod annotations: iam.gke.io/identity: "spiffe://TRUST_DOMAIN/*" # The trust domain from which to assign SPIFFE IDs. iam.gke.io/inject-podcertificates: "true" # Inject X.509 certificates and per-Pod private key into each Pod. iam.gke.io/spiffe-identity-type: "agent-identity" # Required for Agent Registry registration. labels: workload-type: agent spec: serviceAccountName: SERVICEACCOUNT_NAME containers: - name: agent image: python:3.11-slim command: ["sleep","infinity"]Substitua
TRUST_DOMAINpelo domínio de confiança que emite identidades para agentes no seu projeto. Esse valor precisa usar uma das seguintes sintaxes, dependendo se o projeto está em uma organização:- Projetos em uma organização:
agents.global.org-ORGANIZATION_ID.system.id.goog, em queORGANIZATION_IDé o ID da organização. - Projetos que não estão em uma organização:
agents.global.proj-PROJECT_NUMBER.system.id.goog, em quePROJECT_NUMBERé o número do projeto do projeto do cluster.
Essa implantação solicita uma identidade de agente para a carga de trabalho, adiciona os certificados X.509 por pod aos pods e registra o agente no Registro de agentes.
- Projetos em uma organização:
Crie a implantação:
kubectl apply -f agent-identity-deployment.yamlVerifique se os pods estão em execução:
kubectl get pods -l workload-type=agent -n NAMESPACE_NAME
Verificar a identidade do agente atribuído
Depois de implantar uma carga de trabalho que solicita uma identidade de agente, é possível verificar a identidade conferindo os certificados X.509. Se você desativar a injeção de certificado, poderá receber um token de identidade não vinculado do servidor de metadados do GKE para verificar o campo de assunto, conforme descrito em Autenticar em APIs do Google Cloud .
Para ler o certificado X.509 em um pod, siga estas etapas:
Verifique se um pod tem acesso ao certificado X.509 e à chave privada:
kubectl get pod POD_NAME -n NAMESPACE_NAME \ -o=jsonpath='{range .spec.volumes[*]}{.name}{"\n"}{end}'Substitua
POD_NAMEpelo nome de um pod que usa a identidade do agente.O resultado será o seguinte:
kube-api-access-bx86g gke-workload-spiffe-credentialsNessa saída, o volume
gke-workload-spiffe-credentialsé o local dos certificados injetados. Se você não encontrar esse volume, verifique se a anotaçãoiam.gke.io/inject-podcertificatesestá definida comotruena especificação do pod.Crie uma sessão interativa do shell no pod:
kubectl exec -n NAMESPACE_NAME -it POD_NAME -- /bin/bashNa sessão do shell, liste as credenciais no volume
gke-workload-spiffe-credentials:ls -1 /var/run/secrets/workload-spiffe-credentials/O resultado será o seguinte:
x509.credential-bundle.private-key.pem TRUST_DOMAIN.spiffe-trust-bundle.pemA saída mostra os seguintes arquivos:
x509.credential-bundle.private-key.pem: o pacote de credenciais de identidade do agente, que inclui a cadeia de certificados X.509 e uma chave privada exclusiva do pod. Esse pacote de credenciais é usado para solicitar tokens de acesso e tokens de ID e para autenticar APIs do Google Cloud usando mTLS.TRUST_DOMAIN.spiffe-trust-bundle.pem: o pacote de confiança da CA raiz, que contém os certificados autoassinados que formam a âncora de confiança para as credenciais de identidade do agente. Esse pacote de confiança é usado principalmente para validar certificados TLS de outras cargas de trabalho durante handshakes de mTLS.
Para receber o ID do SPIFFE associado ao pod, leia o certificado X.509:
openssl x509 -in /var/run/secrets/workload-spiffe-credentials/x509.credential-bundle.private-key.pem -text -nooutO resultado será o seguinte:
Certificate: Data: # Multiple lines are omitted here X509v3 extensions: # Multiple lines are omitted here X509v3 Subject Alternative Name: critical URI:spiffe://agents.global.org-301928500920.system.id.goog/resources/container/projects/729788050015/locations/us-central1/clusters/cluster-2/ns/agent-identity-ns/sa/agent-identity-sa # Multiple lines are omitted hereNessa saída, o valor no campo
URIpara o campoX509v3 Subject Alternative Nameé o ID do SPIFFE do agente.
Se o pod do agente tiver um ID do SPIFFE atribuído, sua solicitação de uma identidade do agente será bem-sucedida. É possível usar a identidade atribuída para autenticar várias ferramentas e serviços.
A seguir
- Autenticar usando uma identidade de agente no GKE
- Configurar rastreamento para agentes
- Configurar a geração de registros para agentes
- Configurar o monitoramento de agentes