gateway.yaml yang dibaca gateway saat boot, lihat Referensi Konfigurasi.
Penyebaran produksi mengikuti empat langkah secara berurutan, dan bagian di bawah cocok dengan mereka. Dua yang pertama adalah tempat Anda membuat pilihan; dua yang kedua adalah materi referensi untuk dikonsultasikan setelah berjalan.
- Siapkan penyedia identitas Anda: daftarkan klien OAuth dan periksa catatan per-IdP untuk Okta, Entra, dan Google
- Sebarkan gateway: bangun gambar kontainer yang disematkan dan jalankan di Kubernetes, Cloud Run, atau platform Anda sendiri. Bagian ini juga mencakup keputusan biaya, bypass, gateway-ganda, dan serverless
- Siapkan operasi: log, probe kesehatan, perilaku pemadaman, rotasi rahasia, dan peningkatan. Referensi untuk ketika Anda menghubungkan pemantauan dan runbook
- Tinjau postur keamanan: aliran data ke mana, model ancaman, dan jawaban kepatuhan. Referensi untuk tinjauan keamanan
Sebarkan di jaringan pribadi Anda. Claude Code hanya terhubung ke gateway yang alamatnya pribadi. Ini adalah penjaga keamanan, karena gateway yang dipercaya dapat mendorong pengaturan yang menjalankan perintah pada mesin pengembang. Letakkan gateway di belakang penyeimbang beban internal atau VPN dan berikan nama host yang hanya diselesaikan ke IP pribadi.
Penyiapan penyedia identitas
Daftarkan aplikasi web OAuth/OpenID Connect (OIDC) rahasia dengan URI pengalihan tunggal,https://<gateway>/oauth/callback, dan tetapkan ke pengguna atau grup yang harus memiliki akses gateway.
IdP apa pun yang sesuai dengan OIDC berfungsi: Okta, Microsoft Entra ID, Google Workspace, Keycloak, Dex, PingFederate, dan lainnya. IdP harus memenuhi tiga persyaratan:
- Melayani
/.well-known/openid-configuration, melalui HTTPS dalam produksi; gateway menerimahttp://issuer, dan issuer loopback juga memerlukanCLAUDE_GATEWAY_ALLOW_LOOPBACK=1 - Mendukung aliran kode otorisasi. PKCE (Proof Key for Code Exchange) aktif secara default; nonaktifkan dengan
oidc.use_pkce: falseuntuk IdP yang tidak mendukungnya - Mengembalikan
emaildan secara opsionalgroupsdalam id_token, atau melayaninya dari endpoint userinfo denganoidc.userinfo_fallback: true
oidc.ca_cert_pem.
Beberapa penyedia menangani klaim email dan grup secara berbeda:
- Okta: server otorisasi org di
https://example.okta.commengembalikan id_token tipis yang menghilangkanemaildangroups, jadi aturoidc.userinfo_fallback: truekapan pun Anda menggunakannya sebagaiissuer. Server otorisasi khusus sepertihttps://example.okta.com/oauth2/defaultyang menyertakanemaildan secara opsionalgroupsdalam id_token memancarkannya secara langsung dan tidak memerlukan fallback. Okta memancarkangroupshanya ketika scopegroupsdiminta dalamoidc.scopesdan filter klaim grup aplikasi memungkinkannya;userinfo_fallbacktidak dapat mengisi klaim yang IdP tidak diminta. - Microsoft Entra ID:
issuer=https://login.microsoftonline.com/<tenant-id>/v2.0. Entra memancarkan Object ID grup daripada nama, jadi gunakan GUID dalammanaged.policies.match.groups, atau gunakan App Roles untuk nama yang dapat dibaca manusia. Jika penyewa Anda memancarkan peran di bawahrolesbukangroups, aturoidc.groups_claim: roles. - Google Workspace:
issuer=https://accounts.google.com. id_token Google tidak membawa grup. Untuk menggunakanallowed_groupsberbasis grup ataumanaged.policiesdengan Google sebagai IdP, konfigurasikanoidc.google_groups, yang mencari grup setiap pengguna melalui Admin SDK Directory API menggunakan akun layanan dengan delegasi di seluruh domain. Tanpa itu, gunakanoidc.allowed_email_domainsuntuk gating keanggotaan danmanaged.policies.match.email_domainuntuk penugasan kebijakan. Google juga mengabaikan scopeoffline_accessstandar. Untuk token refresh, aturoidc.scopes: [openid, profile, email]danoidc.extra_auth_params: { access_type: offline, prompt: consent }.
Penyebaran
Gateway adalah satu biner Linux. Ini diskalakan secara horizontal karena replika tidak memiliki status dan Postgres adalah lapisan koordinasi bersama. Jalankan bagaimanapun Anda menjalankan layanan stateless di lingkungan Anda. Sisa bagian ini menyatakan apa yang dibutuhkan gambar, dengan catatan singkat untuk Kubernetes dan Cloud Run. Gateway dirancang untuk berjalan di dalam jaringan Anda, karena menyimpan kredensial upstream Anda dan bertindak sebagai titik egress tunggal untuk inferensi. Ini dapat berjalan di mana pun pengembang Anda dan IdP Anda dapat menjangkau melalui HTTPS; perlakukan seperti layanan lain yang menyimpan kredensial produksi. Beberapa keputusan membentuk penyebaran di luar tempat berjalan:- Biaya: tidak ada lisensi terpisah atau biaya per-kursi untuk gateway; itu adalah bagian dari biner
claude. Anda membayar untuk inferensi melalui komitmen cloud atau Anthropic yang ada, ditambah komputasi untuk kontainer dan kolektor telemetri Anda. - Bypass: gateway tidak memberlakukan bahwa satu-satunya rute ke model melaluinya. Pengembang dengan kredensial mereka sendiri masih dapat memanggil penyedia secara langsung, jadi menutup jalur itu adalah keputusan kebijakan jaringan, misalnya memblokir egress ke
api.anthropic.comkecuali dari gateway. Memblokir egress itu juga merusak pemeriksaan keamanan domain WebFetch, yang memanggilapi.anthropic.comdari mesin setiap pengembang; aturskipWebFetchPreflight: truedalam kebijakan terkelola untuk menonaktifkannya. - Multiple gateways: setiap gateway adalah penyebaran terpisah dengan konfigurasinya sendiri. CLI menyimpan sidik jari kepercayaan dan kredensialnya per nama host gateway, jadi tim yang berbeda dapat terhubung ke gateway yang berbeda tanpa konflik. Untuk melayani beberapa issuer OIDC, jalankan instance terpisah.
- Serverless: Cloud Run berfungsi; atur
min-instances: 1untuk menghindari penemuan OIDC dingin. Lambda dan Cloud Functions tidak, karena gateway adalah server HTTP yang berjalan lama.
listen.trusted_proxies ke rentang sumber proxy sehingga gateway membaca IP klien dari X-Forwarded-For. Gateway menghormati header hanya ketika peer TCP dipercaya; contoh yang dikerjakan Google Cloud memiliki nilai konkret per topologi. Tanpa proxy terpercaya, setiap permintaan tampak berasal dari IP proxy, yang meruntuhkan batas laju per-IP menjadi satu bucket bersama dan mencatat IP proxy dalam acara audit.
Gambar kontainer
Bangun gambar Anda sendiri di sekitar binerclaude asli dari rilis Claude Code standar:
- Unduh build Linux untuk arsitektur gambar Anda dari rilis yang disematkan; lihat Instal versi spesifik untuk URL unduhan.
- Verifikasi terhadap
manifest.jsonyang ditandatangani GPG rilis seperti yang dijelaskan dalam Integritas biner dan penandatanganan kode. - Salin ke konteks build.
- Gambar berbasis glibc: build glibc hanya memiliki dependensi dinamis perpustakaan glibc. Gambar berbasis Musl memerlukan build
linux-x64-muslataulinux-arm64-muslditambah paket tambahan; lihat Penyiapan Alpine Linux. - Direktori status yang dapat ditulis: gateway berjalan sebagai pengguna apa pun, tetapi gambar minimal tidak memiliki rumah yang dapat ditulis. Atur
CLAUDE_CONFIG_DIRke jalur yang dapat ditulis seperti/tmp/.claude. - Perintah kontainer:
claude gateway --config /etc/claude/gateway.yaml, dengan file konfigurasi dipasang hanya-baca dan rahasia disuplai sebagai variabel lingkungan; gateway mendengarkan dilisten.port, default8080.
Kubernetes
Jalankan gateway sebagai Deployment, seperti layanan stateless apa pun:- Pasang konfigurasi dari ConfigMap dan rahasia dari Secret; referensikan rahasia dalam YAML melalui
${file:/path/to/secret}atau sebagai variabel lingkungan - Hentikan TLS di Ingress dan atur
listen.public_urlke nama host Ingress - Arahkan probe kesiapan ke
GET /readyzdan probe liveness keGET /healthz
Identitas beban kerjaLebih suka identitas beban kerja platform daripada kunci statis: IRSA di EKS untuk Bedrock, Workload Identity di GKE untuk Agent Platform, dan identitas beban kerja di AKS untuk Foundry. Atur
auth: {} dalam blok upstream, atau use_azure_ad: true untuk Foundry, dan gateway mengambil identitas pod melalui rantai kredensial default penyedia itu. Untuk pasangan lintas cloud, seperti upstream Bedrock di GKE, atur kredensial eksplisit dalam blok auth upstream sebagai gantinya. Referensi upstreams memiliki detail penyiapan per-platform.Cloud Run
Konfigurasikan layanan sebagai berikut:- Biarkan
listen.portpada default8080, yang cocok denganPORTdefault Cloud Run, atau aturport: ${PORT} - Atur
public_urlke asal yang dapat dijangkau secara eksternal. Untuk produksi ini biasanya nama host penyeimbang beban internal, karena/loginmenolak alamat publik dan URL*.run.appdiselesaikan ke satu, jadi URL Cloud Run saja hanya berfungsi untuk uji cobacurlatau browser. Pengecualiannya adalah jaringan di mana*.run.appdiselesaikan secara pribadi melalui Private Service Connect dan zona pribadi Cloud DNS; dalam topologi itu URL Cloud Run adalahpublic_urlyang valid. Contoh yang dikerjakan Google Cloud mencakup keduanya. - Pasang konfigurasi sebagai volume rahasia
- Atur
min-instances: 1untuk menghindari penemuan OIDC dingin pada permintaan pertama
Untuk contoh lengkap yang dikerjakan di Google Cloud, mencakup Cloud Run atau GKE, Cloud SQL, dan Secret Manager, lihat Sebarkan di Google Cloud.
Dorong URL gateway ke mesin pengembang
Setelah gateway melayani, dorongforceLoginMethod dan forceLoginGatewayUrl ke mesin setiap pengembang melalui pengaturan terkelola, melalui MDM atau dengan menulis managed-settings.json per-OS secara langsung. Tanpa ini, /login menampilkan pemilih akun standar tanpa opsi gateway. Lihat Pengaturan terkelola sisi klien untuk jalur file.
Operasi
Setelah gateway melayani lalu lintas, operasi sehari-hari membaca lognya, menyelidiki kesehatannya, dan memutar rahasianya sesuai jadwal Anda. Subbagian mencakup masing-masing, ditambah apa yang disimpan Postgres dan bagaimana upgrade dan rollback berperilaku.Log
Gateway menulis dua aliran ke stderr, keduanya ramah JSON:- Acara audit: JSON satu baris per acara yang relevan dengan keamanan. Pipa stderr ke agregator log Anda. Acara yang dipancarkan termasuk
config.load,session.mint,session.refresh,device.authorize,device.verify,auth.denied,access.denied,inference,managed.serve,spend.blocked, danadmin.denied. Bidang bervariasi menurut acara:- Acara mint dan refresh yang berhasil membawa
sub,email,client_ip, dan hasilnya - Acara penolakan membawa alasan, jalur, dan IP klien, karena tidak ada identitas pada penolakan
inferencemencatat upstream mana yang melayani permintaan dan status responsadmin.deniedmencatat upaya autentikasi admin-API yang ditolak dengan alasan (invalid_keyatauno_credentials), IP klien, metode, dan jalur, tanpa materi kunci yang disajikan
- Acara mint dan refresh yang berhasil membawa
- Log operasional: baris yang dapat dibaca manusia dengan awalan
[gateway]untuk boot, peringatan, dan kesalahan upstream. Variabel lingkunganCLAUDE_GATEWAY_LOG_LEVELmengontrol verbositas dan menerimainfo,warn, atauerror, denganinfosebagai default. Ini tidak mempengaruhi acara audit, yang selalu dipancarkan.
Kesehatan
Gateway melayaniGET /healthz sebagai probe liveness dan GET /readyz sebagai probe kesiapan; /readyz memverifikasi toko dapat dijangkau. Keduanya dikecualikan dari access_control.allow_cidrs, jadi probe terus bekerja pada pendengar yang terkunci.
Dokumen penemuan OAuth di /.well-known/oauth-authorization-server juga mengembalikan 200 hanya setelah pemuatan konfigurasi, penemuan OIDC, konstruksi klien upstream, dan migrasi Postgres semua berhasil, jadi berfungsi ganda sebagai pemeriksaan boot end-to-end.
Gateway yang berjalan juga melayani deskripsi jalur dan bentuk permintaan yang diterimanya di <public_url>/protocol, cocok dengan versi yang Anda jalankan. Isinya tidak stabil di seluruh rilis.
Perilaku pemadaman
Jika Postgres turun, gateway itu sendiri terus melayani pengembang yang masuk dan masuk baru gagal. Apakah pengembang benar-benar terus bekerja tergantung pada bagaimana orchestrator Anda menangani kesiapan:- Sesi yang ada: token pembawa memvalidasi secara lokal dengan rahasia JWT, penyegaran sesi tidak menyentuh toko, dan proses gateway masih dapat melayani inferensi
- Masuk baru: gagal sampai Postgres pulih, karena aliran perangkat dan penghitung batas lajunya tinggal di Postgres
- Penegakan batas pengeluaran: gagal terbuka secara default selama pemadaman, jadi inferensi masih mengalir; balikkan ke gagal tertutup jika Anda lebih suka memblokir daripada menjalankan tanpa meter
- Kesiapan:
/readyzmelaporkan tidak siap selama pemadaman, jadi orchestrator yang gating lalu lintas pada kesiapan menghapus setiap replika dari rotasi sekaligus. Dalam topologi itu semua lalu lintas, termasuk inferensi yang dapat masih dilayani gateway, gagal di penyeimbang beban sampai Postgres pulih. Probe liveness di/healthzterus lulus, jadi replika tidak dimulai ulang. Arahkan probe kesiapan ke/healthzsebagai gantinya jika Anda lebih suka pengembang yang masuk terus bekerja melalui pemadaman toko; biayanya adalah masuk baru gagal terhadap replika yang masih melaporkan siap.
ttl_hours, dan login dan penyegaran baru gagal. Atur ttl_hours yang lebih lama jika IdP Anda memiliki jendela pemeliharaan yang sering.
Rotasi rahasia JWT
Putar rahasia penandatanganan dalam tiga langkah sehingga sesi yang ada tetap valid:- Hasilkan rahasia baru. Tambahkan ke depan array
session.jwt_secret. - Gulung penyebaran. Token baru menandatangani dengan rahasia baru; token lama masih memverifikasi.
- Setelah
ttl_hoursditambah margin, hapus rahasia lama dan gulung lagi.
ttl_hours.
Postgres
Gateway menyimpan lima tabel, semuanya dibuat oleh migrasi waktu boot-nya:| Tabel | Isi | Retensi |
|---|---|---|
kv | Hibah perangkat (TTL 10 menit) dan penghitung batas laju | TTL per baris |
spend | Penghitung pengeluaran periode-ke-tanggal per-principal, dalam sen | admin.spend_retention_months, default 13 |
spend_limits | Batas pengeluaran yang dikonfigurasi | Sampai dihapus melalui API |
admin_audit | Jejak mutasi Admin API | admin.audit_retention_days, default 365 |
principal_emails | Email terakhir dilihat setiap principal, nama tampilan, dan grup IdP. Berisi PII. | admin.identity_retention_days sejak aktivitas terakhir, default 90 |
kv melewati TTL mereka, dan sapuan per jam memberlakukan jendela retensi pada tabel pengeluaran, jadi tidak ada yang tumbuh tanpa batas. Tanpa batas pengeluaran yang dikonfigurasi, hanya kv yang ditulis. Jika kebijakan keamanan Anda melarang DDL dari peran aplikasi, buat tabel ini sebelumnya dan _migrations dengan peran admin dan berikan peran aplikasi SELECT, INSERT, UPDATE, DELETE pada masing-masing.
Dengan batas pengeluaran digunakan, database yang hilang berarti pelacakan pengeluaran dan batas yang hilang, bukan hanya login ulang pengembang, jadi jalankan backup reguler. Untuk menghapus satu pengembang yang pergi segera daripada menunggu retensi, jalankan DELETE FROM principal_emails WHERE principal = '<sub>' secara langsung; itu menghapus satu-satunya tabel yang menyimpan email, nama, dan grup mereka. Baris spend dan admin_audit mereferensikan hanya sub OIDC pseudonim.
Upgrade
Replika tidak memiliki status, jadi restart bergulir aman kapan saja. Gateway menjalankan migrasi skema saat boot, yang berarti menyebarkan biner baru secara otomatis memigrasikan database. Jika peran database tidak dapat menjalankan DDL, buat skema sebelumnya, termasuk tabel_migrations yang ditanam ke versi saat ini; jika tidak boot gagal mencoba CREATE TABLE.
Migrasi adalah append-only, jadi rollback ke biner sebelumnya yang mengetahui lebih sedikit migrasi aman; itu mengabaikan baris ekstra. Rollback juga memvalidasi ulang YAML terhadap skema biner yang lebih lama, jadi konfigurasi yang mengadopsi kunci yang diperkenalkan oleh rilis yang lebih baru gagal boot pada yang lebih lama. Hapus kunci baru sebelum rollback.
Karena Anda menyematkan versi gateway dalam gambar Anda sendiri, perbaikan dalam rilis Claude Code baru, termasuk perbaikan keamanan, mencapai penyebaran Anda hanya ketika Anda memperbarui pin dan menyebarkan ulang. Sertakan gateway dalam kadence patching yang sama yang Anda gunakan untuk layanan lain yang menyimpan kredensial produksi.
Keamanan
Bagian ini menjawab pertanyaan yang ditanyakan tinjauan keamanan: aliran data apa melalui gateway dan ke mana perginya, serangan mana yang dipertahankan desain, dan jawaban mana yang termasuk dalam kuesioner kepatuhan.Aliran data
| Data | Jalur | Dikirim ke Anthropic oleh gateway |
|---|---|---|
| Inferensi (prompt, penyelesaian) | CLI → gateway → upstream Anda | Hanya jika API Anthropic adalah upstream yang dikonfigurasi |
| Telemetri (metrik OTLP, ditambah log dan jejak opt-in) | CLI → gateway → kolektor Anda | Tidak pernah |
| Identitas (email, grup, sub) | IdP → gateway → JWT → CLI; CLI memberi stempel pada ekspor OTLP | Tidak pernah |
| Pengaturan terkelola | YAML gateway Anda → CLI | Tidak pernah |
| Log audit | Stderr gateway → agregator Anda | Tidak pernah |
Ringkasan model ancaman
Gateway duduk di dalam perimeter jaringan Anda, tetapi laptop pengembang individual tidak diperlakukan sebagai terpercaya. Desain memperhitungkan ini dalam tiga cara:- Pengembang menyimpan JWT berumur pendek bukan kunci upstream mentah. Leg CLI-ke-gateway menggunakan hibah perangkat RFC 8628, dan pertukaran kode otorisasi gateway dengan IdP menjalankan PKCE dalam konfigurasi default, jadi kode otorisasi IdP yang disadap tidak berguna.
- Halaman verifikasi perangkat memberlakukan POST asal-sama dan batas laju per-IP per RFC 8628 §5.1. Lihat Resistansi brute-force kode pengguna.
- Permintaan keluar melalui penjaga server-side request forgery (SSRF) yang menyelesaikan DNS, memblokir alamat link-lokal dan cloud-metadata ditambah loopback secara default, dan menyematkan koneksi ke IP yang diselesaikan, jadi URL yang dipengaruhi operator seperti IdP dan tujuan OTLP tidak dapat dialihkan ke endpoint metadata cloud. Rentang pribadi RFC 1918 secara sengaja diizinkan, karena IdP dan kolektor OTLP biasanya tinggal di IP pribadi. Untuk pengembangan lokal terhadap IdP loopback atau kolektor, atur
CLAUDE_GATEWAY_ALLOW_LOOPBACK=1dalam lingkungan gateway; biarkan tidak disetel dalam produksi.
- Host gateway yang dikompromikan: host menyimpan kredensial upstream dan mendistribusikan pengaturan terkelola ke setiap pengembang yang terhubung, jadi kontrol atas konfigurasi gateway sebanding dengan kontrol atas MDM Anda. Dialog persetujuan satu kali CLI untuk pengaturan yang mampu shell membatasi perubahan diam-diam tetapi tidak menggantikan keamanan host.
- Penyedia OIDC yang berbahaya: penyedia menandatangani id_token yang dipercaya gateway, jadi dapat menegaskan identitas apa pun. Penyaringan dan pengamanan IdP Anda adalah tanggung jawab Anda.
Resistansi brute-force kode pengguna
user_code yang diketik pengembang ke halaman verifikasi /device adalah 8 karakter yang diambil dari alfabet 20 karakter, yang menghasilkan 20⁸ atau sekitar 2,56×10¹⁰ kombinasi, dan berakhir setelah 10 menit.
Gateway menerapkan batas laju per-IP pada endpoint hibah perangkat, dapat dikonfigurasi melalui rate_limits. Naikkan batas jika banyak pengembang masuk dari alamat NAT korporat bersama tunggal. Batas hanya berlaku pada aliran masuk, bukan pada inferensi.
Postur kepatuhan
- Residensi data: bidang data sendiri gateway mengirim tidak ada ke Anthropic kecuali API Anthropic adalah upstream yang dikonfigurasi; ketika itu, perjanjian penanganan data yang ada berlaku untuk jalur inferensi. Telemetri, audit, identitas, dan pengaturan hanya pergi ke tujuan yang Anda konfigurasikan.
- Lalu lintas proses host: proses host adalah CLI Claude Code, yang dapat mengirim analitik startup dan pemeriksaan pembaruan ke Anthropic. Untuk penyebaran egress ketat, atur
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1dalam lingkungan kontainer gateway. - Analitik klien: CLI menonaktifkan analitik penggunaan sendiri saat masuk ke gateway, dan pelaporan kesalahan dimatikan secara default pada permukaan API pihak ketiga.
- Mesin klien: CLI pengembang masih mengirim pemeriksaan nama host WebFetch dan pemeriksaan versi ke Anthropic kecuali
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1danskipWebFetchPreflight: truediatur. Lihat penggunaan data. - Peringkat survei: kredensial gateway menonaktifkan sink peringkat terikat Anthropic, jadi peringkat tidak dikirim ke Anthropic.
- Berbagi transkrip: memilih Ya pada prompt berbagi transkrip survei menulis file lokal di bawah
~/.claude/feedback-bundles/bukan mengunggah ke Anthropic. - Pembaruan klien: pemeriksaan pembaruan terpisah dari lalu lintas gateway. Sematkan versi melalui distribusi Anda sendiri dan atur
DISABLE_UPDATESjika laptop tidak boleh mengambil rilis.DISABLE_AUTOUPDATERmenghentikan hanya pembaruan latar belakang sementaraclaude updatemasih berfungsi. - TLS: layani
public_urlmelalui HTTPS dalam produksi, baik dari pendengar gateway sendiri melaluilisten.tlsatau dari ingress yang menghentikan TLS di depan replika HTTP biasa denganlisten.public_urldiatur. Gateway tidak menolak HTTP biasa. IdP harus melayani HTTPS dalam produksi, dan Postgres mendukung?sslmode=require. AturStrict-Transport-Securitydi ingress Anda. - Pengungkapan kerentanan: ikuti Melaporkan masalah keamanan
Troubleshooting
Untuk pertanyaan dan umpan balik, gunakan dukungan Claude Code, atau buka masalah di repositori GitHub Claude Code. Saat melaporkan masalah, sertakan:- Masalah gateway: stderr gateway untuk jendela yang relevan,
gateway.yamlAnda dengan rahasia diedit, versi gateway, ditampilkan di halaman pendaratan di/dan dalam header responsx-cc-gateway-versiondi/managed/settings, dan apa yang berubah baru-baru ini - Masalah login: pengembang menjalankan
claude --debug-file ./claude-debug.txt, mereproduksi, dan mengirim file itu ditambah log audit gateway untuk jendela yang sama - Masalah inferensi: model yang diminta, upstream yang dikonfigurasi, dan log audit gateway untuk permintaan, yang mencatat upstream mana yang melayaninya dan status respons
| Gejala | Penyebab | Perbaikan |
|---|---|---|
/login pengembang menampilkan pemilih akun standar bukan layar Cloud gateway | forceLoginMethod atau forceLoginGatewayUrl tidak diatur dalam pengaturan terkelola pada mesin itu | Sebarkan file pengaturan terkelola ke perangkat; /login membaca URL gateway dari sana |
Startup menampilkan Gateway login is configured in managed settings, but this Claude Code build does not include Cloud gateway support. | Build Claude Code yang diinstal mendahului dukungan gateway | Minta pengembang memperbarui Claude Code ke rilis yang mencakup dukungan Cloud gateway |
CLI /login: Gateway hosts must be on your organization's private network; <host> resolves to the public (or unrecognized) address <ip> | Nama host gateway diselesaikan ke setidaknya satu alamat IP publik. Claude Code memeriksa setiap alamat yang diselesaikan dan memerlukan setiap satu menjadi pribadi. Penyebab umum adalah nama dual-stack di mana satu keluarga diselesaikan ke alamat publik, termasuk penyeimbang beban dual-stack internal AWS, yang mengembalikan alamat AAAA rentang publik | Minta nama gateway hanya diselesaikan ke alamat pribadi pada mesin pengembang. Untuk nama dual-stack, lepaskan catatan rentang publik atau layani nama DNS internal saja. Lihat prasyarat jaringan pribadi. |
CLI /login: Gateway login requires a direct connection and does not support connecting through an HTTP proxy | HTTPS_PROXY atau HTTP_PROXY berlaku untuk host gateway dan nama host proxy diselesaikan ke alamat publik. Proxy yang nama hostnya hanya diselesaikan ke alamat pribadi diizinkan dan tidak memicu kesalahan ini | Tambahkan host gateway ke NO_PROXY pada mesin pengembang sehingga koneksi langsung, atau gunakan proxy yang nama hostnya diselesaikan ke alamat pribadi |
CLI /login: Could not resolve gateway host <host> | Mesin tidak dapat menyelesaikan nama DNS internal gateway, biasanya karena tidak berada di jaringan korporat | Minta pengembang terhubung ke jaringan atau VPN Anda, lalu coba ulang /login |
Boot keluar dengan kesalahan validasi konfigurasi yang menamai store.postgres_url | Tidak ada Postgres yang dikonfigurasi; gateway memerlukan Postgres | Atur store.postgres_url. Untuk pengembangan lokal, gunakan kontainer sekali pakai: docker run --rm -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres. |
Boot keluar: requires the native binary | Berjalan di bawah Node bukan biner asli | Instal Claude Code dengan salah satu metode instalasi mandiri |
Boot keluar dengan kesalahan penemuan OIDC setelah config.load | oidc.issuer tidak dapat dijangkau, atau rantai TLS tidak dipercaya | Periksa issuer dapat dijangkau dari pod dan melayani /.well-known/openid-configuration. Atur ca_cert_pem untuk PKI pribadi. |
| Boot keluar dengan kesalahan izin Postgres | Peran aplikasi kekurangan CREATE TABLE | Buat skema sebelumnya dengan peran admin dan berikan DML ke peran aplikasi, atau berikan DDL sementara untuk boot yang menerapkan migrasi baru |
/oauth/callback menampilkan “Sign-in could not be completed” | Domain email ditolak, validasi id_token gagal, atau email_verified secara eksplisit false, yang gateway selalu tolak tanpa override | Periksa allowed_email_domains dan bahwa IdP mengembalikan klaim email yang diverifikasi. Untuk email_verified: false, perbaiki verifikasi sisi IdP. Jika IdP Anda memancarkan email di bawah nama klaim berbeda, atur oidc.email_claim. |
Log: token exchange failed: id_token missing email claim | IdP tidak menyertakan email dalam id_token secara default. Penolakan ini hanya terjadi ketika allowed_email_domains diatur; tanpanya, email yang hilang mencetak sesi tanpa email | Konfigurasikan IdP untuk memancarkan email dalam id_token. Okta: tambahkan email ke klaim ID-token server otorisasi khusus. Entra: tambahkan email sebagai klaim opsional pada pendaftaran aplikasi. PingFederate: aktifkan Kebijakan OpenID Connect yang memancarkan email. Jika IdP melayani email dari endpoint userinfo tetapi tidak akan menyertakannya dalam id_token, seperti server otorisasi org Okta, atur oidc.userinfo_fallback: true. |
Setiap permintaan Bedrock mengembalikan 502; log menunjukkan Could not load credentials from any providers | Di EC2, batas hop default IMDSv2 sebesar 1 memblokir permintaan metadata instance dari dalam kontainer. Boot dan /readyz lulus bagaimanapun karena AWS SDK menyelesaikan kredensial instance pada permintaan pertama, bukan pada konstruksi klien | Naikkan batas hop dengan aws ec2 modify-instance-metadata-options --instance-id <id> --http-put-response-hop-limit 2, atau atur dalam template peluncuran. Perubahan berlaku untuk setiap kontainer pada instance. Lebih suka peran tugas ECS di mana tersedia, yang membaca kredensial dari endpoint kredensial kontainer ECS dan menghindari perubahan sepenuhnya, atau terapkan perubahan pada instance gateway khusus untuk membatasi eksposur. |
| Kesalahan IdP: unknown or unsupported scope | IdP menolak scope yang tidak dikenalinya | Atur oidc.scopes ke tepat daftar yang diterima IdP Anda; itu harus menyertakan openid. Default adalah openid profile email offline_access. |
Sesi tidak secara diam-diam memperbarui setelah menetapkan oidc.scopes | offline_access dijatuhkan dari override | Tambahkan offline_access kembali jika IdP Anda mendukungnya. Tanpa token refresh, pengembang menjalankan kembali login browser setiap session.ttl_hours. |
| Browser menampilkan “This request came from another site and was blocked” | POST formulir lintas situs, diblokir sebagai perlindungan CSRF. Diharapkan untuk halaman tertanam atau diproksi | Buka tautan verifikasi secara langsung |
| Chrome memblokir tombol Approve dengan “Refused to send form data … violates … Content Security Policy directive: form-action”, tetapi halaman yang sama berfungsi di Safari atau Firefox | Chrome memberlakukan form-action terhadap seluruh rantai pengalihan. IdP Anda mengalihkan ke host kedua yang tidak ada dalam daftar putih. | Tambahkan setiap asal tambahan dalam rantai pengalihan ke oidc.form_action_origins. Buka Chrome DevTools → Console pada halaman Approve untuk melihat asal mana yang diblokir. |
| Masuk selesai di IdP tetapi callback gagal, dengan kesalahan CSP di Chrome atau “this sign-in link has expired” di Safari | IdP mengembalikan kode melalui response_mode=form_post, yang secara otomatis mengirimkannya lintas asal melalui POST ke /oauth/callback. Chrome memblokir itu di bawah CSP ketat; Safari memungkinkan pengiriman tetapi callback hanya membaca string kueri. | Pastikan IdP Anda menghormati response_mode=query, yang gateway minta secara eksplisit sehingga callback adalah pengalihan biasa |
| Login bekerja secara lokal tetapi gagal di belakang ALB | public_url tidak diatur, jadi IdP mendapat asal http:// dalam sebagai redirect_uri | Atur listen.public_url ke asal https:// eksternal |
| Pengembang melihat prompt kepercayaan berulang kali | Sertifikat TLS berputar per replika atau per permintaan | Gunakan sertifikat stabil di ingress, atau hentikan TLS sekali dan jalankan replika melalui HTTP biasa secara internal |
CLI /login: “Could not verify the gateway’s TLS certificate” atau SELF_SIGNED_CERT_IN_CHAIN | Rantai TLS gateway ditandatangani oleh CA pribadi bukan dalam toko kepercayaan host CLI | Claude Code membaca toko kepercayaan OS secara default pada biner asli dan pada Node 22.15 atau lebih baru; CLAUDE_CODE_CERT_STORE mengontrol perilaku ini. Jika CA diinstal dalam toko kepercayaan OS, pastikan pengembang berada di runtime saat ini. Jika tidak atur NODE_EXTRA_CA_CERTS ke PEM sertifikat CA sebelum meluncurkan. Prompt sidik jari koneksi pertama masih berlaku. |
Terkait
- Gambaran umum gateway aplikasi Claude: quickstart dan koneksi pengembang
- Referensi konfigurasi: setiap opsi
gateway.yaml