Skip to main content
Esta página apresenta uma forma de executar o gateway de aplicativos Claude na AWS. A configuração é um exemplo funcional para infraestrutura gerenciada pelo cliente em vez de uma implantação de produção suportada; use-a para ver como as peças se encaixam antes de adaptá-la ao seu próprio ambiente. Para os requisitos independentes de plataforma, consulte o guia de implantação.
Este exemplo provisiona o gateway de aplicativos Claude na AWS com Amazon Bedrock como upstream de modelo, usando Amazon ECS em AWS Fargate ou Amazon EKS para computação. Okta é o provedor de identidade (IdP) de exemplo, mas qualquer IdP compatível com OpenID Connect (OIDC) funciona; consulte Configuração do provedor de identidade para detalhes específicos de cada IdP.
Bedrock não é o único upstream Claude na AWS. O gateway também suporta Claude Platform on AWS, a API Claude operada pela Anthropic com autenticação AWS e faturamento do AWS Marketplace, no lugar de Bedrock ou junto com ele. Sua entrada upstream, credenciais e permissões IAM diferem das específicas de Bedrock desta página; a referência de upstream Claude Platform on AWS cobre o que muda, e o resto desta página se aplica sem alterações.

Arquitetura

Diagrama do gateway de aplicativos Claude na AWS: clientes Claude Code se conectam via HTTPS a um Application Load Balancer interno que fica na frente do gateway (ECS Fargate ou EKS), que é executado em subnets privadas junto com uma instância Amazon RDS para PostgreSQL para estado de sessão. O gateway faz login dos usuários via OIDC contra o IdP corporativo, lê segredos do AWS Secrets Manager, encaminha solicitações de modelo para Amazon Bedrock usando sua função IAM e extrai sua imagem do Amazon ECR na implantação.

A arquitetura de exemplo, com Amazon Bedrock como upstream de modelo. Um upstream Claude Platform on AWS ocupa a mesma posição.

O gateway é executado como um endpoint HTTPS privado em sua rede ao qual os desenvolvedores fazem login através de seu IdP. Suas sessões Claude Code alcançam modelos Claude no Amazon Bedrock através da função IAM do gateway, portanto nenhuma credencial de modelo chega às máquinas dos desenvolvedores. A configuração de referência provisiona:
  • Serviço Amazon ECS em AWS Fargate ou Amazon EKS Deployment executando o contêiner do gateway
  • Repositório Amazon ECR para a imagem do gateway
  • Instância Amazon RDS para PostgreSQL em subnets privadas, não acessível publicamente, para o store do gateway
  • Segredos AWS Secrets Manager para a chave de assinatura JWT, o segredo do cliente OIDC e a URL do Postgres
  • Função IAM com bedrock:InvokeModel, bedrock:InvokeModelWithResponseStream e bedrock:CountTokens, anexada como função de tarefa ECS ou vinculada via IAM Roles for Service Accounts (IRSA) no EKS
  • Application Load Balancer interno para HTTPS

Pré-requisitos

O passo a passo cria os próprios recursos do gateway, mas se baseia em infraestrutura de rede e identidade que você já possui. Antes de começar, você precisa:

Defina suas variáveis de ambiente

Cada comando nesta página lê quatro valores do seu shell: AWS_REGION, ACCOUNT_ID, VPC_ID e PRIVATE_SUBNETS. Escolha uma região dos EUA onde Bedrock serve os modelos Claude que você precisa. O passo a passo depende do catálogo de modelos integrado do gateway, que resolve para perfis de inferência us.anthropic.*, e a política IAM concede esses ARNs. Em uma região fora dos EUA, adicione um bloco models: com os IDs de perfil de inferência dessa região geográfica e altere o prefixo ARN da política IAM para corresponder. Se você não tiver o ID da VPC à mão, liste suas VPCs com aws ec2 describe-vpcs, depois liste as subnets dessa VPC para encontrar duas privadas em diferentes Zonas de Disponibilidade:
Exporte todos os quatro antes de continuar:

