Diese Seite zeigt eine Möglichkeit, Claude-Apps-Gateway auf Google Cloud auszuführen. Die Konfiguration ist ein funktionierendes Beispiel für kundenverwaltete Infrastruktur und keine unterstützte Produktionsbereitstellung. Verwenden Sie sie, um zu verstehen, wie die einzelnen Komponenten zusammenpassen, bevor Sie sie an Ihre eigene Umgebung anpassen. Für die plattformunabhängigen Anforderungen siehe den Bereitstellungsleitfaden.
oidc-Block ändert sich. Siehe Identitätsanbieter-Setup für IdP-spezifische Details.
Was Sie erstellen werden
- Cloud Run-Service oder GKE-Deployment mit dem Gateway-Container
- Artifact Registry-Repository für das Gateway-Image
- Cloud SQL für PostgreSQL-Instanz, nur private IP, für den Store des Gateways
- Secret Manager-Geheimnisse für
gateway.yaml, den JWT-Signaturschlüssel, das OIDC-Client-Geheimnis und die Postgres-URL - Service Account mit
roles/aiplatform.user, direkt auf Cloud Run angehängt oder über Workload Identity auf GKE gebunden - Interner Application Load Balancer auf Cloud Run oder ein interner GKE Ingress der Klasse
gce-internalauf GKE für HTTPS
Voraussetzungen
- Ein GCP-Projekt mit aktivierter Abrechnung und Berechtigung zum Erstellen der oben genannten Ressourcen
- Die
gcloud-CLI, authentifiziert mitgcloud auth login, und Docker lokal installiert - Für den GKE-Pfad:
kubectlund ein GKE-Cluster auf dem VPC, der in der folgenden Anleitung erstellt wird - Zugriff auf die Claude-Modelle, die Sie benötigen, in Model Garden, in einer Region, die sie veröffentlicht
- Ein Google Workspace OAuth 2.0-Webanwendungs-Client mit Umleitungs-URI
https://<gateway-host>/oauth/callback. Siehe Identitätsanbieter-Setup - Ein TLS-Hostname für das Gateway, typischerweise ein interner DNS-Name, der auf den Load Balancer verweist
Gateway bereitstellen
Die folgenden Schritte stellen die vollständige Bereitstellung mitgcloud-Befehlen bereit.
APIs aktivieren
Aktivieren Sie die Service-APIs, die die Anleitung verwendet:Die APIs, die Sie benötigen, hängen vom Bereitstellungspfad ab:
computeundservicenetworking: erforderlich für den privaten IP-Cloud-SQL-Pfadrun: nur Cloud Runcontainer: nur GKE
Service Account erstellen und IAM-Berechtigung erteilen
Das Gateway wird als dedizierter Service Account ausgeführt, der die Berechtigung hat, Agent Platform aufzurufen. Es erreicht Cloud SQL über das VPC mit einem Passwort-Benutzer, daher ist keine Cloud SQL IAM-Rolle erforderlich:Aktivieren Sie dann die Claude-Modelle für das Projekt in Model Garden. Modelle werden in bestimmten Regionen veröffentlicht, überprüfen Sie daher jede Modellkarte.
Image erstellen und in Artifact Registry pushen
Erstellen Sie das Image gemäß den Container-Image-Anforderungen mit der
linux-x64 glibc-Binärdatei und pushen Sie es:Cloud SQL für PostgreSQL bereitstellen
Erstellen Sie die Instanz auf einem VPC über Private Services Access, damit sie keine öffentliche IP hat. Dies erfüllt auch Projekte, bei denen Die Cloud Run- oder GKE-Laufzeit muss sich auf diesem VPC befinden oder in ihn geroutet werden.
constraints/sql.restrictPublicIp erzwungen wird:gateway.yaml schreiben
Der
Das folgende Beispiel verwendet die Werte des internen-Load-Balancers-vor-Cloud-Run.
upstreams-Block verweist auf Agent Platform mit auth: {}, sodass sich das Gateway über Application Default Credentials vom Runtime-Service-Account authentifiziert. Siehe die Konfigurationsreferenz für jedes Feld.Zwei listen-Felder hängen davon ab, was das Gateway frontet:public_url: erforderlich hinter Cloud Run oder einem GKE Ingress. Das Gateway erstellt die IdPredirect_uriund sein Erkennungsdokument nur aus diesem Wert, niemals ausX-Forwarded-*-Headern.trusted_proxies: die Quellbereiche des Front-End. Das Gateway berücksichtigtX-Forwarded-Fornur, wenn der TCP-Peer in dieser Liste ist, durchläuft dann die Kette über vertrauenswürdige Hops, sodass Anmelderate-Limits pro IP und Audit-Events Entwickler-IPs statt der IP des Load Balancers aufzeichnen.
trusted_proxies fest, um Ihr Front-End zu entsprechen. Ein externer GKE Ingress der Klasse gce ist nicht aufgelistet: Er stellt eine öffentliche Forwarding-Rule-Adresse bereit, die die /login Private-Network-Prüfung ablehnt.| Front-End | trusted_proxies |
|---|---|
| Cloud Run direkt erreicht, kein Load Balancer | [169.254.0.0/16] |
| Interner Application Load Balancer vor Cloud Run | 169.254.0.0/16 plus CIDR Ihres Proxy-Only-Subnetzes |
GKE interner Ingress, Klasse gce-internal | CIDR Ihres Proxy-Only-Subnetzes |
gateway.yaml
Google id_tokens enthalten keinen
groups-Anspruch. Um gruppenbasierte Richtlinien in managed.policies mit Google Workspace als IdP zu verwenden, konfigurieren Sie oidc.google_groups, das die Gruppen jedes Benutzers über die Admin SDK Directory API mit einem Service Account mit Domain-Wide Delegation nachschlägt. Ohne dies müssen Sie stattdessen auf email_domain abgleichen.Geheimnisse in Secret Manager speichern
Erstellen Sie vier Geheimnisse und erteilen Sie
Wie die Geheimnisse den Container erreichen, unterscheidet sich je nach Pfad:
roles/secretmanager.secretAccessor dem claude-gateway-Service-Account:| Geheimnis | Quelle |
|---|---|
gateway-jwt-secret | openssl rand -base64 32 |
gateway-oidc-client-secret | Google Cloud Console → OAuth-Client |
gateway-postgres-url | $GATEWAY_POSTGRES_URL aus dem Cloud SQL-Schritt |
gateway-config | die vollständige gateway.yaml aus dem vorherigen Schritt |
- Auf GKE werden sie über den Secret Manager CSI-Treiber als Dateien unter
/secretsbereitgestellt, undgateway.yamlverweist auf${file:/secrets/...}. - Auf Cloud Run, das mehrere Geheimnisse nicht in ein Verzeichnis einbinden kann, wird
gateway.yamlals Datei bereitgestellt und die anderen drei werden als Umgebungsvariablen eingespritzt, sodassgateway.yamlstattdessen auf${GATEWAY_JWT_SECRET},${OIDC_CLIENT_SECRET}und${GATEWAY_POSTGRES_URL}verweist.
Bereitstellen
- Cloud Run
- GKE
Der folgende Befehl stellt für die Produktion hinter einem internen Load Balancer bereit.Direkte VPC-Egress über
--network, --subnet und --vpc-egress=private-ranges-only ermöglicht dem Service, die private IP von Cloud SQL direkt zu erreichen. Öffentliche Egress zu den Agent Platform-Endpunkten und accounts.google.com geht direkt ins Internet statt durch das VPC, daher ist keine Cloud NAT erforderlich.Die Invoker IAM-Prüfung muss offen oder deaktiviert sein. Das Gateway führt sein eigenes OIDC aus und seine Clients tragen kein GCP-Token, daher muss die Cloud Run Invoker-Prüfung unauthentifizierte Anfragen zulassen. Die OIDC-Anmeldung des Gateways authentifiziert die Anfrage, sobald sie den Container erreicht, wobei allowed_email_domains bestimmt, welche Domains sich anmelden dürfen.Zwei Flags lassen unauthentifizierte Anfragen zu:--no-invoker-iam-check: deaktiviert die Prüfung ohneallUsers-Bindung zum Verwalten und funktioniert unter Domain Restricted Sharing--allow-unauthenticated: erteiltallUsersdierun.invoker-Rolle. Verwenden Sie dies, wenn Ihre Organisation--no-invoker-iam-checknicht zulässt
--ingress ist eine separate, unabhängige Schicht von der Invoker-Prüfung. Halten Sie sie aktiviert, um den Service auf Ihr Unternehmensnetzwerk zu beschränken.Standardmäßig wird die Cloud Run *.run.app-URL zu einer öffentlichen Adresse aufgelöst, die die /login Private-Network-Prüfung ablehnt. Zwei Topologien geben Entwicklern einen privat auflösbaren Hostnamen, und Cloud Run stellt keinen für Sie bereit:- Interner Application Load Balancer, die Topologie, die der obige Deploy-Befehl annimmt: Stellen Sie mit
--ingress=internal-and-cloud-load-balancingbereit, stellen Sie einen internen Application Load Balancer vor dem Service mit einem internen DNS-Namen und Zertifikat bereit, und legen Sielisten.public_urlauf diesen Hostnamen fest. - Nur interne Ingress ohne Load Balancer: Stellen Sie mit
--ingress=internalbereit und lassen Sielisten.public_urlals*.run.app-URL, die Standardeinstellung in den Referenz-Assets unten. Damit*.run.appprivat aufgelöst wird, muss Ihr Netzwerk-Team bereits einen Private Service Connect-Endpunkt für Google APIs betreiben, eine Cloud DNS-Privatzone, die*.run.appdarauf auflöst, und On-Premises-Routing zu diesem Endpunkt.
<public_url>/oauth/callback vor der ersten Anmeldung. Stellen Sie erneut bereit, nachdem Sie public_url geändert haben, da das Gateway seinen öffentlichen Ursprung nur aus dieser Einstellung erstellt und X-Forwarded-Host und X-Forwarded-Proto ignoriert. X-Forwarded-For wird nur für Client-IPs berücksichtigt, wenn listen.trusted_proxies gesetzt ist.Gateway-URL auf Entwicklermaschinen pushen
Das Gateway wird jetzt ausgeführt, aber Entwickler können es von
/login aus nicht erreichen, bis die Gateway-URL auf ihren Maschinen vorhanden ist. Legen Sie forceLoginMethod und forceLoginGatewayUrl in der verwalteten Einstellungsdatei fest, die Sie über MDM auf jedem Gerät bereitstellen. Es gibt keine Gateway-Option in der Anmeldungsauswahl, die ein Entwickler manuell auswählen kann.Terraform-Referenz
Die Referenz-Bereitstellungs-Assets automatisieren den Cloud Run-Pfad auf dieser Seite. Die Konfigurations- und Image-Assets gelten für beide Pfade:setup.sh: ein idempotentergcloud-Provisioner, der den vollständigen Cloud Run-Pfad durchläuft, vom Aktivieren von APIs bis zur ersten Bereitstellungterraform/: dieselbe Bereitstellung als Infrastructure-as-Code für eine Greenfield-Bereitstellung: ein gezieltes Apply zum Erstellen des Artifact Registry-Repositorys, dann zum Erstellen und Pushen des Images, dann ein vollständiges Applygateway.yaml.exampleund einDockerfilefür das Distroless-Runtime-Image
internal, daher ist kein Load Balancer erforderlich. Um die Bereitstellung dieser Seite hinter einem ALB zu entsprechen, führen Sie setup.sh mit INGRESS=internal-and-cloud-load-balancing aus oder legen Sie die Terraform-Variable ingress auf INGRESS_TRAFFIC_INTERNAL_LOAD_BALANCER fest. Die Artefakte standardisieren auch die Invoker-Schicht auf eine allUsers run.invoker-Gewährung statt --no-invoker-iam-check, das Gegenteil dieser Seite. Beide funktionieren, und die Wahl hängt von den Richtlinieneinschränkungen Ihrer Organisation ab.
Die Assets werden als funktionierende Beispiele bereitgestellt, nicht als unterstütztes Produktionsartefakt. Überprüfen und passen Sie sie an Ihre Umgebung an.
Fehlerbehebung
Für Gateway-Boot- und Anmeldungsfehler siehe die plattformunabhängige Fehlerbehebungstabelle. Die folgenden Einträge sind spezifisch für Google Cloud.| Symptom | Ursache | Behebung |
|---|---|---|
Cloud Run gibt 403 Forbidden zurück, bevor der Container erreicht wird | Die Invoker IAM-Prüfung ist noch aktiviert | Stellen Sie mit --no-invoker-iam-check bereit oder erteilen Sie allUsers die run.invoker-Rolle mit --allow-unauthenticated |
--no-invoker-iam-check wird mit invoker_iam_disabled is not currently available abgelehnt | Blockiert durch constraints/run.managed.requireInvokerIam | Verwenden Sie --allow-unauthenticated. Wenn Domain Restricted Sharing über constraints/iam.allowedPolicyMemberDomains dies auch blockiert, verwenden Sie den GKE-Pfad, der das Gateway auf der Netzwerkebene ohne allUsers-Bindung verfügbar macht. |
Container manifest type … must support amd64/linux bei Bereitstellung | Image wurde auf einem Nicht-amd64-Host erstellt oder buildx hat einen OCI-Image-Index ausgegeben | Erstellen Sie mit --platform=linux/amd64 --provenance=false |
| Gateway-Boot beendet sich mit Postgres-Verbindungs-Timeout-Fehler auf Cloud Run | Service ist nicht an das VPC angehängt oder Cloud SQL hat keine private IP auf diesem VPC. Der Store wartet nach 5 Sekunden nicht mehr | Stellen Sie mit --network und --subnet für Direct VPC Egress bereit und erstellen Sie die Cloud SQL-Instanz mit --no-assign-ip und --network, das auf dasselbe VPC verweist |
Agent Platform-Anfragen geben 403 PERMISSION_DENIED zurück | Laufzeit verwendet nicht den claude-gateway-Service-Account oder das Modell ist nicht in Model Garden für das Projekt aktiviert | Legen Sie --service-account auf Cloud Run fest oder binden Sie Workload Identity auf GKE, und aktivieren Sie jedes Claude-Modell in Model Garden für die Zielregion |
| Streaming-Antworten werden nach einer festen Dauer abgeschnitten | Front-End-Anfrage-Timeout: Der Load Balancer Backend-Service hinter GKE Ingress hat standardmäßig 30 Sekunden und Cloud Run 300 Sekunden | Hängen Sie eine BackendConfig mit erhöhtem timeoutSec auf GKE an oder stellen Sie mit --timeout=3600 auf Cloud Run bereit |
Nächste Schritte
- Konfigurationsreferenz: jede
gateway.yaml-Option, einschließlichmanaged.policiesundtelemetry - Bereitstellung und Betrieb: IdP-Setup, Integritätsprüfungen, JWT-Geheimnis-Rotation, Upgrades und das Sicherheitsmodell
- Claude-Apps-Gateway-Übersicht: Schnellstart und Verbindung von Entwicklern