• Mensagens
  • Agentes Gerenciados
  • Administração
Search...
⌘K
Organização
API de AdministraçãoWorkspaces
Autenticação
Visão geralWorkload Identity FederationReferência de WIF
AWSGoogle CloudMicrosoft AzureGitHub ActionsKubernetesSPIFFEOkta
Monitoramento
API de Uso e CustoAPI de Limites de TaxaAPI de Análise do Claude Code
Dados e conformidade
Residência de dadosAPI e retenção de dados
API de Conformidade
Visão geralObter acessoFeed de AtividadesChats, arquivos e projetosOrganizações, usuários, funções e gruposProjetar sua integraçãoErrosPerguntas frequentes
Log in
AWS
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

Solutions

  • AI agents
  • Code modernization
  • Coding
  • Customer support
  • Education
  • Financial services
  • Government
  • Life sciences

Partners

  • Amazon Bedrock
  • Google Cloud's Vertex AI

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Company

  • Anthropic
  • Careers
  • Economic Futures
  • Research
  • News
  • Responsible Scaling Policy
  • Security and compliance
  • Transparency

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Help and security

  • Availability
  • Status
  • Support
  • Discord

Terms and policies

  • Privacy policy
  • Responsible disclosure policy
  • Terms of service: Commercial
  • Terms of service: Consumer
  • Usage policy
Administração/Provedores de identidade

Usar WIF com AWS

Autentique workloads da AWS no Lambda, EC2, ECS ou EKS na API do Claude com Workload Identity Federation e tokens de identidade emitidos pelo STS.

Workloads da AWS podem se autenticar na API do Claude sem chaves de API estáticas, trocando um token de identidade OIDC assinado pela AWS. O caminho recomendado chama a API GetWebIdentityToken do AWS STS, que funciona em qualquer lugar onde o workload tenha credenciais da AWS: Lambda, EC2, ECS e EKS. Workloads do EKS podem, alternativamente, usar o caminho de token projetado do Kubernetes, que tem menos etapas de configuração, mas só funciona dentro de um pod.

Este guia mostra ambos os caminhos. Para os conceitos subjacentes (contas de serviço, emissores de federação e regras de federação), consulte Workload Identity Federation.

Pré-requisitos

  • Familiaridade com os conceitos de WIF: contas de serviço, emissores de federação e regras de federação.
  • Um workload da AWS (pod do EKS, tarefa do ECS, função Lambda ou instância EC2) com uma função IAM anexada.
  • A CLI aws ou um SDK da AWS disponível no workload.
  • Permissão para criar contas de serviço, emissores de federação e regras de federação no Claude Console para sua organização da Anthropic.

Usar tokens de identidade web do STS (recomendado)

A API GetWebIdentityToken do AWS STS retorna um token OIDC assinado pela AWS que atesta a identidade IAM do chamador. Como ela usa as credenciais da AWS do ambiente do workload, a mesma integração cobre Lambda, EC2, ECS e EKS.

Configurar a AWS

  1. 1

    Habilitar a federação de identidade web de saída para a conta

    Esta é uma flag no nível da conta, desativada por padrão. No console da AWS, abra IAM, escolha Account settings e habilite Outbound web identity federation. Para habilitá-la programaticamente:

    python3 -c "import boto3; boto3.client('iam').enable_outbound_web_identity_federation()"

    Se isso não estiver habilitado, as chamadas para GetWebIdentityToken falham com OutboundWebIdentityFederationDisabledException.

  2. 2

    Conceder à função IAM do workload permissão para chamar a API

    Anexe esta política à função IAM com a qual sua função Lambda, instância EC2 ou tarefa ECS é executada:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": ["sts:GetWebIdentityToken"],
          "Resource": "*"
        }
      ]
    }
  3. 3

    Encontrar a URL do emissor STS da sua conta

    Após habilitar a federação de saída, a página IAM > Account settings mostra um campo Get Token Issuer URL com um valor no formato https://<uuid>.tokens.sts.global.api.aws. Essa URL é exclusiva da sua conta da AWS; copie-a para a próxima etapa. Para recuperá-la programaticamente:

    python3 -c "import boto3; print(boto3.client('iam').get_outbound_web_identity_federation_info())"

Configurar a Anthropic

Siga o passo a passo de configuração para registrar um emissor de federação, criar uma conta de serviço da Anthropic e criar uma regra de federação no Claude Console. Use estes valores específicos do STS.

Emissor de federação: Registre a URL do emissor STS específica da conta que você copiou na etapa anterior. Ela expõe um endpoint JWKS público, então use o modo de descoberta.

{
  "name": "aws-sts",
  "issuer_url": "https://<uuid>.tokens.sts.global.api.aws",
  "jwks_source": "discovery"
}