Implante o gateway

As etapas abaixo provisionam a implantação completa com comandos aws.
1

Crie os grupos de segurança

Três grupos de segurança encadeiam o caminho do tráfego: sua rede corporativa alcança o balanceador de carga na porta 443, o balanceador de carga alcança o gateway na porta 8080 e o gateway alcança o Postgres na porta 5432. Nada mais é acessível. Como você os anexa depende da trilha de computação:
  • No ECS Fargate, a etapa de implantação anexa $ALB_SG ao balanceador de carga e $GW_SG ao serviço.
  • No EKS, o AWS Load Balancer Controller cria seu próprio grupo de segurança frontend para o ALB, portanto $ALB_SG e $GW_SG não são usados: a anotação inbound-cidrs da etapa de implantação restringe o listener à sua rede corporativa, e o grupo de segurança do banco de dados admite o grupo de segurança do cluster em vez de $GW_SG.
2

Crie as funções IAM e envie o formulário de caso de uso

O gateway é executado com uma função de tarefa dedicada cuja única permissão é invocar modelos Claude no Bedrock. De acordo com a referência de upstream Bedrock, a política deve cobrir tanto os ARNs de perfil de inferência entre regiões quanto os ARNs de modelo de fundação subjacentes:
ECS também precisa de uma função de execução, que o próprio agente ECS usa para extrair a imagem do ECR e injetar os valores do Secrets Manager criados posteriormente. É separada da função de tarefa que o AWS SDK do gateway usa em tempo de execução:
A política nomeia um ARN por segredo em vez de um curinga simples gateway-*, que em uma conta compartilhada também corresponderia a segredos não relacionados; o sufixo -?????? à direita corresponde exatamente aos seis caracteres aleatórios que o Secrets Manager anexa ao ARN de cada segredo. Um -* à direita seria um glob de prefixo simples e também corresponderia a nomes mais longos como gateway-postgres-url-prod.A política IAM concede ao gateway permissão para chamar Bedrock, e Bedrock habilita acesso ao modelo por padrão em regiões comerciais. O portão de nível de conta restante é o formulário de caso de uso único da Anthropic: se ninguém em sua conta o enviou, abra o console Amazon Bedrock, selecione um modelo Anthropic no catálogo de modelos e preencha o formulário. O acesso é concedido imediatamente após o envio; consulte Claude Code no Amazon Bedrock para o formulário AWS Organizations e as permissões IAM que o remetente precisa.A trilha EKS reutiliza ambos os documentos de política em uma função IRSA em vez das duas funções ECS; consulte a etapa de implantação.
3

Provisione Amazon RDS para PostgreSQL

A instância é executada nas subnets privadas sem endereço público e com criptografia de armazenamento ativada. A versão do mecanismo é fixada em Postgres 16, que satisfaz o piso suportado do gateway de PostgreSQL 14 e garante que a família do grupo de parâmetros abaixo corresponda à instância.Primeiro, crie o grupo de subnets que coloca o banco de dados nas subnets privadas e um grupo de parâmetros com rds.force_ssl=1 para que o servidor rejeite conexões em texto simples. A versão do mecanismo é fixada uma vez porque a família do grupo de parâmetros deve corresponder à versão principal do mecanismo que a instância executa:
Depois crie a instância com uma senha mestre gerada:
O argumento literal --master-user-password é visível na tabela de processos e nos logs de auditoria/EDR enquanto o comando é executado, a mesma exposição que a nota da etapa de segredos cobre. Em um host compartilhado ou monitorado, passe a senha via --cli-input-json de um arquivo 0600 em vez disso, da forma que o setup.sh do pacote faz.Aguarde a instância ficar ativa, o que pode levar vários minutos, depois leia seu endpoint privado e monte a string de conexão que o gateway usará:
sslmode=verify-full faz o gateway verificar a cadeia do certificado do servidor RDS e o nome do host, não apenas criptografar. A âncora de confiança é o pacote de certificados AWS RDS, que a etapa de construção de imagem abaixo copia para /etc/claude/rds-global-bundle.pem e confia via NODE_EXTRA_CA_CERTS. Não anexe um parâmetro sslrootcert= no estilo libpq à URL: o driver do gateway lê apenas sslmode da string de consulta e encaminharia sslrootcert para o Postgres como um parâmetro de inicialização, que o servidor rejeita.O serviço ECS ou os pods EKS devem ser executados nesta VPC para que possam alcançar o endpoint privado da instância, e o grupo de segurança claude-gateway-db apenas admite o grupo de segurança do gateway.
4

