Architettura
L'architettura di esempio, con Amazon Bedrock come upstream del modello. Un upstream Claude Platform su AWS occupa la stessa posizione.
- Servizio Amazon ECS su AWS Fargate o Amazon EKS Deployment che esegue il contenitore del gateway
- Repository Amazon ECR per l’immagine del gateway
- Istanza Amazon RDS per PostgreSQL in subnet private, non accessibile pubblicamente, per lo store del gateway
- Segreti AWS Secrets Manager per la chiave di firma JWT, il segreto del client OIDC e l’URL di Postgres
- Ruolo IAM con
bedrock:InvokeModel,bedrock:InvokeModelWithResponseStreamebedrock:CountTokens, allegato come ruolo di attività ECS o associato tramite IAM Roles for Service Accounts (IRSA) su EKS - Application Load Balancer interno per HTTPS
Prerequisiti
La procedura dettagliata crea le risorse proprie del gateway, ma si basa su infrastrutture di rete e identità che già possedete. Prima di iniziare, avete bisogno di:- Un account AWS con autorizzazione per creare le risorse sopra
- AWS CLI v2 installata e autenticata, e Docker installato localmente
- Un VPC con almeno due subnet private in diverse zone di disponibilità, con accesso a Internet in uscita tramite un gateway NAT; il load balancer interno ha bisogno di subnet in due AZ e il gateway ha bisogno di uscita verso Bedrock e il vostro IdP
- Un’applicazione web OIDC Okta con URI di reindirizzamento
https://<gateway-host>/oauth/callback; consultate Configurazione del provider di identità - Un nome host TLS per il gateway, tipicamente un nome DNS interno in una zona ospitata privata Route 53 che punta al load balancer, con un certificato ACM per quel nome, importato o emesso da AWS Private CA
Impostare le variabili di ambiente
Ogni comando in questa pagina legge quattro valori dalla vostra shell:AWS_REGION, ACCOUNT_ID, VPC_ID e PRIVATE_SUBNETS.
Scegliete una regione US dove Bedrock serve i modelli Claude di cui avete bisogno. La procedura dettagliata si basa sul catalogo dei modelli integrato del gateway, che si risolve in profili di inferenza us.anthropic.*, e la politica IAM concede quegli ARN. In una regione non-US, aggiungete un blocco models: con gli ID del profilo di inferenza di quella geo e cambiate il prefisso ARN della politica IAM per corrispondere.
Se non avete l’ID VPC a portata di mano, elencate i vostri VPC con aws ec2 describe-vpcs, quindi elencate le subnet di quel VPC per trovare due private in diverse zone di disponibilità:
Distribuire il gateway
I passaggi seguenti eseguono il provisioning della distribuzione completa con comandiaws.
Creare i gruppi di sicurezza
- Su ECS Fargate, il passaggio di distribuzione allega
$ALB_SGal load balancer e$GW_SGal servizio. - Su EKS, AWS Load Balancer Controller crea il proprio gruppo di sicurezza frontend per l’ALB, quindi
$ALB_SGe$GW_SGnon vengono utilizzati: l’annotazioneinbound-cidrsdel passaggio di distribuzione limita il listener alla vostra rete aziendale e il gruppo di sicurezza del database ammette il gruppo di sicurezza del cluster al posto di$GW_SG.
Creare i ruoli IAM e inviare il modulo del caso d'uso
gateway-*, che in un account condiviso corrisponderebbe anche a segreti non correlati; il suffisso finale -?????? corrisponde esattamente al suffisso di sei caratteri casuale che Secrets Manager aggiunge all’ARN di ogni segreto. Un -* finale sarebbe un glob di prefisso semplice e corrisponderebbe anche a nomi più lunghi come gateway-postgres-url-prod.La politica IAM concede al gateway il permesso di chiamare Bedrock, e Bedrock abilita l’accesso al modello per impostazione predefinita nelle regioni commerciali. Il gate rimanente a livello di account è il modulo del caso d’uso una tantum di Anthropic: se nessuno nel vostro account lo ha inviato, aprite la console Amazon Bedrock, selezionate un modello Anthropic dal catalogo dei modelli e completate il modulo. L’accesso viene concesso immediatamente dopo l’invio; consultate Claude Code su Amazon Bedrock per il modulo AWS Organizations e i permessi IAM di cui il mittente ha bisogno.Il percorso EKS riutilizza entrambi i documenti della politica su un ruolo IRSA al posto dei due ruoli ECS; consultate il passaggio di distribuzione.Eseguire il provisioning di Amazon RDS per PostgreSQL
rds.force_ssl=1 in modo che il server rifiuti le connessioni in testo semplice. La versione del motore è fissata una volta perché la famiglia del gruppo di parametri deve corrispondere alla versione principale del motore che l’istanza esegue:--master-user-password è visibile nella tabella dei processi e nei log di audit/EDR mentre il comando viene eseguito, la stessa esposizione che la nota del passaggio dei segreti copre. Su un host condiviso o monitorato, passate la password tramite --cli-input-json da un file 0600 al posto, il modo in cui setup.sh del bundle lo fa.Attendete che l’istanza si avvii, il che può richiedere diversi minuti, quindi leggete il suo endpoint privato e assemblate la stringa di connessione che il gateway utilizzerà:sslmode=verify-full fa sì che il gateway verifichi la catena del certificato del server RDS e il nome host, non solo crittografare. L’ancora di fiducia è il bundle di certificati AWS RDS, che il passaggio di compilazione dell’immagine sottostante copia in /etc/claude/rds-global-bundle.pem e affida tramite NODE_EXTRA_CA_CERTS. Non aggiungete un parametro sslrootcert= in stile libpq all’URL: il driver del gateway legge solo sslmode dalla stringa di query e inoltrerebbe sslrootcert a Postgres come parametro di avvio, che il server rifiuta.Il servizio ECS o i pod EKS devono essere eseguiti in questo VPC in modo che possano raggiungere l’endpoint privato dell’istanza, e il gruppo di sicurezza claude-gateway-db ammette solo il gruppo di sicurezza del gateway.Scrivere gateway.yaml
upstreams punta a Bedrock con auth: {}, quindi il gateway si autentica tramite la catena di credenziali predefinita di AWS dal ruolo di attività su ECS o dal ruolo IRSA su EKS. Consultate il riferimento di configurazione per ogni campo.Due campi listen descrivono cosa sta davanti al gateway:public_url: l’origine esternahttps://, obbligatoria per qualsiasi bind non-loopback; consultate il riferimentolisten. Il gateway costruisce l’redirect_uridell’IdP e il suo documento di scoperta solo da questo valore, mai da intestazioniX-Forwarded-*.trusted_proxies: gli intervalli di origine del front end. Il gateway onoraX-Forwarded-Forsolo quando il peer TCP è in questo elenco, quindi cammina nella catena oltre i hop affidabili, in modo che i limiti di velocità di accesso per IP e gli eventi di audit registrino gli IP degli sviluppatori al posto di quello del load balancer.
trusted_proxies ai CIDR di quelle subnet. Questo affida ogni host in quelle subnet come proxy. Evitate che l’origine di ingresso dell’ALB, il vostro CIDR aziendale, si sovrapponga ad essi, e non condividete le subnet con carichi di lavoro non affidabili che potrebbero falsificare gli IP dei client tramite X-Forwarded-For.L’attributo di conservazione del client port dell’ALB, routing.http.xff_client_port.enabled, può rimanere a entrambe le impostazioni: con esso attivato, l’ALB scrive il client come 203.0.113.7:54321 o [2001:db8::1]:54321, e il gateway legge entrambi con la porta eliminata.oidc è specifico di Okta. Per utilizzare Microsoft Entra ID al posto, impostate issuer su https://login.microsoftonline.com/<tenant-id>/v2.0, eliminate userinfo_fallback e lo scope groups, e notate che Entra emette Object ID dei gruppi piuttosto che nomi, quindi managed.policies deve corrispondere ai GUID, o su App Roles con oidc.groups_claim: roles. Consultate Configurazione del provider di identità.Archiviare i segreti in AWS Secrets Manager
--secret-string sono visibili nella tabella dei processi e nei log di audit/EDR mentre ogni comando viene eseguito. Su un host condiviso o monitorato, mettete il valore in un file 0600 e passate --secret-string file://<path> al posto. setup.sh del bundle mantiene i valori dei segreti fuori da argv del processo allo stesso modo, passando file temporanei 0600 a --cli-input-json.gateway.yaml stesso non contiene valori segreti, perché ogni credenziale si risolve all’avvio tramite l’espansione ${VAR} o ${file:...}. Come tutto raggiunge il contenitore differisce per percorso:- Su ECS, il passaggio di compilazione successivo copia
gateway.yamlnell’immagine a/etc/claude/gateway.yaml, e la definizione di attività inietta i tre segreti come variabili di ambiente tramite il suo camposecrets, quindi lo YAML fa riferimento a${GATEWAY_JWT_SECRET},${OIDC_CLIENT_SECRET}e${GATEWAY_POSTGRES_URL}. - Su EKS, montate
gateway.yamlda una ConfigMap e i segreti come file a/secrets, referenziati come${file:/secrets/...}. Originare i Kubernetes Secrets da Secrets Manager con External Secrets Operator o il provider AWS del driver CSI Secrets Store, o crearli direttamente conkubectl.
Compilare e spingere l'immagine ad Amazon ECR
linux-x64 a ./claude nel contesto di compilazione. Scrivete il vostro Dockerfile secondo questi requisiti o iniziate dal Dockerfile del bundle, che copia il gateway.yaml compilato dai passaggi precedenti nell’immagine a /etc/claude/gateway.yaml. Su ECS quella copia incorporata è come la configurazione raggiunge il contenitore, motivo per cui la compilazione viene dopo che il file è stato scritto. Il percorso EKS al posto monta gateway.yaml da una ConfigMap al momento della distribuzione, quindi la copia incorporata non viene utilizzata lì.L’immagine porta anche il bundle di certificati AWS RDS come ancora di fiducia per la stringa di connessione sslmode=verify-full, quindi scaricatelo nel contesto di compilazione per primo. AWS ruota il bundle (nuove CA regionali vengono aggiunte), quindi scaricatelo per compilazione piuttosto che fissare un checksum o impegnarlo:Dockerfile del bundle include già entrambi:<version> che il passaggio di distribuzione fissa non può essere successivamente reindirizzato silenziosamente a un’immagine diversa:linux/amd64, quindi la piattaforma deve corrispondere qui; per Fargate su ARM64 (Graviton), compilate linux/arm64 con il binario linux-arm64 e impostate cpuArchitecture su ARM64 al posto:Distribuire
- ECS Fargate
- EKS
--ip-address-type ipv4 è importante: un ALB interno dual-stack pubblica record AAAA di intervallo pubblico, che il controllo della rete privata /login rifiuta:--ssl-policy fissa un limite TLS moderno, poiché ometterlo ricade nella politica predefinita legacy ELBSecurityPolicy-2016-08, che ancora accetta TLS 1.0/1.1.L’ALB chiude una connessione dopo 60 secondi senza dati per impostazione predefinita. I ping di keepalive del gateway mantengono i flussi entro quel default, quindi aumentare il timeout aggiunge margine sopra la cadenza del ping; la riga Troubleshooting sui flussi interrotti copre il meccanismo e i gateway più vecchi. I comandi sottostanti aggiungono il listener e aumentano il timeout:GET /readyz verifica che lo store sia raggiungibile, quindi un’attività che non può raggiungere Postgres non entra mai in rotazione; consultate Comportamento di interruzione per il compromesso e l’alternativa /healthz.Le attività vengono eseguite in subnet private senza IP pubblico, quindi tutto l’egresso (verso Bedrock, il vostro IdP, Secrets Manager, ECR e CloudWatch Logs) passa attraverso il gateway NAT. Per mantenere il traffico Bedrock fuori dal percorso pubblico, create un endpoint VPC dell’interfaccia bedrock-runtime e puntate l’base_url dell’upstream ad esso, come mostrato nel riferimento upstream Bedrock; l’IdP ha ancora bisogno di uscita a Internet.Finite dando agli sviluppatori un nome host risolvibile privatamente: in una zona ospitata privata Route 53, alias il nome DNS interno del gateway all’ALB, e impostate listen.public_url a quel nome host. Il nome *.elb.amazonaws.com dell’ALB stesso si risolve in indirizzi privati su un ALB interno, ma non può portare il vostro certificato ACM, quindi utilizzate il vostro nome.Aggiornate l’URI di reindirizzamento autorizzato del client OAuth a <public_url>/oauth/callback prima del primo accesso. Dopo aver cambiato public_url, ricompilate e spingete l’immagine sotto un nuovo tag, registrate una nuova revisione della definizione di attività e ridistribuite. Su ECS l’impostazione vive nel gateway.yaml incorporato dell’immagine, e il gateway costruisce la sua origine pubblica solo da quell’impostazione, ignorando X-Forwarded-Host e X-Forwarded-Proto. X-Forwarded-For è onorato per gli IP dei client solo quando listen.trusted_proxies è impostato.Spingere l'URL del gateway alle macchine degli sviluppatori
/login fino a quando l’URL del gateway non è sulle loro macchine. Impostate forceLoginMethod e forceLoginGatewayUrl nel file delle impostazioni gestite che distribuite a ogni dispositivo tramite MDM. Non c’è opzione di gateway nel selettore di accesso per uno sviluppatore da selezionare manualmente.Riferimento Terraform
Il bundle complementare aexamples/gateway/aws pacchetti questa pagina come codice:
setup.shscript la procedura dettagliata di provisioning sopra con gli stessi comandiaws, sul percorso ECS Fargate. È idempotente: le risorse esistenti vengono rilevate e saltate, quindi rieseguirlo è sicuro, e qualsiasi default può essere sovrascritto tramite variabile di ambiente. Voi create comunque il segreto del client OIDC Okta e il certificato ACM voi stessi: un’esecuzione senza di essi salta la distribuzione ECS/ALB, nomina gli input mancanti e stampa il comandocreate-secret; create entrambi e rieseguite. Il modulo del caso d’uso Bedrock e l’alias Route 53 vengono stampati come passaggi successivi piuttosto che eseguiti automaticamente, e il push MDM del client rimane un passaggio manuale da questa pagina.gateway.yaml.exampleè il modello di configurazione dal passaggio gateway.yaml, con le chiavi opzionali incluse commentate. Copiatelo ingateway.yamle sostituite ogniREPLACE_MEprima di compilare.Dockerfilecompila l’immagine di runtime dal binario precompilatolinux-x64e copia il vostrogateway.yamlcompilato a/etc/claude/gateway.yaml, più il bundle di certificati AWS RDS che ancora la connessionesslmode=verify-fulldello store.setup.shscarica il bundle solo quando non è già nel contesto di compilazione; eliminate il file e ricompilate sotto un nuovo tag per raccogliere una rotazione CA di AWS. Il file di configurazione non contiene valori segreti, poiché ogni credenziale si risolve all’avvio tramite l’espansione${VAR}. Una modifica della configurazione quindi significa una ricompilazione sotto un nuovo tag;setup.shautomatizza questo taggando le immagini con un hash del file.terraform/esegue il provisioning dello stesso ambito ECS Fargate in modo dichiarativo: i gruppi di sicurezza, i ruoli IAM, il repository ECR, l’istanza RDS, i segreti di Secrets Manager e il servizio ECS dietro l’ALB interno. Il VPC e le subnet private rimangono prerequisiti, passati come variabili. Terraform crea il repository ECR ma non compila l’immagine, e la definizione del servizio fa riferimento all’immagine, quindi l’apply è due passaggi: un apply mirato per il repository, quindi la compilazione e il push, quindi l’apply completo. Ilterraform/README.mddel bundle copre le variabili, lo stato remoto e lo smantellamento.
Troubleshooting
Per gli errori di avvio del gateway e di accesso, consultate la tabella di troubleshooting indipendente dalla piattaforma. Le voci sottostanti sono specifiche di AWS.Telemetria
Il gateway vi fornisce metriche di utilizzo per sviluppatore senza alcuna configurazione OTEL per macchina. Claude Code emette metriche, log e tracce OpenTelemetry (OTLP) opt-in; Monitoraggio dell’utilizzo copre tutto ciò che il CLI segnala. Sulle sessioni del gateway il CLI marca ogni esportazione con gli attributi di identità IdP autenticatiuser.id, user.email e user.groups, quindi l’utilizzo si accumula per sviluppatore senza alcun plumbing OTEL_RESOURCE_ATTRIBUTES.
Il gateway stesso è un relè OTLP autenticato. Impostate telemetry.forward_to insieme a listen.public_url, e spinge le impostazioni dell’esportatore OTEL a ogni client connesso e inoltra il loro traffico OTLP verbatim a ogni destinazione che elencate. Ogni destinazione opta per metriche, log e tracce indipendentemente, e l’impostazione predefinita è solo metriche; consultate il riferimento telemetry per i campi per segnale e i loro compromessi di sensibilità. Il gateway non memorizza nel buffer, aggrega o archivia la telemetria, quindi dove i dati finiscono è interamente la configurazione dell’esportatore del collettore.
La telemetria del client è disattivata per impostazione predefinita; configurare telemetry.forward_to è ciò che la attiva per gli sviluppatori connessi, e ogni client interattivo mostra una finestra di dialogo di approvazione della sicurezza una tantum per le impostazioni spinte, come descritto nel riferimento di configurazione. Su AWS, ogni segnale mappa a una destinazione come segue.
Metriche, log e tracce del client
Puntatetelemetry.forward_to a un collettore OpenTelemetry, come il collettore AWS Distro for OpenTelemetry (ADOT), ed esportate da lì ad Amazon CloudWatch, Amazon Managed Service for Prometheus, o qualsiasi backend OTLP.
Eseguite il collettore come suo proprio servizio interno raggiungibile su https://; il riferimento telemetry copre l’eccezione di loopback e CLAUDE_GATEWAY_ALLOW_LOOPBACK.
Log del gateway
Su ECS Fargate, nessuna configurazione extra: il driverawslogs consegna stderr del gateway, che porta i suoi eventi di audit e log operazionali, al gruppo di log /ecs/claude-gateway creato sopra. Su EKS, i log dei pod non raggiungono CloudWatch per impostazione predefinita, quindi la traccia di audit viene persa fino a quando non installate la raccolta dei log: il componente aggiuntivo Amazon CloudWatch Observability con acquisizione dei log del contenitore abilitata, o un DaemonSet Fluent Bit. Su entrambi i percorsi, interrogate i log con CloudWatch Logs Insights e guidate gli allarmi dai filtri delle metriche.
Metriche del contenitore
Abilitate Container Insights sul cluster conaws ecs update-cluster-settings --cluster claude-gateway --settings name=containerInsights,value=enabled per CPU, memoria e rete per attività. Su EKS, installate il componente aggiuntivo Amazon CloudWatch Observability.
Spesa
La telemetria mostra l’utilizzo dopo il fatto; i limiti di spesa sono la vista live del gateway per sviluppatore e l’applicazione sulla credenziale upstream condivisa.Passaggi successivi
- Riferimento di configurazione: ogni opzione
gateway.yaml, inclusimanaged.policiesetelemetry - Distribuzione e operazioni: configurazione IdP, controlli di stato, rotazione della chiave segreta JWT, aggiornamenti e il modello di sicurezza
- Panoramica del gateway delle app Claude: quickstart e connessione degli sviluppatori
- Esempi AWS per il gateway delle app Claude: esempi di distribuzione mantenuti da AWS che coprono una gamma di ambienti dei clienti