Regra de federação: Faça a correspondência com o audience que você passa para GetWebIdentityToken e com o ARN da função IAM do chamador na claim sub. O valor de sub é o ARN da função IAM do workload que chamou a API, no formato arn:aws:iam::<account>:role/<role-name>. O token também carrega uma claim https://sts.amazonaws.com/ com aws_account, org_id, principal_id e quaisquer request_tags que você passou; você pode fazer correspondência com esses valores usando o mapa claims da regra ou uma condition CEL para um controle mais refinado.

{
  "name": "prod-inference",
  "issuer_id": "fdis_...",
  "match": {
    "subject_prefix": "arn:aws:iam::123456789012:role/inference-worker",
    "audience": "https://api.anthropic.com"
  },
  "target": { "type": "service_account", "service_account_id": "svac_..." },
  "workspace_id": "wrkspc_...",
  "oauth_scope": "workspace:developer",
  "token_lifetime_seconds": 600
}

Seja tão específico quanto o workload permitir. Faça a correspondência com o ARN exato da função e só amplie o subject_prefix (por exemplo, para arn:aws:iam::123456789012:role/*) se várias funções IAM devem ser mapeadas para a mesma conta de serviço da Anthropic.

Obter e usar o token

Chame GetWebIdentityToken com https://api.anthropic.com como audience e, em seguida, passe o resultado para as credenciais de federação do SDK. O provedor de token é um callable, então o SDK reinvoca o STS a cada atualização.

GetWebIdentityToken está disponível apenas em endpoints regionais do STS. Se você receber 'STS' object has no attribute 'get_web_identity_token' ou um erro semelhante, fixe seu cliente STS em uma região (por exemplo, boto3.client("sts", region_name="us-east-1")) e certifique-se de que seu SDK da AWS seja recente o suficiente para incluir a API.

import os

import anthropic
import boto3
from anthropic import WorkloadIdentityCredentials


def get_sts_web_identity_token() -> str:
    sts = boto3.client("sts", region_name="us-east-1")
    resp = sts.get_web_identity_token(
        Audience=["https://api.anthropic.com"],
        SigningAlgorithm="RS256",
        DurationSeconds=900,
    )
    return resp["WebIdentityToken"]


client = anthropic.Anthropic(
    credentials=WorkloadIdentityCredentials(
        identity_token_provider=get_sts_web_identity_token,
        federation_rule_id=os.environ["ANTHROPIC_FEDERATION_RULE_ID"],
        organization_id=os.environ["ANTHROPIC_ORGANIZATION_ID"],
        service_account_id=os.environ["ANTHROPIC_SERVICE_ACCOUNT_ID"],
        workspace_id=os.environ.get("ANTHROPIC_WORKSPACE_ID"),
    ),
)

message = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello from AWS"}],
)
print(message.content[0].text)

Verificar a configuração

De dentro do workload, troque um token emitido pelo STS diretamente e inspecione a resposta:

cURL
JWT=$(aws sts get-web-identity-token \
  --region us-east-1 \
  --audience "https://api.anthropic.com" \
  --signing-algorithm RS256 \
  --duration-seconds 900 \
  --query WebIdentityToken --output text)

curl -sS https://api.anthropic.com/v1/oauth/token \
  -H "content-type: application/json" \
  -d "{
    \"grant_type\": \"urn:ietf:params:oauth:grant-type:jwt-bearer\",
    \"assertion\": \"$JWT\",
    \"federation_rule_id\": \"fdrl_...\",
    \"organization_id\": \"00000000-0000-0000-0000-000000000000\",
    \"service_account_id\": \"svac_...\",
    \"workspace_id\": \"wrkspc_...\"
  }" | jq

Uma troca bem-sucedida retorna um access_token começando com sk-ant-oat01- e um valor expires_in em segundos. Em caso de 400 invalid_grant, consulte Solucionar problemas de uma troca com falha; a causa mais comum do lado da AWS é uma incompatibilidade de iss (a URL do emissor STS específica da conta deve corresponder exatamente ao issuer_url registrado).

Usar tokens de conta de serviço projetados do EKS

Se seu workload é executado em um pod do EKS, você pode pular a chamada ao STS e ler um token de conta de serviço projetado pelo Kubernetes diretamente do disco. O Kubernetes projeta nativamente um token compatível com OIDC no pod, e o SDK pode lê-lo de um caminho de arquivo, então nenhum callable de provedor de token é necessário. Esse caminho tem duas etapas de configuração da AWS a menos do que o caminho do STS, mas só funciona dentro de um pod; o mecanismo subjacente é o mesmo da integração genérica do Kubernetes.

Esse caminho requer adicionalmente um cluster EKS com um provedor OIDC do IAM habilitado e acesso kubectl ao cluster.

Configurar seu cluster EKS

  1. 1

    Encontrar a URL do emissor OIDC do seu cluster

    Cada cluster EKS tem um emissor OIDC exclusivo. Recupere-o com a CLI da AWS:

    CLI
    aws eks describe-cluster \
      --name <cluster-name> \
      --query "cluster.identity.oidc.issuer" \
      --output text

    A saída se parece com https://oidc.eks.us-west-2.amazonaws.com/id/6FA42E7BFDE8549CB.... Você registrará essa URL como um emissor de federação na próxima seção.

  2. 2

    Criar a conta de serviço e projetar um token com audience da Anthropic

    O webhook de identidade de pod do EKS detecta a anotação eks.amazonaws.com/role-arn e projeta automaticamente um token com aud: sts.amazonaws.com, expondo seu caminho como AWS_WEB_IDENTITY_TOKEN_FILE. Esse token é para assunção de função da AWS. Para a troca com a Anthropic, projete um segundo token com audience: https://api.anthropic.com e monte-o em um caminho dedicado.

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: inference-worker
      namespace: inference
      annotations:
        eks.amazonaws.com/role-arn: arn:aws:iam::123456789012:role/inference-worker
    apiVersion: v1
    kind: Pod
    metadata:
      name: inference-worker
      namespace: inference
    spec:
      serviceAccountName: inference-worker
      volumes:
        - name: anthropic-token
          projected:
            sources:
              - serviceAccountToken:
                  audience: https://api.anthropic.com
                  expirationSeconds: 3600
                  path: token
      containers:
        - name: app
          image: your-registry/inference-worker:latest
          env:
            - name: ANTHROPIC_IDENTITY_TOKEN_FILE
              value: /var/run/secrets/anthropic.com/token
            - name: ANTHROPIC_FEDERATION_RULE_ID
              value: fdrl_...
            - name: ANTHROPIC_ORGANIZATION_ID
              value: 00000000-0000-0000-0000-000000000000
            - name: ANTHROPIC_SERVICE_ACCOUNT_ID
              value: svac_...
            - name: ANTHROPIC_WORKSPACE_ID  # required when the rule covers multiple workspaces
              value: wrkspc_...
          volumeMounts:
            - name: anthropic-token
              mountPath: /var/run/secrets/anthropic.com
              readOnly: true
  3. 3

    Observar o formato das claims do token

    O token projetado é um "JSON Web Token" (JWT) assinado pelo emissor OIDC do seu cluster. Sua claim sub segue a convenção do Kubernetes system:serviceaccount:<namespace>:<service-account-name>:

    {
      "iss": "https://oidc.eks.us-west-2.amazonaws.com/id/6FA42E7BFDE8549CB...",
      "sub": "system:serviceaccount:inference:inference-worker",
      "aud": ["https://api.anthropic.com"],
      "kubernetes.io": {
        "namespace": "inference",
        "serviceaccount": { "name": "inference-worker", "uid": "..." }
      },
      "exp": 1775527120,
      "iat": 1775523520
    }

    A projeção serviceAccountToken define aud como https://api.anthropic.com. O token separado injetado pelo IRSA em AWS_WEB_IDENTITY_TOKEN_FILE carrega aud: sts.amazonaws.com e é para chamadas de API da AWS, não para esta troca.

Configurar a Anthropic

Siga o passo a passo de configuração para registrar um emissor de federação, criar uma conta de serviço da Anthropic e criar uma regra de federação no Claude Console. Use estes valores específicos do EKS.

Emissor de federação: Emissores do EKS expõem um endpoint JWKS público, então use o modo de descoberta. A URL do emissor deve corresponder exatamente à claim iss do token. Registre um emissor por cluster.

{
  "name": "prod-eks-uswest2",
  "issuer_url": "https://oidc.eks.us-west-2.amazonaws.com/id/6FA42E7BFDE8549CB...",
  "jwks_source": "discovery"
}

Regra de federação: Faça a correspondência com a claim sub do Kubernetes e com o audience da Anthropic https://api.anthropic.com. (Projete um token de conta de serviço dedicado com esse audience; não reutilize o token padrão do IRSA sts.amazonaws.com.)

{
  "name": "prod-inference",
  "issuer_id": "fdis_...",
  "match": {
    "subject_prefix": "system:serviceaccount:inference:inference-worker",
    "audience": "https://api.anthropic.com"
  },
  "target": { "type": "service_account", "service_account_id": "svac_..." },
  "workspace_id": "wrkspc_...",
  "oauth_scope": "workspace:developer",
  "token_lifetime_seconds": 600
}

Seja tão específico quanto o workload permitir. Afrouxe o subject_prefix para system:serviceaccount:inference:* (o * final o torna uma correspondência de prefixo) apenas se todas as contas de serviço no namespace devem ser mapeadas para a mesma conta de serviço da Anthropic.

Obter e usar o token

Dentro do pod, o token projetado está em /var/run/secrets/anthropic.com/token (exposto como ANTHROPIC_IDENTITY_TOKEN_FILE na especificação do Pod). Passe esse arquivo para as credenciais de federação do SDK e o SDK cuida da troca e da atualização.

import os

import anthropic
from anthropic import IdentityTokenFile, WorkloadIdentityCredentials

client = anthropic.Anthropic(
    credentials=WorkloadIdentityCredentials(
        identity_token_provider=IdentityTokenFile(
            os.environ["ANTHROPIC_IDENTITY_TOKEN_FILE"]
        ),
        federation_rule_id=os.environ["ANTHROPIC_FEDERATION_RULE_ID"],
        organization_id=os.environ["ANTHROPIC_ORGANIZATION_ID"],
        service_account_id=os.environ["ANTHROPIC_SERVICE_ACCOUNT_ID"],
        workspace_id=os.environ.get("ANTHROPIC_WORKSPACE_ID"),
    ),
)

message = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello from EKS"}],
)
print(message.content[0].text)

A especificação do Pod já define ANTHROPIC_IDENTITY_TOKEN_FILE, ANTHROPIC_FEDERATION_RULE_ID, ANTHROPIC_ORGANIZATION_ID, ANTHROPIC_SERVICE_ACCOUNT_ID e ANTHROPIC_WORKSPACE_ID, então você pode construir o cliente sem argumentos e o SDK lê as variáveis de ambiente de federação automaticamente.

Verificar a configuração

De dentro do pod, troque o token projetado diretamente e inspecione a resposta:

cURL
JWT=$(cat "$ANTHROPIC_IDENTITY_TOKEN_FILE")

curl -sS https://api.anthropic.com/v1/oauth/token \
  -H "content-type: application/json" \
  -d "{
    \"grant_type\": \"urn:ietf:params:oauth:grant-type:jwt-bearer\",
    \"assertion\": \"$JWT\",
    \"federation_rule_id\": \"$ANTHROPIC_FEDERATION_RULE_ID\",
    \"organization_id\": \"$ANTHROPIC_ORGANIZATION_ID\",
    \"service_account_id\": \"$ANTHROPIC_SERVICE_ACCOUNT_ID\",
    \"workspace_id\": \"$ANTHROPIC_WORKSPACE_ID\"
  }" | jq

Uma troca bem-sucedida retorna um access_token começando com sk-ant-oat01- e um valor expires_in em segundos. Em caso de 400 invalid_grant, consulte Solucionar problemas de uma troca com falha; a causa mais comum do lado do EKS é o aud do token projetado não corresponder à regra (projete um token com audience: https://api.anthropic.com, não o padrão do IRSA sts.amazonaws.com).

Definir o escopo da sua regra

Um subject_prefix de arn:aws:iam::123456789012:role/* corresponde a todas as funções IAM na conta. Qualquer principal que possa assumir qualquer função correspondente pode obter um token federado da Anthropic.

Restrinja o bloco match da regra ao escopo mais estreito que se adapte ao seu caso de uso:

  • Fixe o ARN completo da função: Use subject_prefix: "arn:aws:iam::<account>:role/<role-name>" sem * no final para que outras funções na conta não correspondam.
  • Fixe o ID da conta: Faça a correspondência com o campo aws_account da claim https://sts.amazonaws.com/ do token por meio do mapa claims ou de uma condition CEL como uma verificação de defesa em profundidade contra um prefixo mal configurado.
  • Fixe o namespace e a conta de serviço no EKS: Use o valor exato system:serviceaccount:<namespace>:<name> sem * após o prefixo system:serviceaccount:.
  • Use uma regra separada por ambiente: Crie regras distintas para workloads de produção, staging e desenvolvimento em vez de ampliar um único prefixo para cobrir todos eles.

Próximos passos

  • Revise a referência de WIF para a referência completa de precedência de credenciais, configuração de perfil e correspondência de regras.
  • Para clusters Kubernetes autogerenciados que não estão no EKS, consulte Usar WIF com Kubernetes.

Was this page helpful?

  • Pré-requisitos
  • Usar tokens de identidade web do STS (recomendado)
  • Configurar a AWS
  • Configurar a Anthropic
  • Obter e usar o token
  • Verificar a configuração
  • Usar tokens de conta de serviço projetados do EKS
  • Configurar seu cluster EKS
  • Configurar a Anthropic
  • Obter e usar o token
  • Verificar a configuração
  • Definir o escopo da sua regra
  • Próximos passos