Escreva gateway.yaml

O bloco upstreams aponta para Bedrock com auth: {}, portanto o gateway se autentica via a cadeia de credenciais padrão AWS da função de tarefa no ECS ou da função IRSA no EKS. Consulte a referência de configuração para cada campo.Dois campos listen descrevem o que está na frente do gateway:
  • public_url: a origem https:// externa, obrigatória para qualquer bind não-loopback; consulte a referência listen. O gateway constrói o redirect_uri do IdP e seu documento de descoberta apenas a partir deste valor, nunca a partir de cabeçalhos X-Forwarded-*.
  • trusted_proxies: os intervalos de origem do front-end. O gateway honra X-Forwarded-For apenas quando o par TCP está nesta lista, depois percorre a cadeia passando hops confiáveis, portanto os limites de taxa de login por IP e os eventos de auditoria registram IPs de desenvolvedores em vez do balanceador de carga.
Em ambas as trilhas o front-end é um ALB interno, seja criado diretamente ou pelo AWS Load Balancer Controller, e os nós de um ALB recebem endereços das subnets às quais está anexado, portanto defina trusted_proxies para os CIDRs dessas subnets. Isso confia em cada host nessas subnets como um proxy. Evite que a origem de ingresso do ALB, seu CIDR corporativo, se sobreponha a eles, e não compartilhe as subnets com cargas de trabalho não confiáveis que possam falsificar IPs de cliente via X-Forwarded-For.O atributo de preservação de porta de cliente do ALB, routing.http.xff_client_port.enabled, pode permanecer em qualquer configuração: com ele ativado, o ALB escreve o cliente como 203.0.113.7:54321 ou [2001:db8::1]:54321, e o gateway lê ambos com a porta descartada.
gateway.yaml
Apenas o bloco oidc é específico do Okta. Para usar Microsoft Entra ID em vez disso, defina issuer para https://login.microsoftonline.com/<tenant-id>/v2.0, remova userinfo_fallback e o escopo groups, e observe que Entra emite IDs de Objeto de grupo em vez de nomes, portanto managed.policies deve corresponder aos GUIDs, ou em App Roles com oidc.groups_claim: roles. Consulte Configuração do provedor de identidade.
5

Armazene segredos no AWS Secrets Manager

Crie três segredos; a função de execução da etapa IAM já pode lê-los:
Observe o ARN que cada chamada imprime; a definição de tarefa ECS referencia segredos por ARN.
Argumentos literais --secret-string são visíveis na tabela de processos e nos logs de auditoria/EDR enquanto cada comando é executado. Em um host compartilhado ou monitorado, coloque o valor em um arquivo 0600 e passe --secret-string file://<path> em vez disso. O setup.sh do pacote mantém valores de segredo fora do argv do processo da mesma forma, passando arquivos temporários 0600 para --cli-input-json.
Ao contrário dos segredos, o próprio gateway.yaml não contém valores de segredo, porque cada credencial é resolvida na inicialização através da expansão ${VAR} ou ${file:...}. Como tudo chega ao contêiner difere por trilha:
  • No ECS, a etapa seguinte copia gateway.yaml na imagem em /etc/claude/gateway.yaml, e a definição de tarefa injeta os três segredos como variáveis de ambiente via seu campo secrets, portanto o YAML referencia ${GATEWAY_JWT_SECRET}, ${OIDC_CLIENT_SECRET} e ${GATEWAY_POSTGRES_URL}.
  • No EKS, monte gateway.yaml de um ConfigMap e os segredos como arquivos em /secrets, referenciados como ${file:/secrets/...}. Obtenha os Kubernetes Secrets do Secrets Manager com External Secrets Operator ou o provedor AWS do driver CSI Secrets Store, ou crie-os diretamente com kubectl.
