Halaman ini menjelaskan satu cara untuk menjalankan gateway aplikasi Claude di Google Cloud. Konfigurasi ini adalah contoh kerja untuk infrastruktur yang dikelola pelanggan daripada penyebaran produksi yang didukung; gunakan ini untuk melihat bagaimana potongan-potongan cocok bersama sebelum menyesuaikannya dengan lingkungan Anda sendiri. Untuk persyaratan yang tidak bergantung pada platform, lihat panduan penyebaran.
oidc yang berubah. Lihat Penyiapan penyedia identitas untuk detail per-IdP.
Apa yang akan Anda bangun
- Layanan Cloud Run atau GKE Deployment yang menjalankan kontainer gateway
- Repositori Artifact Registry untuk gambar gateway
- Instans Cloud SQL untuk PostgreSQL, IP pribadi saja, untuk store gateway
- Rahasia Secret Manager untuk
gateway.yaml, kunci penandatanganan JWT, rahasia klien OIDC, dan URL Postgres - Service account dengan
roles/aiplatform.user, terlampir langsung di Cloud Run atau terikat melalui Workload Identity di GKE - Internal Application Load Balancer di Cloud Run, atau GKE Ingress internal dari kelas
gce-internaldi GKE, untuk HTTPS
Prasyarat
- Proyek GCP dengan penagihan diaktifkan, dan izin untuk membuat sumber daya di atas
- CLI
gcloud, diautentikasi dengangcloud auth login, dan Docker dipasang secara lokal - Untuk jalur GKE:
kubectl, dan kluster GKE di VPC yang dibuat dalam panduan di bawah - Akses ke model Claude yang Anda butuhkan di Model Garden, di wilayah yang menerbitkannya
- Klien aplikasi web OAuth 2.0 Google Workspace dengan URI pengalihan
https://<gateway-host>/oauth/callback; lihat Penyiapan penyedia identitas - Nama host TLS untuk gateway, biasanya nama DNS internal yang menunjuk ke load balancer
Terapkan gateway
Langkah-langkah di bawah menyediakan penyebaran lengkap dengan perintahgcloud.
Aktifkan API
Aktifkan API layanan yang digunakan panduan:API yang Anda butuhkan bergantung pada jalur penyebaran:
computedanservicenetworking: diperlukan untuk jalur Cloud SQL IP pribadirun: Cloud Run sajacontainer: GKE saja
Buat service account dan berikan IAM
Gateway berjalan sebagai service account khusus dengan izin untuk memanggil Agent Platform. Ini menjangkau Cloud SQL melalui VPC dengan pengguna kata sandi, jadi tidak ada peran IAM Cloud SQL yang diperlukan:Kemudian aktifkan model Claude untuk proyek di Model Garden; model menerbitkan ke wilayah tertentu, jadi periksa setiap kartu model.
Bangun dan dorong gambar ke Artifact Registry
Bangun gambar sesuai dengan persyaratan gambar kontainer, menggunakan biner glibc
linux-x64, dan dorong:Sediakan Cloud SQL untuk PostgreSQL
Buat instans di VPC melalui Private Services Access sehingga tidak memiliki IP publik; ini juga memenuhi proyek di mana Runtime Cloud Run atau GKE harus berada di, atau dirutekan ke, VPC ini.
constraints/sql.restrictPublicIp diberlakukan:Tulis gateway.yaml
Blok
Contoh di bawah menggunakan nilai internal-load-balancer-in-front-of-Cloud-Run.
upstreams menunjuk ke Agent Platform dengan auth: {}, jadi gateway mengautentikasi melalui Application Default Credentials dari service account runtime. Lihat referensi konfigurasi untuk setiap bidang.Dua bidang listen bergantung pada apa yang berada di depan gateway:public_url: diperlukan di belakang Cloud Run atau GKE Ingress. Gateway membangunredirect_uriIdP dan dokumen penemuannya hanya dari nilai ini, tidak pernah dari headerX-Forwarded-*.trusted_proxies: rentang sumber front end. Gateway menghormatiX-Forwarded-Forhanya ketika peer TCP berada dalam daftar ini, kemudian berjalan melalui rantai melewati hop terpercaya, jadi batas laju sign-in per-IP dan acara audit mencatat IP pengembang daripada load balancer.
trusted_proxies agar sesuai dengan front end Anda. GKE Ingress eksternal dari kelas gce tidak terdaftar: ini menyediakan alamat forwarding-rule publik, yang pemeriksaan jaringan pribadi /login menolak.| Front end | trusted_proxies |
|---|---|
| Cloud Run dijangkau langsung, tidak ada load balancer | [169.254.0.0/16] |
| Internal Application Load Balancer di depan Cloud Run | 169.254.0.0/16 ditambah CIDR subnet proxy-only Anda |
GKE internal Ingress, kelas gce-internal | CIDR subnet proxy-only Anda |
gateway.yaml
Token id Google tidak membawa klaim
groups. Untuk menggunakan kebijakan berbasis grup dalam managed.policies dengan Google Workspace sebagai IdP, konfigurasikan oidc.google_groups, yang mencari grup setiap pengguna melalui Admin SDK Directory API menggunakan service account dengan delegasi domain-wide. Tanpa itu, cocokkan pada email_domain sebagai gantinya.Simpan rahasia di Secret Manager
Buat empat rahasia dan berikan
Bagaimana rahasia mencapai kontainer berbeda menurut jalur:
roles/secretmanager.secretAccessor ke service account claude-gateway:| Rahasia | Sumber |
|---|---|
gateway-jwt-secret | openssl rand -base64 32 |
gateway-oidc-client-secret | Google Cloud Console → OAuth client |
gateway-postgres-url | $GATEWAY_POSTGRES_URL dari langkah Cloud SQL |
gateway-config | gateway.yaml lengkap dari langkah sebelumnya |
- Di GKE mereka dipasang sebagai file melalui driver CSI Secret Manager, dan
gateway.yamlmereferensikan${file:/secrets/...}. - Di Cloud Run, yang tidak dapat memasang beberapa rahasia ke satu direktori,
gateway.yamldipasang sebagai file dan tiga lainnya disuntikkan sebagai variabel lingkungan, jadigateway.yamlmereferensikan${GATEWAY_JWT_SECRET},${OIDC_CLIENT_SECRET}, dan${GATEWAY_POSTGRES_URL}sebagai gantinya.
Terapkan
- Cloud Run
- GKE
Perintah di bawah menyebarkan untuk produksi di belakang load balancer internal.Egress VPC langsung, melalui
--network, --subnet, dan --vpc-egress=private-ranges-only, memungkinkan layanan menjangkau IP pribadi Cloud SQL secara langsung. Egress publik ke endpoint Agent Platform dan accounts.google.com langsung ke internet daripada melalui VPC, jadi Cloud NAT tidak diperlukan.Pemeriksaan IAM invoker harus terbuka atau dinonaktifkan. Gateway menjalankan OIDC-nya sendiri dan kliennya tidak membawa token GCP, jadi pemeriksaan invoker Cloud Run harus mengakui permintaan yang tidak diautentikasi. Autentikasi OIDC gateway mengautentikasi permintaan setelah mencapai kontainer, dengan allowed_email_domains membatasi domain mana yang dapat masuk.Dua bendera mengakui permintaan yang tidak diautentikasi:--no-invoker-iam-check: menonaktifkan pemeriksaan tanpa ikatanallUsersuntuk dikelola, dan bekerja di bawah Domain Restricted Sharing--allow-unauthenticated: memberikan peranrun.invokerkepadaallUsers; gunakan jika organisasi Anda tidak memungkinkan--no-invoker-iam-check
--ingress adalah lapisan terpisah dan independen dari pemeriksaan invoker; tetap atur untuk membatasi layanan ke jaringan perusahaan Anda.Secara default URL Cloud Run *.run.app diselesaikan ke alamat publik, yang pemeriksaan jaringan pribadi /login menolak. Dua topologi memberikan pengembang nama host yang dapat diselesaikan secara pribadi, dan Cloud Run tidak menyediakan keduanya untuk Anda:- Internal Application Load Balancer, topologi yang diasumsikan perintah deploy di atas: terapkan dengan
--ingress=internal-and-cloud-load-balancing, sediakan Internal Application Load Balancer di depan layanan dengan nama DNS internal dan sertifikat, dan aturlisten.public_urlke nama host itu. - Ingress internal saja tanpa load balancer: terapkan dengan
--ingress=internaldan biarkanlisten.public_urlsebagai URL*.run.app, default dalam aset referensi di bawah. Agar*.run.appdiselesaikan secara pribadi, tim jaringan Anda harus sudah mengoperasikan endpoint Private Service Connect untuk Google APIs, zona DNS pribadi Cloud yang menyelesaikan*.run.appke dalamnya, dan perutean on-premises ke endpoint itu.
<public_url>/oauth/callback sebelum sign-in pertama. Terapkan ulang setelah mengubah public_url, karena gateway membangun asal publiknya hanya dari pengaturan itu dan mengabaikan X-Forwarded-Host dan X-Forwarded-Proto. X-Forwarded-For dihormati untuk IP klien hanya ketika listen.trusted_proxies diatur.Dorong URL gateway ke mesin pengembang
Gateway sekarang berjalan, tetapi pengembang tidak dapat menjangkaunya dari
/login sampai URL gateway berada di mesin mereka. Atur forceLoginMethod dan forceLoginGatewayUrl dalam file pengaturan terkelola yang Anda terapkan ke setiap perangkat melalui MDM. Tidak ada opsi gateway di pemilih login untuk pengembang memilih secara manual.Referensi Terraform
Aset penyebaran referensi mengotomatisasi jalur Cloud Run di halaman ini; aset konfigurasi dan gambar berlaku untuk kedua jalur:setup.sh: penyediagcloudidempoten yang berjalan melalui jalur Cloud Run lengkap, dari mengaktifkan API melalui penyebaran pertamaterraform/: penyebaran yang sama sebagai infrastruktur-sebagai-kode, untuk penyebaran greenfield: penerapan bertarget untuk membuat repositori Artifact Registry, kemudian membangun dan mendorong gambar, kemudian penerapan penuhgateway.yaml.exampledanDockerfileuntuk gambar runtime distroless
internal, jadi tidak ada load balancer yang diperlukan. Untuk mencocokkan penyebaran produksi-di-belakang-ALB halaman ini, jalankan setup.sh dengan INGRESS=internal-and-cloud-load-balancing, atau atur variabel Terraform ingress ke INGRESS_TRAFFIC_INTERNAL_LOAD_BALANCER. Artefak juga default lapisan invoker ke pemberian run.invoker allUsers daripada --no-invoker-iam-check, kebalikan dari panduan halaman ini; keduanya berfungsi, dan pilihan bergantung pada batasan kebijakan organisasi Anda.
Aset disediakan sebagai contoh kerja, bukan sebagai artefak produksi yang didukung; tinjau dan sesuaikan dengan lingkungan Anda.
Troubleshooting
Untuk boot gateway dan kesalahan login, lihat tabel troubleshooting yang tidak bergantung pada platform. Entri di bawah khusus untuk Google Cloud.| Gejala | Penyebab | Perbaikan |
|---|---|---|
Cloud Run mengembalikan 403 Forbidden sebelum mencapai kontainer | Pemeriksaan IAM invoker masih diaktifkan | Terapkan dengan --no-invoker-iam-check, atau berikan peran run.invoker kepada allUsers dengan --allow-unauthenticated |
--no-invoker-iam-check ditolak dengan invoker_iam_disabled is not currently available | Diblokir oleh constraints/run.managed.requireInvokerIam | Gunakan --allow-unauthenticated. Jika Domain Restricted Sharing melalui constraints/iam.allowedPolicyMemberDomains juga memblokir itu, gunakan jalur GKE, yang mengekspos gateway di lapisan jaringan tanpa ikatan allUsers. |
Container manifest type … must support amd64/linux saat penyebaran | Gambar dibangun di host non-amd64, atau buildx memancarkan indeks gambar OCI | Bangun dengan --platform=linux/amd64 --provenance=false |
| Boot gateway keluar dengan kesalahan timeout koneksi Postgres di Cloud Run | Layanan tidak terlampir ke VPC, atau Cloud SQL tidak memiliki IP pribadi di VPC itu; store berhenti menunggu setelah 5 detik | Terapkan dengan --network dan --subnet untuk egress VPC Langsung, dan buat instans Cloud SQL dengan --no-assign-ip dan --network menunjuk ke VPC yang sama |
Permintaan Agent Platform mengembalikan 403 PERMISSION_DENIED | Runtime tidak menggunakan service account claude-gateway, atau model tidak diaktifkan di Model Garden untuk proyek | Atur --service-account di Cloud Run atau ikat Workload Identity di GKE, dan aktifkan setiap model Claude di Model Garden untuk wilayah target |
| Respons streaming terpotong setelah durasi tetap | Timeout permintaan front-end: layanan backend load balancer di belakang GKE Ingress default ke 30 detik dan Cloud Run ke 300 detik | Lampirkan BackendConfig dengan timeoutSec yang ditingkatkan di GKE, atau terapkan dengan --timeout=3600 di Cloud Run |
Langkah berikutnya
- Referensi konfigurasi: setiap opsi
gateway.yaml, termasukmanaged.policiesdantelemetry - Penyebaran dan operasi: penyiapan IdP, pemeriksaan kesehatan, rotasi rahasia JWT, upgrade, dan model keamanan
- Gambaran umum gateway aplikasi Claude: quickstart dan menghubungkan pengembang