6

Construa e envie a imagem para Amazon ECR

Construa a imagem de acordo com os requisitos de imagem de contêiner, colocando o binário glibc linux-x64 em ./claude no contexto de construção. Escreva seu próprio Dockerfile de acordo com esses requisitos ou comece com o Dockerfile do pacote, que copia o gateway.yaml preenchido das etapas anteriores na imagem em /etc/claude/gateway.yaml. No ECS essa cópia incorporada é como a configuração chega ao contêiner, razão pela qual a construção vem após o arquivo ser escrito. A trilha EKS em vez disso monta gateway.yaml de um ConfigMap na implantação, portanto a cópia incorporada não é usada lá.A imagem também carrega o pacote de certificados AWS RDS como a âncora de confiança para a string de conexão sslmode=verify-full, portanto baixe-o no contexto de construção primeiro. AWS rotaciona o pacote (novas CAs regionais são anexadas), portanto baixe-o por construção em vez de fixar um checksum ou confirmá-lo:
Os requisitos de imagem de contêiner não cobrem o pacote, portanto se você escrever seu próprio Dockerfile, adicione as duas linhas que copiam e confiam nele; o Dockerfile do pacote já inclui ambas:
Crie o repositório ECR e faça login do Docker nele. Tags imutáveis significam que a tag <version> que a etapa de implantação fixa não pode ser posteriormente apontada silenciosamente para uma imagem diferente:
Construa e envie a imagem. A definição de tarefa abaixo executa linux/amd64, portanto a plataforma deve corresponder aqui; para Fargate em ARM64 (Graviton), construa linux/arm64 com o binário linux-arm64 e defina cpuArchitecture para ARM64 em vez disso:
7

Implante

Crie o cluster e um grupo de logs para stderr do gateway, que carrega seus eventos de auditoria e logs operacionais. A retenção é uma chamada separada, e sem uma CloudWatch mantém os logs para sempre; alinhe os 90 dias com sua política de retenção de auditoria:
Escreva a definição de tarefa. A função de tarefa carrega a permissão Bedrock e a função de execução injeta os segredos; use os ARNs de segredo da etapa Secrets Manager:
claude-gateway-task.json
Registre-a:
Coloque um ALB interno na frente com um grupo de destino que verifica a saúde do gateway. --ip-address-type ipv4 importa: um ALB dual-stack interno publica registros AAAA de intervalo público, que a verificação de rede privada /login rejeita:
Adicione o listener HTTPS. --ssl-policy fixa um piso TLS moderno, pois omiti-lo volta para o padrão legado ELBSecurityPolicy-2016-08, que ainda aceita TLS 1.0/1.1.O ALB fecha uma conexão após 60 segundos sem dados por padrão. Os pings de keepalive do gateway mantêm streams dentro desse padrão, portanto aumentar o tempo limite adiciona margem acima da cadência de ping; a linha Troubleshooting em streams descartados cobre o mecanismo e gateways mais antigos. Os comandos abaixo adicionam o listener e aumentam o tempo limite:
Crie o serviço. O disjuntor de implantação reverte uma implantação cujas tarefas continuam falhando, de uma imagem ruim ou uma configuração não inicializável, para o último estado estável em vez de relançar tarefas falhando para sempre:
O período de graça de 60 segundos dá a uma tarefa fria tempo para extrair a imagem, conectar ao store e responder sua primeira verificação de saúde antes de ECS começar a contar falhas contra a implantação. A verificação de saúde do grupo de destino em GET /readyz verifica se o store é acessível, portanto uma tarefa que não consegue alcançar Postgres nunca entra em rotação; consulte Comportamento de interrupção para o tradeoff e a alternativa /healthz.As tarefas são executadas em subnets privadas sem IP público, portanto toda saída (para Bedrock, seu IdP, Secrets Manager, ECR e CloudWatch Logs) passa pelo gateway NAT. Para manter o tráfego Bedrock fora do caminho público, crie um endpoint VPC de interface bedrock-runtime e aponte o base_url do upstream para ele, conforme mostrado na referência de upstream Bedrock; o IdP ainda precisa de saída de internet.Termine dando aos desenvolvedores um nome de host privadamente resolvível: em uma zona hospedada privada Route 53, alias o nome DNS interno do gateway para o ALB e defina listen.public_url para esse nome de host. O próprio nome *.elb.amazonaws.com do ALB resolve para endereços privados em um ALB interno, mas não pode carregar seu certificado ACM, portanto use seu próprio nome.Atualize o URI de redirecionamento autorizado do cliente OAuth para <public_url>/oauth/callback antes do primeiro login. Após alterar public_url, reconstrua e envie a imagem sob uma nova tag, registre uma nova revisão de definição de tarefa e reimplante. No ECS a configuração vive no gateway.yaml incorporado da imagem, e o gateway constrói sua origem pública apenas a partir dessa configuração, ignorando X-Forwarded-Host e X-Forwarded-Proto. X-Forwarded-For é honrado para IPs de cliente apenas quando listen.trusted_proxies é definido.
8

Envie a URL do gateway para máquinas de desenvolvedores

O gateway agora está em execução, mas os desenvolvedores não conseguem alcançá-lo de /login até que a URL do gateway esteja em suas máquinas. Defina forceLoginMethod e forceLoginGatewayUrl no arquivo de configurações gerenciadas que você implanta em cada dispositivo via MDM. Não há opção de gateway no seletor de login para um desenvolvedor selecionar manualmente.

Referência Terraform

O pacote complementar em examples/gateway/aws empacota esta página como código:
  • setup.sh roteiriza o passo a passo de provisionamento acima com os mesmos comandos aws, na trilha ECS Fargate. É idempotente: recursos existentes são detectados e pulados, portanto re-executá-lo é seguro, e qualquer padrão pode ser substituído via variável de ambiente. Você ainda cria o segredo do cliente OIDC Okta e o certificado ACM você mesmo: uma execução sem eles pula a implantação ECS/ALB, nomeia as entradas ausentes e imprime o comando create-secret; crie ambos e re-execute. O formulário de caso de uso Bedrock e o alias Route 53 imprimem como próximas etapas em vez de executar automaticamente, e o push MDM do cliente permanece uma etapa manual desta página.
  • gateway.yaml.example é o modelo de configuração da etapa gateway.yaml, com as chaves opcionais incluídas comentadas. Copie-o para gateway.yaml e substitua cada REPLACE_ME antes de construir.
  • Dockerfile constrói a imagem de tempo de execução a partir do binário pré-construído linux-x64 e copia seu gateway.yaml preenchido em /etc/claude/gateway.yaml, mais o pacote de certificados AWS RDS que ancora o sslmode=verify-full do store. setup.sh baixa o pacote apenas quando ele não está já no contexto de construção; delete o arquivo e reconstrua sob uma nova tag para pegar uma rotação de CA AWS. O arquivo de configuração não contém valores de segredo, pois cada credencial é resolvida na inicialização através da expansão ${VAR}. Uma edição de configuração portanto significa uma reconstrução sob uma nova tag; setup.sh automatiza isso marcando imagens com um hash do arquivo.
  • terraform/ provisiona o mesmo escopo ECS Fargate declarativamente: os grupos de segurança, funções IAM, repositório ECR, instância RDS, segredos Secrets Manager e o serviço ECS atrás do ALB interno. A VPC e subnets privadas permanecem pré-requisitos, passados como variáveis. Terraform cria o repositório ECR mas não constrói a imagem, e a definição de serviço referencia a imagem, portanto o apply é dois passes: um apply direcionado para o repositório, depois a construção e envio, depois o apply completo. O terraform/README.md do pacote cobre as variáveis, estado remoto e desmontagem.
Como esta página, o pacote é um exemplo funcional para infraestrutura gerenciada pelo cliente em vez de uma implantação de produção suportada; revise e adapte-o ao seu próprio ambiente antes de confiar nele.

Troubleshooting

Para erros de boot e login do gateway, consulte a tabela de troubleshooting independente de plataforma. As entradas abaixo são específicas da AWS.

Telemetria

O gateway oferece métricas de uso por desenvolvedor sem qualquer configuração OTEL por máquina. Claude Code emite métricas, logs e traces OpenTelemetry (OTLP) opcionais; Monitorar uso cobre tudo que o CLI relata. Em sessões de gateway o CLI carimba cada exportação com os atributos de identidade IdP autenticados user.id, user.email e user.groups, portanto o uso se acumula por desenvolvedor sem encanamento OTEL_RESOURCE_ATTRIBUTES. O gateway em si é um relé OTLP autenticado. Defina telemetry.forward_to junto com listen.public_url, e ele empurra as configurações do exportador OTEL para cada cliente conectado e encaminha seu tráfego OTLP verbatim para cada destino que você lista. Cada destino opta por métricas, logs e traces independentemente, e o padrão é apenas métricas; consulte a referência telemetry para os campos por sinal e seus tradeoffs de sensibilidade. O gateway não armazena em buffer, agrega ou armazena telemetria, portanto onde os dados chegam é inteiramente a configuração do exportador do coletor. A telemetria do cliente está desativada por padrão; configurar telemetry.forward_to é o que a ativa para desenvolvedores conectados, e cada cliente interativo mostra um diálogo de aprovação de segurança para as configurações empurradas, conforme descrito na referência de configuração. Na AWS, cada sinal mapeia para um destino da seguinte forma.

Métricas, logs e traces do cliente

Aponte telemetry.forward_to para um coletor OpenTelemetry, como o coletor AWS Distro for OpenTelemetry (ADOT), e exporte de lá para Amazon CloudWatch, Amazon Managed Service for Prometheus ou qualquer backend OTLP. Execute o coletor como seu próprio serviço interno acessível via https://; a referência telemetry cobre a exceção de loopback e CLAUDE_GATEWAY_ALLOW_LOOPBACK.

Logs do gateway

No ECS Fargate, sem configuração extra: o driver awslogs entrega stderr do gateway, que carrega seus eventos de auditoria e logs operacionais, para o grupo de logs /ecs/claude-gateway criado acima. No EKS, logs de pod não chegam ao CloudWatch por padrão, portanto a trilha de auditoria é perdida até você instalar coleta de logs: o complemento Amazon CloudWatch Observability com captura de log de contêiner ativada, ou um DaemonSet Fluent Bit. Em qualquer trilha, consulte os logs com CloudWatch Logs Insights e dirija alarmes de filtros de métrica.

Métricas de contêiner

Ative Container Insights no cluster com aws ecs update-cluster-settings --cluster claude-gateway --settings name=containerInsights,value=enabled para CPU, memória e rede por tarefa. No EKS, instale o complemento Amazon CloudWatch Observability.

Gasto

A telemetria mostra uso após o fato; limites de gasto são a visão ao vivo do gateway por desenvolvedor e aplicação sobre a credencial upstream compartilhada.

Próximas etapas