Skip to main content
Deployment gateway aplikasi Claude dikonfigurasi oleh satu file YAML, secara konvensional gateway.yaml. File ini mendefinisikan semua yang dilakukan gateway: di mana ia mendengarkan, bagaimana pengembang masuk, ke mana inference pergi, dan kebijakan serta telemetry mana yang berlaku. Halaman ini adalah referensi untuk setiap opsi dalam file tersebut. Untuk menulis yang pertama, mulai dari quickstart, yang membangun config minimal yang berfungsi dan menjalankannya. Setelah Anda memiliki config yang Anda sukai, deployment guide mencakup containerizing dan hosting di Kubernetes, Cloud Run, atau platform Anda sendiri. Gateway membaca file sekali, saat startup, dengan claude gateway --config /path/to/gateway.yaml. Setiap opsi divalidasi terhadap schema saat boot, jadi config yang salah format gagal saat start dengan error tingkat field daripada saat penggunaan pertama. Complete example di akhir halaman ini menggunakan setiap bagian.

Struktur file

Lima bagian diperlukan. Setiap bagian lainnya opsional, dan bagian yang dihilangkan mengambil default-nya. Kunci yang tidak dikenal gagal boot, jadi typo muncul sebagai error bernama daripada setting yang diabaikan secara diam-diam. Bagian yang diperlukan:
  • listen: bind address, public URL, TLS termination
  • oidc: identity provider Anda (IdP), termasuk issuer, client, claim mapping, dan siapa yang boleh masuk
  • session: bearer tokens yang dimint gateway, dengan secret dan lifetime
  • store: PostgreSQL, untuk device grants dan rate-limit counters
  • upstreams: ke mana inference pergi, apakah Anthropic, Amazon Bedrock, Claude Platform di AWS, Agent Platform Google Cloud, atau Microsoft Foundry
Bagian opsional:
  • admin: Admin API auth dan retention untuk spend limits
  • enforcement: perilaku spend-limit fail-open atau fail-closed
  • pricing: contracted rates dan multiplier untuk spend meter dan untuk cost figures yang dilihat developer
  • models dan auto_include_builtin_models: daftar model yang dikurasi admin dan per-upstream IDs
  • managed: managed settings policies berdasarkan IdP group
  • telemetry: OTLP forwarding ke observability stack Anda
  • access_control, limits, timeouts, rate_limits: IP allow/deny, request size caps, upstream time-to-first-byte, dan per-IP sign-in limits
  • load_test_mode: load test gateway tanpa memanggil model provider

Ekspansi secret

Jangan tulis secrets seperti client_secret, jwt_secret, atau postgres_url langsung di gateway.yaml. Referensikan mereka dengan salah satu bentuk di bawah, dan gateway menyelesaikan nilai saat boot dari environment variable atau file:

Bagian yang diperlukan

listen

Blok listen mengontrol di mana gateway melayani: bind address dan port, origin yang terlihat secara eksternal, dan optional TLS termination.

oidc

Blok oidc menghubungkan gateway ke identity provider Anda dan memutuskan siapa yang dapat masuk. Ini menamai issuer dan OAuth client, memetakan claims yang membawa email dan groups, dan membatasi sign-in berdasarkan email domain atau group. OpenID Connect (OIDC) adalah protokol SSO yang digunakan gateway dengan identity provider Anda; lihat Identity provider setup untuk apa yang harus didaftarkan di sisi IdP.

Autentikasi client dengan sertifikat

Jika identity provider Anda mengautentikasi OAuth client dengan sertifikat alih-alih client secret, seperti yang dilakukan Microsoft Entra dengan certificate credentials, atur token_endpoint_auth_method: private_key_jwt. Memerlukan Claude Code v2.1.284 atau lebih baru di server gateway. Dengan konfigurasi ini gateway tidak mengirim secret. Gateway melakukan autentikasi ke token endpoint IdP dengan JWT berumur pendek yang ditandatangani dengan private key sertifikat ketika developer masuk dan setiap kali gateway me-refresh sesi mereka. JWT ditandatangani dengan RS256 dan mengidentifikasi sertifikat melalui header thumbprint x5t dan x5t#S256, bukan kid. IdP Anda harus dapat menemukan sertifikat yang terdaftar berdasarkan thumbprint.
1

Buat key dan sertifikat

Buat RSA private key yang tidak terenkripsi dengan panjang minimal 2048 bit, dalam bentuk PEM PKCS#8 atau PKCS#1, beserta sertifikat untuknya. Gateway menolak untuk memulai dengan key apa pun yang tidak memenuhi kondisi ini. Perintah openssl ini membuat key seperti itu dengan sertifikat self-signed yang berlaku selama satu tahun:
Perintah ini menulis idp-client.key dan idp-client.crt ke direktori saat ini. Salin atau mount kedua file ke lokasi yang dapat dibaca gateway. Contoh di langkah 3 menggunakan /etc/gateway/.
2

Unggah sertifikat ke IdP

Unggah sertifikat, bukan private key, ke app registration gateway di IdP.
3

Tambahkan key dan sertifikat ke gateway.yaml

Berikan private key dan sertifikat kepada gateway dalam blok client_assertion. Hilangkan client_secret, karena gateway menolak untuk memulai ketika field itu diatur bersama dengan private_key_jwt. Blok oidc ini mengautentikasi gateway ke tenant Microsoft Entra dengan sertifikat:
Kedua nilai adalah isi PEM, bukan path file, jadi muat file yang di-mount dengan ${file:/path} seperti pada contoh. Gateway menolak untuk memulai kecuali certificate_pem adalah satu sertifikat PEM tunggal, tanpa sisa chain-nya, yang public key-nya cocok dengan private_key_pem.
4

Restart gateway dan periksa boot log

Restart gateway dan temukan baris ini di boot log:
Bandingkan SHA-1 thumbprint dengan yang ditampilkan IdP untuk sertifikat yang Anda unggah. Jika sertifikat telah kedaluwarsa atau belum berlaku, gateway tetap memulai tetapi mencatat peringatan bahwa sign-in dan refresh akan gagal sampai Anda menggantinya. Untuk memastikan IdP menerima sertifikat, minta satu developer masuk melalui gateway.

Rotasi sertifikat client

Gateway membaca key dan sertifikat sekali saat boot, jadi file yang berubah baru berlaku setelah restart. Lakukan rotasi dengan urutan ini agar tidak ada permintaan token yang menyajikan sertifikat yang tidak dimiliki IdP:
  1. Unggah sertifikat baru ke IdP di samping sertifikat lama.
  2. Ganti file key dan sertifikat yang dimuat oleh gateway.yaml, lalu restart gateway.
  3. Hapus sertifikat lama dari IdP.

IdP requests through a forward proxy

Inference upstreams menghormati HTTPS_PROXY dan HTTP_PROXY pada setiap version. Requests gateway sendiri ke IdP, discovery, JWKS, token, dan userinfo, langsung kecuali Anda menetapkan oidc.use_proxy: true, yang memerlukan v2.1.227 atau lebih baru. Ketika proxy variable diatur, use_proxy unset, dan issuer tidak dicakup oleh NO_PROXY, gateway menjaga requests tersebut langsung dan mencatat notice saat boot meminta Anda memilih; use_proxy: false menjaganya langsung dan membisukan notice. Dengan use_proxy: true, pod menyelesaikan hostname setiap IdP endpoint itu sendiri dan meminta proxy untuk CONNECT ke resolved IP address, jadi proxy harus menerima CONNECT ke IP address setiap host yang discovery document namai, bukan hanya issuer. Gunakan http:// proxy URL. ca_cert_pem dan SSRF guard berlaku pada proxied path juga. Proxy-only egress mengubah keduanya: saat aktif, IdP requests mengikuti proxy kecuali Anda menetapkan use_proxy: false, dan gateway menyerahkan proxy setiap hostname IdP tanpa menyelesaikannya terlebih dahulu.

Proxy-only egress

Atur CLAUDE_GATEWAY_PROXY_IS_EGRESS_BOUNDARY=1 di environment gateway, di sebelah HTTPS_PROXY, ketika pod mencapai host lain hanya melalui forward proxy itu dan tidak dapat menyelesaikan public DNS names itu sendiri, atau ketika proxy menolak CONNECT ke IP address. Memerlukan v2.1.277 atau lebih baru. Ini adalah environment variable daripada kunci gateway.yaml jadi tidak ada apa pun dalam file config yang dapat melonggarkan address check gateway.
Gateway mencatat satu baris network: saat boot saat proxy-only egress aktif. Setiap baris di bawah adalah satu class dari outbound request pada gateway dengan HTTPS_PROXY diatur, secara default dan saat proxy-only egress aktif. Proxy-only egress tetap off kecuali environment gateway memenuhi ketiga kondisi ini:
  • HTTPS_PROXY atau HTTP_PROXY diatur.
  • NO_PROXY dan no_proxy kosong. Jika platform Anda menyuntikkan salah satu ke pods, atur keduanya ke nilai kosong pada container gateway. Mendaftar telemetry collector di NO_PROXY menjaga proxy-only egress off.
  • CLAUDE_GATEWAY_ALLOW_LOOPBACK tidak diaktifkan. Collector atau IdP pada loopback pod sendiri tidak dapat dikombinasikan dengan proxy-only egress, karena loopback address yang diserahkan ke proxy akan menjadi proxy host sendiri, jadi berikan services tersebut address yang dapat dicapai proxy. Untuk alasan yang sama gateway menolak localhost-style names sepenuhnya saat proxy-only egress aktif.
Ketika salah satu kondisi itu tidak terpenuhi, gateway mencatat warning saat boot menamai variable yang menghentikannya dan menjaga default behavior. Setelah proxy-only egress aktif, izinkan setiap destination di proxy, termasuk internal collector dan host apa pun yang dikonfigurasi oleh IP address. Anda masih dapat menjaga internal IdP langsung dengan oidc.use_proxy: false.
Aktifkan ini hanya ketika allowlist proxy setidaknya setat ketat dengan check gateway sendiri. Proxy harus menolak cloud metadata endpoints seperti 169.254.169.254 dan metadata.google.internal, link-local addresses, dan loopback proxy host sendiri, dan harus menolaknya oleh address yang name resolves ke, bukan hanya oleh name, karena gateway tidak lagi menangkap hostname yang resolves ke salah satu dari mereka. Proxy yang terhubung ke mana pun diminta menghapus SSRF guard gateway untuk requests ini.

session

Blok session membentuk bearer tokens yang dimint gateway setelah sign-in: secret yang menandatanganinya dan berapa lama mereka hidup.

store

Blok store menunjukkan gateway ke database PostgreSQL-nya, yang menyimpan device grants dan rate-limit counters. Untuk local development, arahkan postgres_url ke throwaway Postgres container, misalnya docker run --rm -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres.

upstreams

upstreams adalah ordered list. Gateway meneruskan inference ke upstream pertama yang menyelesaikan model yang diminta. Pada 5xx, 429, 401, 403, 404, atau timeout gateway failover ke next upstream; 4xx lainnya tidak, karena error tersebut dapat diatribusikan ke request daripada upstream. 401 atau 403 berarti upstream menolak credential yang digunakan gateway, atau menolak aksesnya, misalnya ke model yang diminta. 404 berarti upstream itu tidak melayani model yang diminta, jadi upstream yang lebih baru dalam list masih bisa. Jika Anda menetapkan forward_user_identity: true pada upstream, 429 yang dikembalikan ke request yang membawa email developer tidak failover. Lihat bagaimana per-user limit denial mencapai developer. Failover pada 404 memerlukan gateway v2.1.198 atau lebih baru. Release sebelumnya mengembalikan 404 pertama ke client bahkan ketika upstream yang lebih baru dalam list melayani model. Multiple upstreams dari provider yang sama harus menetapkan distinct name:. Amazon Bedrock, Claude Platform on AWS, Google Cloud’s Agent Platform, dan Microsoft Foundry clients dibangun sekali saat startup, dan SDK mereka refresh credentials secara internal, jadi rotating cloud credentials tidak memerlukan restart. Static Anthropic API keys dan bearers dibaca saat startup; lihat Anthropic API.

Upstream error messages

Gateway mengembalikan satu response upstream, atau 502 miliknya sendiri, tergantung bagaimana upstreams menjawab:
  • Upstream mengembalikan status yang gateway tidak fail over pada: response upstream itu. Gateway tidak mencoba upstreams lebih lanjut.
  • Setiap upstream yang gateway coba gagal dengan cara yang fails over pada: 429 terakhir. Ketika tidak ada yang mengembalikan 429, gateway lebih suka, secara berurutan, 401 atau 403 terakhir, 404 terakhir, dan 501 terakhir. Ketika tidak ada yang mengembalikan salah satu dari itu, 502 gateway sendiri, all upstreams failed (N attempted), di mana N menghitung setiap entry dalam upstreams, termasuk entries yang gateway lewati karena mereka tidak melayani model yang diminta.
Ketika gateway mengembalikan response upstream, ia menjaga status code upstream. Apakah ia menjaga message upstream tergantung pada provider. Body error upstream Anthropic API mencapai developer tidak berubah. Amazon Bedrock, Claude Platform on AWS, Google Cloud’s Agent Platform, dan Microsoft Foundry upstreams dapat menamai account IDs, role ARNs, dan project IDs Anda dalam text error mereka. Gateway mencatat text lengkap itu dalam operational log. Apa yang developer lihat dari upstreams itu tergantung pada rejection:
  • 400 atau 413 dalam Anthropic’s standard error envelope: message upstream sendiri, seperti prompt is too long. Claude Platform on AWS, Agent Platform, dan Microsoft Foundry mengembalikan envelope ini untuk model API rejections.
  • 400 atau 413 dalam provider’s own shape: token capability_rejected:. Ketika gateway tidak dapat mengklasifikasi rejection, upstream rejected the request pada 400 atau request too large for this upstream pada 413.
  • Status apa pun: generic per-status copy, seperti upstream rate limit exceeded pada 429.
Misalnya, gateway menggantikan Amazon Bedrock’s Input is too long for requested model. dengan capability_rejected: prompt_too_long. Claude Code compacts automatically pada token itu, seperti yang dilakukan pada prompt is too long. Menjaga cloud upstream’s 400 atau 413 message, atau menggantinya dengan token capability_rejected:, memerlukan gateway v2.1.233 atau lebih baru.

Anthropic API

Minimal Anthropic upstream adalah API key dari Claude Console:
Dua bentuk credential berbeda dalam header yang mereka kirim:
  • api_key: mengirim x-api-key. Rotate di Claude Console dan update env var.
  • oauth_token: mengirim Authorization: Bearer. Gunakan bentuk bearer ketika org Anda mengeluarkan short-lived tokens daripada long-lived API keys. Bearer dibaca sekali saat startup, jadi refresh dengan remount secret dan restart.
Daripada static key atau bearer, Anda dapat menggunakan Workload Identity Federation. Buat federation rule dengan mengikuti Workload Identity Federation guide, kemudian mount workload’s OIDC JWT Anda sebagai file, seperti Kubernetes projected service-account token atau CI platform’s id-token. Gateway menukar JWT untuk short-lived bearer dan refresh secara otomatis. Token file dibaca ulang pada setiap exchange, jadi rotated projected tokens diambil tanpa restart.
Anda dapat menunjukkan provider: anthropic upstream’s base_url ke proxy yang Anda jalankan daripada ke Anthropic API. Untuk memberitahu proxy mana developer yang mengirim setiap request, atur forward_user_identity: true pada upstream itu. Proxy kemudian dapat mengatribusikan spend per developer. Memerlukan gateway yang menjalankan Claude Code v2.1.233 atau lebih baru. Misalnya, untuk proxy di upstream-gateway.internal.example.com:
Gateway menambahkan headers ini ke setiap request yang diteruskan ke upstream itu. Ketika IdP token tidak membawa email, gateway mengirim hanya x-claude-gateway-user-id dan menghilangkan dua email headers. Jika IdP Anda menempatkan email di claim yang berbeda, atur oidc.email_claim ke claim itu. Ketika proxy Anda menjawab 429 ke request yang membawa email developer, gateway mengembalikan response itu ke developer apa adanya daripada failover ke next upstream, jadi per-user budget atau rate limit proxy Anda berlaku. Response lainnya dari proxy mengikuti failover rules biasa. Jika token IdP developer tidak membawa email, gateway meneruskan requests mereka tanpa email headers, jadi 429 ke salah satu requests itu menghitung sebagai upstream capacity dan failover. Sebelum v2.1.267 di server gateway, setiap 429 failover. Atur forward_user_identity hanya pada upstream yang base_url adalah proxy yang Anda operasikan. Gateway mengirim developer emails ke server apa pun yang base_url namai. Jika base_url adalah Anthropic API, yang merupakan default, gateway menolak untuk memulai.

Amazon Bedrock

Untuk client-side Amazon Bedrock deployment yang digantikan atau di-front oleh gateway, lihat Claude Code on Amazon Bedrock. Gateway-side upstream:
Empty auth block menggunakan AWS SDK’s default credential chain: env vars, ~/.aws/credentials, ECS task role, EC2 instance metadata, atau IRSA pada EKS. Dalam production, berikan gateway pod IAM role daripada embedding static keys dalam container image. Explicit credentials harus lengkap: gateway gagal saat boot ketika aws_access_key_id dan aws_secret_access_key tidak diatur bersama, atau ketika aws_session_token diatur tanpa mereka. Sebelum v2.1.207, partial auth: block lulus validasi. Untuk menerapkan Amazon Bedrock guardrail ke setiap inference request yang gateway kirim melalui Bedrock upstream, tambahkan blok guardrail ke upstream itu. Memerlukan Claude Code v2.1.281 atau lebih baru di server gateway.
Gateway tidak mendukung guardrail input tags. Ini tidak menambahkan guard content tags ke prompts, jadi guardrail filter yang Amazon Bedrock terapkan hanya ke tagged input tidak berjalan pada traffic melalui gateway. Untuk filter mana yang bergantung pada input tags, lihat input tags dalam dokumentasi Amazon Bedrock.
Juga berikan bedrock:ApplyGuardrail pada guardrail ke principal yang menandatangani requests upstream ini: AWS principal gateway, atau dengan assume_role role yang dinamai di role_arn. Atur guardrail pada setiap bedrock upstream atau pada tidak ada. Gateway menolak untuk memulai pada mix, karena failover dapat mengirim request ke Bedrock upstream yang tidak memiliki guardrail. Guardrail mencakup Bedrock upstreams saja. Jika Anda mendaftar provider lain di upstreams, gateway mengirim requests ke provider itu tanpa guardrail, atau menolak untuk memulai jika provider itu adalah mantle. Ketika /v1/messages request yang body-nya membawa field amazon-bedrock-*, seperti amazon-bedrock-guardrailConfig, mencapai Bedrock upstream yang memiliki guardrail diatur, gateway menjawab 400 daripada meneruskannya. Atur assume_role pada Bedrock upstream dan gateway menggunakan AWS identity-nya sendiri hanya untuk memanggil sts:AssumeRole pada role yang Anda namai, yang dapat berada di AWS account yang berbeda dari gateway. Setiap Bedrock request dari upstream itu ditandatangani dengan credentials satu jam yang STS kembalikan, jadi tidak ada long-lived access key yang melintasi accounts. Memerlukan gateway yang menjalankan Claude Code v2.1.281 atau lebih baru. Gateway sebelumnya menolak untuk memulai ketika menemukan key.
Blok assume_role mengambil tiga keys: Role’s trust policy menamai gateway’s own principal, seperti IRSA atau ECS task role-nya. Principal itu memerlukan sts:AssumeRole pada role dan tidak ada Bedrock permission sendiri. Drop Condition jika Anda menetapkan tidak ada external_id.
  • Jika STS menolak atau tidak dapat dijangkau, gateway tidak mengirim request dengan credentials upstream sendiri. Ini mencatat STS error dengan apa yang harus diperiksa, kemudian mencoba upstream berikutnya yang Anda daftarkan. Upstream error messages mencakup apa yang client terima ketika tidak ada upstream yang berhasil. Upstream yang lebih baru tanpa assume_role akan melayani request dengan credentials-nya sendiri, jadi daftarkan satu hanya jika itu adalah apa yang Anda inginkan.
  • Gateway memanggil regional STS endpoint sts.<region>.amazonaws.com, yang network-nya harus jangkau. Untuk FIPS endpoint, atur AWS_USE_FIPS_ENDPOINT=true di environment gateway daripada use_fips_endpoint di AWS config file.
  • assume_role berlaku pada provider: bedrock saja dan memerlukan SigV4 source credentials: gateway menolak untuk memulai ketika itu diatur di sebelah aws_bearer_token.
  • Setiap developer yang gateway terima dapat menggunakan upstream ini; managed mengatur developer mana yang dapat menggunakan model mana. Untuk menjaga model yang dilayani melalui role dari juga dilayani dari account lain, berikan itu custom id yang upstream_model map-nya hanya memiliki upstream ini’s name. Untuk id seperti itu gateway melewati setiap upstream lain, jadi baik request maupun token count untuk request yang dibatalkan tidak dapat failover ke account lain. Request untuk built-in model name masih dapat mencapai upstream ini, dan gateway menandatanganinya dengan role yang sama. Daftarkan upstream ini terakhir kecuali account-nya juga harus melayani model tersebut.
Contoh ini memberikan satu model custom id yang hanya isolated upstream melayani:
Secara default gateway menandatangani setiap Bedrock request dengan satu credential, jadi AWS melihat semua requests developer di bawah satu IAM principal. Tambahkan session_name: email ke assume_role dan gateway memanggil sts:AssumeRole sekali per developer per jam, dengan session name diatur ke email developer itu, dan menandatangani requests mereka dengan credentials yang dikembalikan, jadi setiap requests developer mencapai AWS di bawah assumed-role session mereka sendiri. Role dapat berada di account gateway sendiri. Memerlukan gateway yang menjalankan Claude Code v2.1.281 atau lebih baru. Cost attribution on AWS mencakup IAM role dan di mana AWS billing menunjukkan sessions.
session_name memilih claim verified mana yang menjadi AWS RoleSessionName: email atau sub. Gateway menulis karakter apa pun selain ASCII letters, digits, dan _+,.@- sebagai =XX hex per UTF-8 byte, dan memendekkan result yang lebih panjang dari 64 characters ke prefix plus hash, jadi setiap session name developer tetap valid dan unique. Request dari developer yang token-nya tidak memiliki claim tidak dikirim melalui upstream ini, dan operator log mengatakan untuk switch ke sub atau atur oidc.email_claim. Active developer biaya satu STS call per jam per gateway replica, dan concurrent first requests berbagi satu call. Gateway juga membuat satu call sendiri pada role ini: token count untuk request yang client abaikan, jadi spend limits tetap akurat. Count itu dan one-token fallback request-nya ditandatangani oleh shared claude-apps-gateway session, jadi AWS mengatribusikan fallback ke claude-apps-gateway daripada ke developer. Untuk strict per-developer attribution, atur assume_role dengan session_name pada setiap Bedrock upstream yang Anda daftarkan. Upstream tanpa itu menandatangani requests yang dilayaninya dengan credentials-nya sendiri.

Amazon Bedrock Mantle endpoint

Provider mantle mengirim inference ke Mantle endpoint Amazon Bedrock. Provider ini memerlukan Claude Code v2.1.283 atau lebih baru di server gateway. Release gateway sebelumnya menolaknya saat boot, jadi upgrade setiap replica sebelum menambahkannya. Contoh di bawah menempatkan Mantle pertama, dengan upstream Amazon Bedrock di belakangnya untuk melayani setiap model yang tidak dicantumkan dalam field models:
Tabel di bawah mencantumkan field yang spesifik untuk upstream mantle. Berikan AWS identity upstream tersebut IAM actions milik Mantle sendiri untuk inference dan penghitungan token, yang dicantumkan di Use the Mantle endpoint. Untuk Mantle model ID yang tidak dikenal gateway, tambahkan entry ke blok models: tingkat atas yang upstream_model-nya memetakan name upstream ini ke ID tersebut. Kemudian cantumkan juga id entry itu di field models upstream ini. Pengaturan guardrail dan assume_role pada upstream bedrock tidak berlaku untuk requests yang dilayani Mantle:
  • guardrail: gateway tidak menerapkan Bedrock guardrail pada requests yang dikirimnya ke Mantle, jadi gateway menolak untuk memulai ketika upstream mantle didaftarkan sementara upstream bedrock mana pun menetapkan guardrail.
  • assume_role: upstream mantle tidak menerima assume_role. Requests yang dilayani Mantle dikirim dengan credentials auth milik upstream mantle sendiri, dan tidak diatribusikan per developer.
Untuk arti error responses milik Mantle sendiri, lihat Mantle endpoint errors.

Claude Platform on AWS

Claude Platform on AWS melayani first-party Anthropic API pada infrastruktur AWS di aws-external-anthropic.<region>.api.aws. Ini menggunakan first-party model IDs, menghormati header anthropic-beta seperti yang dikirim, dan melayani count_tokens, jadi tidak ada terjemahan spesifik Bedrock yang berlaku. Provider anthropicAws memerlukan Claude Code v2.1.198 atau lebih baru; release gateway sebelumnya menolaknya saat boot. Untuk client-side deployment dari platform yang sama, lihat Claude Code on Claude Platform on AWS. Gateway-side upstream:
Platform berjalan di akun AWS terpisah dari Amazon Bedrock dan menandatangani SigV4 requests untuk nama service-nya sendiri, aws-external-anthropic, jadi Bedrock-scoped IAM role tidak mengotorisasinya. API key di auth.api_key mengambil precedence ketika SigV4 credentials juga diatur. Empty auth block menggunakan AWS SDK’s default credential chain, chain yang sama yang digunakan upstream Amazon Bedrock. Karena platform menyelesaikan first-party model IDs, built-in catalog routes ke sana tanpa models: block. Ketika Anda mengkurasi daftar models:, key entry anthropicAws: dengan first-party ID.

Google Cloud Agent Platform

Untuk equivalent client-side setup, lihat Claude Code on Google Cloud. Gateway-side upstream:
Empty auth block menggunakan Application Default Credentials: GOOGLE_APPLICATION_CREDENTIALS, GCE metadata, atau GKE Workload Identity. Service-account JSON key files didukung tetapi tidak disarankan; gunakan Workload Identity atau attach service account ke GCE atau Cloud Run instance. Atur region: global untuk menggunakan global endpoint untuk Google Cloud’s Agent Platform daripada regional. Google kemudian route setiap request ke available region, jadi Anda tidak track per-region model availability. Menetapkan region spesifik pin setiap request ke sana.

Microsoft Foundry

Untuk client-side Microsoft Foundry deployment, lihat Claude Code on Microsoft Foundry. Gateway-side upstream:
use_azure_ad: true resolves melalui DefaultAzureCredential: Managed Identity pada AKS, ACI, atau App Service; Azure CLI; atau environment credentials. API keys bekerja tetapi project-wide dan tidak rotate secara otomatis. Endpoint Microsoft Foundry diturunkan dari resource:; atur optional base_url untuk override untuk sovereign clouds seperti Azure Government.

Static headers on upstream requests

Untuk menambahkan fixed headers ke requests yang gateway kirim ke satu upstream, atur headers: pada upstream itu. Gunakan ketika proxy yang Anda jalankan di depan provider routes atau attributes traffic oleh header. headers: memerlukan Claude Code v2.1.277 atau lebih baru di server gateway. Gateway sebelumnya menolak untuk memulai ketika menemukan key. Upgrade setiap replica sebelum Anda menambahkan key, dan hapus key sebelum Anda rollback ke versi sebelumnya. Headers pergi ke server yang base_url namai, atau ke endpoint provider sendiri ketika base_url unset. Provider menerimanya juga kecuali proxy Anda menghapusnya. Contoh ini mencapai upstream provider: vertex melalui proxy di upstream-proxy.internal.example.com. Ini menetapkan header x-source yang proxy baca, dan mengirim token dari environment variable PROXY_TOKEN sebagai x-proxy-token:
Values adalah printable ASCII text tanpa space di kedua ujung. Quote number, true, atau false jadi YAML membacanya sebagai text. Untuk menjaga secret keluar dari file config, gunakan secret expansion untuk memuat value dari environment variable dengan ${VAR} atau dari file dengan ${file:/path}. ${VAR} yang resolves ke empty value menghentikan gateway dari memulai. headers: bekerja pada setiap provider, dan setiap upstream mengirim hanya miliknya sendiri. Tidak setiap request yang gateway kirim ke upstream membawanya: Pada Amazon Bedrock atau Claude Platform on AWS upstream yang menandatangani requests dengan AWS SigV4, headers ini adalah bagian dari signature, jadi proxy Anda harus meneruskannya tanpa perubahan. Jika Anda menggunakan name yang gateway reserve, ia menolak untuk memulai, dan startup error menamai header. Reserved names termasuk:
  • authorization dan x-api-key
  • host, content-type, dan user-agent
  • Nama apa pun yang dimulai dengan anthropic-, x-goog-, x-amz-, atau x-amzn-

Multiple upstreams

Provider yang sama dapat muncul lebih dari sekali dengan distinct name:. Ini mencakup different regions, different accounts via different credential chains, provisioned throughput versus on-demand, dan cross-provider fallback. Gateway mencoba upstreams secara berurutan. 5xx, 429, 401, 403, 404, timeouts, dan missing-endpoint (501) failover; 4xx lainnya tidak. 429 adalah per-upstream capacity, jadi provisioned-throughput (PT) exhaustion failover ke on-demand. Jika Anda menetapkan forward_user_identity: true pada upstream, 429 ke request yang membawa email developer adalah per-user denial daripada dan tidak failover. Setiap request dimulai pada upstream pertama. Request mencapai upstream yang lebih baru hanya ketika setiap upstream di depannya telah gagal atau tidak melayani model yang diminta. Gateway menjaga tidak ada record dari failed upstreams, jadi saat upstream down, setiap request yang mencapainya masih mencobanya dan menunggu untuk gagal sebelum pindah. Untuk Anthropic API upstream, timeouts.upstream_ttfb_ms bounds wait pada down upstream. Setting ini tidak berlaku pada provider lainnya, di mana gateway menunggu hingga satu jam untuk upstream mulai merespons. 404 adalah per-upstream model availability, jadi upstream yang belum enable model tidak memblokir upstream yang lebih baru dalam list yang melayaninya. Upstream yang tidak dapat menyelesaikan model yang diminta dilewati tanpa network round-trip. Contoh ini route provisioned-throughput Amazon Bedrock allotment pertama, overflow ke on-demand dan second account, dan fallback ke Anthropic API terakhir:
Failover antara cloud providers, atau ke direct Anthropic API, mengubah agreement, geography, dan terms lainnya yang mengatur request. CLI menerapkan feature gating yang sama ke gateways terlepas dari upstream mana yang melayani request tertentu, jadi failover tidak mengirim body field yang upstream akan tolak.

Bagian opsional

admin

Opsional. Mengaktifkan /v1/organizations/spend_limits, yang mencerminkan Admin API publik Anthropic, dan penegakan pengeluaran per-pengembang di /v1/messages. Lihat Batas pengeluaran untuk cara batas ditetapkan dan diterapkan; bagian ini mencakup kunci gateway.yaml yang mengaktifkan fitur dan menyetelnya.

enforcement

Blok enforcement mengontrol bagaimana pemeriksaan batas pengeluaran berperilaku ketika penyimpanan tidak tersedia.

pricing

Blok pricing memberi tahu meter pengeluaran apa yang harus dikenakan alih-alih harga daftar USD, sehingga batas dan /effective mencerminkan tarif kontrak Anda. Jumlah tetap dalam USD dan tetap merupakan perkiraan, bukan faktur. Dua prasyarat:
  • Claude Code v2.1.227 atau lebih baru di server gateway. Versi sebelumnya menolak kunci yang tidak dikenal saat boot.
  • Blok admin: atau, di v2.1.268 atau lebih baru, blok managed: dengan setidaknya satu kebijakan. Gateway menolak untuk memulai dengan pricing diatur dan tidak ada blok, karena tidak ada yang akan membacanya.
Bagaimana meter mencocokkan baris override:
  • Baris menggantikan harga daftar untuk permintaan yang upstream, upstreams[].name, layani untuk model. Itu termasuk tarif fast mode yang lebih tinggi, jadi permintaan fast dan standard diukur dengan tarif yang sama empat.
  • ID bawaan seperti claude-sonnet-4-6, dicocokkan seperti models[].id, mencakup setiap bentuk tertanggal, bentuk Amazon Bedrock regional, atau bentuk Google Cloud’s Agent Platform yang meter hargai sebagai model itu. String lain apa pun, seperti alias atau ARN profil inferensi, cocok dengan ID yang dikirim klien atau string yang dikirim upstream, tidak peka huruf besar-kecil.
  • Di mana baris tumpang tindih, meter memilih baris yang paling spesifik daripada baris pertama: baris yang model adalah string model yang tepat dikirim upstream, kemudian baris yang cocok dengan ID yang tepat yang dikirim klien, kemudian baris yang menamai model bawaan.
  • Nama upstream yang tidak dikenal gagal boot, begitu juga dua baris untuk satu upstream yang menamai model yang sama, termasuk dua ejaan dari satu model bawaan. Gateway memperingatkan saat boot tentang baris yang tidak ada model yang dapat diminta yang dapat menggunakannya.
  • Permintaan pencarian web tetap pada harga daftar $0.01; pengali masih berlaku untuk mereka.
Untuk tarif per-region, berikan setiap region upstream bernama sendiri dan satu baris per upstream.

Tandai harga naik

Dengan v2.1.271 atau lebih baru di server gateway, Anda dapat menetapkan multiplier di atas 1, hingga 10, untuk mengukur lebih dari yang dikenakan penyedia, misalnya tarif chargeback internal. Contoh ini mengukur setiap permintaan pada 120% dari harga:
Dengan blok admin:, markup juga berlaku untuk batas pengeluaran. Meter menghitung 120% dari harga, sehingga pengembang mencapai batas mereka lebih cepat. Gateway mencatat peringatan saat boot yang mengatakan demikian. Pengali tidak mengubah apa yang dikenakan penyedia upstream untuk permintaan. Jika gateway juga mengirim tarif ke klien yang masuk, pengembang memerlukan Claude Code v2.1.271 atau lebih baru untuk melihat markup. Klien sebelumnya mengabaikan multiplier di atas 1 dan menunjukkan biaya tanpanya. Server gateway sebelumnya dari v2.1.271 menolak untuk memulai jika Anda menetapkan multiplier di atas 1.

Kirim tarif ke klien yang masuk

Dengan v2.1.268 atau lebih baru di server gateway, gateway juga menempatkan tarif dari pricing ke dalam kebijakan managed yang disajikannya, sebagai pengaturan terkelola modelPricing. Pengembang yang cocok dengan kebijakan kemudian melihat tarif pricing untuk upstream pertama yang melayani setiap ID model di /usage, baris status, dan OpenTelemetry. Pengembang yang tidak cocok dengan kebijakan apa pun tidak menerima pengaturan terkelola, sehingga angka mereka tetap pada harga daftar. Klien menerapkan pengaturan di Claude Code v2.1.242 atau lebih baru.
  • Apa yang ditambahkan gateway: kecuali blok cli kebijakan sudah menetapkan modelPricing, gateway menambahkan multiplier dan, untuk setiap ID model yang dapat diminta klien, baris override dari upstream pertama yang melayani ID itu. Tarif yang hanya upstream failover yang mengenakan tetap di gateway.
  • Opt satu kebijakan keluar: atur modelPricing ke {} dalam blok cli kebijakan itu, dan pengembangnya tetap pada harga daftar.
  • Pertahankan tarif kebijakan sendiri: kebijakan yang blok cli menetapkan modelPricing dengan multiplier atau overrides sendiri menyimpan modelPricing itu utuh, dan gateway tidak menambahkan tarif sendiri ke dalamnya.

models

Blok models adalah daftar model yang dikurasi admin opsional, disajikan di /v1/models dan digunakan untuk menerjemahkan ID model per upstream. Diperlukan untuk region Amazon Bedrock non-AS, ARN throughput-provisioned Amazon Bedrock, dan nama deployment Microsoft Foundry.
Setiap kunci di bawah upstream_model harus cocok dengan name dari upstream yang dikonfigurasi, yang default ke nama penyedia. Kunci yang tidak cocok dengan upstream apa pun gagal boot, jadi abaikan baris untuk penyedia yang tidak Anda gunakan.

managed

Blok managed mendefinisikan kebijakan akses berbasis peran yang dikunci pada grup IdP atau domain email. Kebijakan dievaluasi secara berurutan; kecocokan pertama dipilih, kemudian digabungkan ke basis catch-all match: {}. Mereka disajikan per-pengguna di GET /managed/settings dengan caching ETag/304.
Catch-all match: {}, secara konvensional terdaftar terakhir, diperlakukan sebagai lapisan dasar. Setiap kebijakan lain mewarisi kunci apa pun yang tidak ditetapkannya dari catch-all, sehingga entri per-peran hanya perlu mencantumkan apa yang berbeda dari default org. Aturan penggabungan tergantung pada jenis kunci:
  • Allow-lists: availableModels dan permissions.allow. Daftar kebijakan spesifik sepenuhnya menggantikan dasar.
  • Deny-lists dan hook arrays: permissions.deny, permissions.ask, disabledMcpjsonServers, deniedMcpServers, blockedMarketplaces, dan setiap array jenis acara hooks. Ini mengambil gabungan dasar dan kebijakan, sehingga hook deny atau audit di seluruh org tidak dapat secara tidak sengaja dijatuhkan oleh override per-peran.
  • Record-typed keys: env, modelOverrides, dan skillOverrides. Ini shallow-merge, jadi blok env per-peran menimpa kunci yang ditetapkannya dan mewarisi sisanya dari dasar.
availableModels juga diterapkan server-side di /v1/messages, jadi model yang ditolak mengembalikan 400 terlepas dari apa yang dikirim klien. Daftar kosong menolak setiap model. Pemeriksaan ini juga mencakup model tempat sesi dimulai sebelum pengembang memilih model, jadi mulai sesi pada model yang diizinkan kebijakan. Gateway memvalidasi nilai model itu sendiri sebelum meneruskan permintaan, sehingga nilai yang salah format tidak pernah mencapai upstream. Ini menolak permintaan dengan 400 dalam dua kasus:
  • Ketika nilai hilang atau kosong, gateway menolak permintaan dengan pesan model is required. Pemeriksaan itu memerlukan gateway yang menjalankan Claude Code v2.1.228 atau lebih baru.
  • Ketika nilai ada tetapi bukan string, gateway menolak permintaan dengan pesan model must be a string. Memerlukan gateway yang menjalankan Claude Code v2.1.221 atau lebih baru.
Pengguna yang diautentikasi yang tidak cocok dengan kebijakan apa pun mendapatkan default gateway, yang berarti setiap model dalam katalog dan tidak ada pengaturan terkelola. Tambahkan catch-all match: {} terakhir jika Anda menginginkan kebijakan default yang dijamin.
Gateway tidak menyimpan direktori pengguna sendiri. Ini mengotorisasi setiap permintaan dari token IdP pengguna, membaca keanggotaan grup dari klaim groups token dan mengevaluasi kebijakan terhadapnya. Tidak ada roster untuk menghitung dan tidak ada akun untuk dibuat sebelumnya, dan oleh karena itu tidak ada endpoint SCIM, karena tidak ada yang dapat disinkronkan SCIM ke dalamnya.Jalankan manajemen siklus hidup pengguna dan grup di sumber kebenaran, yang merupakan penyediaan SCIM asli IdP Anda atau platform tata kelola identitas khusus. Keanggotaan dan deprovisioning yang diatur di sana mengalir ke gateway secara otomatis melalui token. Jika Anda menginginkan penyediaan SCIM dari akun Claude itu sendiri, itu adalah kemampuan Claude for Enterprise.Dua jam propagasi berlaku:
  • Konten kebijakan: mengedit kebijakan dan men-deploy ulang mencapai klien yang terhubung pada polling pengaturan terkelola berikutnya, dalam satu jam, terlepas dari perubahan yang hanya berlaku pada peluncuran berikutnya
  • Keanggotaan grup: mengubah keanggotaan grup pengguna mengubah kebijakan mana yang cocok dengan mereka. Ini berlaku pada pembaruan sesi berikutnya, yang berarti penyegaran senyap berikutnya, dibatasi oleh session.ttl_hours.

Mulai sesi pada model yang diizinkan kebijakan

Jika availableModels tidak mencantumkan model default Claude Code, sesi mendapatkan respons 400 hingga pengembang memilih model yang terdaftar, misalnya dengan /model. Dalam sesi gateway, default-nya adalah model Opus yang dituju oleh alias opus, dan availableModels saja tidak mengubahnya. Untuk memperbaikinya, atur enforceAvailableModels: true dalam blok cli yang sama, lalu periksa jenis entri apa yang ada dalam daftar:
  • Alias seperti sonnet, atau ID bawaan seperti claude-sonnet-4-6: sesi dimulai pada salah satu model tersebut, dan opsi Default di /model mengarah ke model itu
  • Tidak ada alias atau ID bawaan dalam daftar: sesi masih dapat dimulai pada default bawaan, jadi atur juga model ke salah satu ID yang terdaftar dalam blok cli kebijakan itu
Kebijakan ini mencantumkan satu ID kustom yang didefinisikan oleh models, dan memulai sesi pada ID tersebut:

Nilai matcher yang menghentikan gateway saat boot

Saat boot, gateway memeriksa blok match dari setiap kebijakan dan daftar admin_groups. Salah satu dari nilai ini menghentikan gateway dengan kesalahan yang menamai bidang:
  • Daftar groups kosong
  • Entri kosong dalam groups atau dalam admin_groups
  • email_domain kosong
  • email_domain yang berisi @, whitespace, atau koma. Gateway memangkas nilai dan menghapus satu @ terkemuka sebelum pemeriksaan ini. Tulis satu domain telanjang, seperti example.com.
Sebelum v2.1.232, gateway dimulai dengan nilai-nilai ini. Setiap nilai memiliki efek ini:
  • email_domain kosong: gateway melewati pemeriksaan domain, jadi kebijakan dengan email_domain kosong dan tidak ada daftar groups cocok dengan setiap pengguna yang diautentikasi
  • Daftar groups kosong: kebijakan tidak cocok dengan siapa pun
  • email_domain berisi @, whitespace, atau koma: kebijakan tidak cocok dengan siapa pun
  • Entri kosong dalam groups atau dalam admin_groups: entri cocok dengan pengguna hanya ketika klaim IdP groups pengguna itu juga berisi entri kosong. Dalam admin_groups, kecocokan itu memberikan akses admin. Jika daftar admin_groups Anda tidak pernah berisi entri kosong, tidak ada yang mendapatkan akses admin dengan cara ini.

Apa yang masuk dalam cli

Setiap nilai cli adalah dokumen managed-settings.json Claude Code lengkap, skema yang sama yang akan Anda deploy melalui MDM atau /etc/claude-code/managed-settings.json, diekspresikan di sini sebagai YAML. CLI menerapkan dokumen yang dikirimkan di tingkat terkelola, di atas pengaturan pengguna dan proyek, menggantikan pengaturan yang dikelola server. Oleh karena itu, ini mengabaikan pengaturan dibatasi untuk sumber kebijakan tingkat OS, seperti policyHelper dan wslInheritsWindowsSettings. Gateway memvalidasi setiap dokumen terhadap skema pengaturan CLI saat boot, jadi kunci tingkat atas yang tidak dikenali gagal boot dengan kesalahan yang menamai setiap kunci yang menyinggung. Bagian skema yang sengaja terbuka masih menerima nilai arbitrer, karena klien yang lebih baru mungkin mengenali entri yang skema gateway tidak. Kunci terbuka ini termasuk env, pluginConfigs, dan kunci bersarang di bawah permissions. Karena validasi menggunakan skema yang disertakan dengan versi gateway yang diinstal, menempatkan kunci pengaturan tingkat atas yang diperkenalkan oleh rilis Claude Code yang lebih baru ke dalam konfigurasi terkelola memerlukan upgrade gateway terlebih dahulu. Smoke-test kebijakan baru pada satu klien sebelum menggulirnya. Referensi kunci lengkap ada di Pengaturan Claude Code. Kunci yang paling sering digunakan operator:
Karena pengaturan ini tiba melalui jaringan, CLI menunjukkan kepada setiap pengembang dialog persetujuan keamanan sebelum menerapkan pengaturan yang tercantum di bawah:
  • hooks
  • Variabel env yang memerlukan persetujuan pengembang, seperti proxy dan variabel URL dasar
  • pengaturan eksekusi shell seperti apiKeyHelper dan statusLine
  • pengaturan biner sandbox sandbox.bwrapPath, sandbox.socatPath, dan sandbox.ripgrep
  • Pengaturan sandbox yang mencegat lalu lintas, menyuntikkan kredensial, atau melemahkan isolasi, seperti sandbox.network.tlsTerminate dan pengaturan port proxy. Dialog persetujuan keamanan mencantumkan semuanya.
Memori persetujuan mencakup berapa lama persetujuan berlangsung dan kapan dialog muncul lagi. Claude Code menerapkan beberapa variabel env yang dikirimkan tanpa menunjukkan dialog persetujuan kepada pengembang, seperti pengaturan pemilihan model dan batas numerik. Variabel yang dikirimkan lainnya dapat memerlukan persetujuan pengembang sebelum berlaku; nilai proxy, URL dasar, atau OTEL_EXPORTER_OTLP_ENDPOINT yang tidak kosong selalu demikian. Ketika variabel yang dikirimkan memerlukan persetujuan, dialog menamakannya. Environment variable dan dialog persetujuan memiliki detail, termasuk empat toggle privasi yang nilai yang dikirimkan memutuskan apakah mereka memerlukan persetujuan. Sebelum v2.1.218, Claude Code menerapkan lebih sedikit variabel tanpa bertanya kepada pengembang, jadi lebih banyak variabel yang dikirimkan memicu dialog. Konfigurasi telemetri gateway mendorong OTEL_EXPORTER_OTLP_ENDPOINT, jadi menetapkan telemetry.forward_to memicu dialog pada setiap klien interaktif. Dialog melindungi mesin pengembang dari gateway yang dikompromikan atau bermusuhan, bukan organisasi dari pengembang. Jalankan non-interaktif, seperti claude -p atau sesi Agent SDK, tidak dapat menunjukkan dialog. Ini menerapkan pengaturan yang didorong untuk jalankan itu saja dan tidak merekamnya sebagai disetujui, jadi sesi interaktif pengembang berikutnya masih menunjukkan dialog untuk mereka. Sebelum v2.1.207, jalankan non-interaktif menyimpan pengaturan sebagai disetujui dan tidak ada sesi interaktif nanti yang menunjukkan dialog untuk mereka. Jika pengembang menolak, Claude Code keluar dari sesi itu daripada menerapkan kebijakan. Ketika Anda mendorong hook baru, atau variabel env apa pun yang memicu dialog, ke kebijakan yang luas, setiap pengembang yang cocok oleh karena itu melihat dialog dalam sesi interaktif mereka. Sesi interaktif yang berjalan menunjukkannya pada polling per jam berikutnya, dan sebaliknya muncul pada startup interaktif pengembang berikutnya. Kunci cli dinamai settings dalam rilis sebelumnya. Ejaan itu masih diterima sebagai alias, tetapi deployment baru harus menggunakan cli.

Context window dalam sesi terminal

Sesi terminal yang masuk melalui /login menggunakan context window 1M untuk Opus 4.7 dan yang lebih baru, Sonnet 5 dan yang lebih baru, serta model Fable. ID model tidak memerlukan sufiks [1m], dan sesi melakukan compact pada sekitar 967K token. Sebelum Claude Code v2.1.287 di mesin pengembang, Claude Code memperlakukan model Opus dan Fable sebagai memiliki window 200K kecuali ID model diakhiri dengan [1m]. Agar sesi terminal melakukan compact pada batas 200K sebagai gantinya, atur window auto-compact dalam env kebijakan:
Claude Code menerapkan variabel ini tanpa menunjukkan dialog persetujuan kepada pengembang. Variabel ini berlaku untuk setiap model, termasuk ID model yang diakhiri [1m]. Untuk menonaktifkan konteks 1M sebagai gantinya, atur CLAUDE_CODE_DISABLE_1M_CONTEXT: "1" dalam blok env yang sama. Claude Code kemudian memperlakukan setiap model sebagai memiliki window 200K. Dalam sesi interaktif, setiap pengembang menyetujui variabel ini dalam dialog persetujuan sebelum berlaku.

Server MCP dalam kebijakan

Untuk menyediakan server MCP ke klien Claude Code yang cocok dengan kebijakan, atur managedMcpServers dalam blok cli kebijakan itu. Anda memerlukan Claude Code v2.1.259 atau lebih baru di server gateway dan pada klien. Gateway memeriksa setiap entri saat boot dengan aturan yang sama yang diterapkan Claude Code pada klien, dan jika entri gagal pemeriksaan, gateway menolak untuk memulai dan menamai entri. Jika Anda menulis referensi ${VAR} dalam gateway.yaml, gateway menyelesaikannya dari lingkungannya saat boot melalui ekspansi rahasia sebelum menjalankan pemeriksaan entri, sehingga setiap klien yang cocok menerima nilai literal dan dapat membacanya. Panduan header untuk server yang disediakan berlaku untuk nilai yang diperluas. Gateway menolak ejaan .mcp.json mcpServers dalam blok cli, dan kesalahan bootnya menamai managedMcpServers sebagai kunci yang digunakan. Sebelum v2.1.259, gateway menolak definisi server MCP apa pun dalam blok cli.

Overlay Claude Desktop

Jika organisasi Anda juga men-deploy Claude Desktop, gateway yang sama melayani kedua klien. Arahkan bootstrapUrl, dalam konfigurasi terkelola Claude Desktop, ke <listen.public_url>/user/bootstrap. Claude Desktop menurunkan penerbit OAuth dari URL itu, menjalankan sign-in kode perangkat yang sama terhadap gateway ini, dan mengambil konfigurasinya dari respons.
Memerlukan Claude Code v2.1.203 atau lebih baru di server gateway, dan opt-in eksplisit: /user/bootstrap mengembalikan 404 kecuali kebijakan yang cocok dengan pengguna membawa kunci desktop. desktop: {} kosong memilih kebijakan, dan kunci desktop pada lapisan dasar match: {} memilih setiap kebijakan yang mewarisnya. Log audit merekam setiap permintaan sebagai desktop_bootstrap.serve atau desktop_bootstrap.denied.
Gateway menurunkan banyak respons dari blok cli kebijakan yang cocok dan dari konfigurasi gateway tingkat atas:
  • Daftar model, dari availableModels. Konteks diperluas di Claude Desktop membahas opsi konteks 1M setiap model
  • Tool yang dinonaktifkan, dari entri permissions.deny nama tool telanjang. Jika Anda menetapkan disabledBuiltinTools dalam blok desktop kebijakan, gateway melayani gabungan nilai Anda dan daftar yang diturunkan, sehingga Anda dapat menonaktifkan lebih banyak tool dengan cara ini tetapi tidak dapat mengaktifkan kembali yang Anda nonaktifkan melalui permissions.deny
  • Allowlist egress, dari sandbox.network.allowedDomains. Jika Anda menetapkan coworkEgressAllowedHosts dalam blok desktop kebijakan, gateway menggunakan nilai itu alih-alih daftar yang diturunkan
  • Endpoint OTLP yang menunjuk ke gateway itu sendiri, dan atribut identitas pengguna yang masuk. Gateway meneruskan ekspor yang diterimanya di endpoint itu ke tujuan forward_to Anda. Ini menyertakan endpoint dan atribut ketika Anda menetapkan telemetry.forward_to dan listen.public_url. Claude Desktop mengekspor setiap sinyal dengan satu pengkodean: http/protobuf, atau http/json ketika Anda menetapkan OTEL_EXPORTER_OTLP_PROTOCOL atau salah satu varian per-sinyal ke http/json dalam env kebijakan. Sebelum Claude Code v2.1.261 di server gateway, respons menetapkan http/json terlepas, jadi kolektor yang hanya menerima protobuf menolak ekspor Claude Desktop
Untuk menetapkan disabledBuiltinTools, coworkEgressAllowedHosts, atau pengaturan managedMcpServers Claude Desktop sendiri dalam blok desktop kebijakan, Anda memerlukan Claude Code v2.1.232 atau lebih baru di server gateway. managedMcpServers Claude Desktop mengambil nilai array daripada objek. Gateway menghilangkan kunci tanpa padanan Claude Desktop, seperti hooks dan aturan izin yang dibatasi seperti Bash(npm *), dari respons bootstrap. Tambahkan blok desktop opsional bersama cli untuk menetapkan pengaturan Claude Desktop secara langsung. Tulis pengaturan dari referensi konfigurasi terkelola Claude Desktop sebagai nama kunci datar. Tinggalkan kunci yang Claude Desktop baca hanya dari MDM atau file lokal, seperti bootstrapUrl; gateway menolaknya saat boot. Sebelum v2.1.232, gateway menerima daftar tetap 11 kunci gerbang fitur, seperti chatTabEnabled dan disableAutoUpdates, dan menolak setiap kunci lain saat boot. Sebelum v2.1.227, gateway juga menolak chatTabEnabled dan chatAdvancedFileAnalysisEnabled saat boot.
Setiap kunci opsional; Claude Desktop menerapkan default sendiri untuk kunci apa pun yang Anda abaikan. Gateway memvalidasi setiap blok desktop saat boot terhadap skema konfigurasi yang Claude Desktop itu sendiri gunakan, jadi kesalahan muncul di startup gateway sebagai kesalahan yang menamai kunci daripada mencapai setiap desktop yang terhubung. Gateway gagal saat boot ketika blok berisi:
  • Kunci yang tidak dikenal
  • Kunci yang dikenali yang nilainya Claude Desktop akan menolak atau diam-diam jatuhkan, seperti nilai kosong atau sub-kunci yang salah eja di dalam entri bersarang. Sebelum v2.1.260, gateway diam-diam menjatuhkan bidang yang salah eja di dalam objek bersarang dari entri managedMcpServers atau orgPluginSettings alih-alih gagal saat boot.
  • Kunci yang gateway hitung sendiri: koneksi inferensi, daftar model, dan relay OTLP. Konfigurasikan melalui upstreams, models, dan forward_to pada bagian telemetry.
  • Alias warisan dari kunci saat ini. Dalam kesalahan boot, gateway menamai kunci kanonis untuk ditulis.
Jika Anda menggunakan nilai atau bentuk entri yang sudah deprecated, seperti entri managedMcpServers tanpa transport, gateway dimulai dan mencatat peringatan yang menamai pengganti. Gateway memvalidasi blok desktop terhadap skema yang disertakan dengan versi yang diinstal, seperti yang dilakukannya pada blok cli. Untuk mengirimkan pengaturan yang diperkenalkan oleh rilis Claude Desktop yang lebih baru, upgrade gateway terlebih dahulu. Misalnya, userPluginMarketplacesEnabled dan userPluginUploadsEnabled memerlukan Claude Code v2.1.260 atau lebih baru di server gateway dan Claude Desktop 1.37937.0 atau lebih baru di mesin anggota. blockReadsOutsideWorkingDirectories, disableBypassPermissionsMode, configRecheckIntervalMinutes, dan sshClientPath memerlukan Claude Code v2.1.281 atau lebih baru di server gateway. Begitu juga nilai required dari microsoftAuthBroker dan bidang continuousAccessEvaluation dari entri managedMcpServers Microsoft 365. Rilis Claude Desktop yang mendahului nilai required membacanya sebagai disabled, jadi atur required hanya setelah setiap anggota Claude Desktop mendukungnya. Referensi konfigurasi terkelola Claude Desktop mencantumkan rilis yang pertama kali membaca setiap kunci. Jika Anda menetapkan orgPluginSettings dalam blok desktop kebijakan, gateway melayaninya dalam bentuk array yang Claude Desktop 1.15200.0 dan lebih baru baca. Desktop yang lebih lama mengabaikan array dan tidak menerapkan kebijakan tool plugin, jadi perbarui anggota ke 1.15200.0 atau lebih baru sebelum Anda mengandalkannya. Gateway mengisi kunci yang blok desktop kebijakan tidak ditetapkan dari blok desktop catch-all match: {}, dengan cara yang sama mengisi blok cli kebijakan dari dasar. Jika Anda menetapkan disabledBuiltinTools atau builtinToolPolicy dalam dasar dan kebijakan peran, gateway menyimpan pembatasan dasar:
  • disabledBuiltinTools: gateway menggunakan gabungan daftar dasar dan daftar kebijakan
  • builtinToolPolicy: jika Anda menetapkan tool ke nilai selain allow dalam dasar, gateway menyimpan nilai itu bahkan jika Anda menetapkan allow untuk tool yang sama dalam kebijakan peran
Untuk setiap kunci lain, jika Anda menetapkannya dalam kebijakan peran, gateway menggunakan nilai kebijakan peran. Gateway mengganti array atau objek bersarang seperti banner secara keseluruhan, jadi jika Anda menetapkan banner.text dalam kebijakan peran, gateway menjatuhkan banner.backgroundColor dasar. Jika Anda tidak men-deploy Claude Desktop, tinggalkan desktop sepenuhnya dari kebijakan Anda; gateway kemudian mengembalikan 404 dari /user/bootstrap untuk setiap pengguna.

Konteks diperluas di Claude Desktop

Jika Anda menyajikan Claude Desktop dari gateway, pemilih modelnya menawarkan opsi konteks 1M untuk setiap model terdaftar yang dapat berjalan dengan context window 1M. Ini mencakup Claude Opus 4.6 dan yang lebih baru, Claude Sonnet 4.6 dan yang lebih baru, serta model Fable. Opsi tersebut adalah varian [1m] dari model, yang dijelaskan di Konteks diperluas. Anda memerlukan Claude Code v2.1.284 atau lebih baru di server gateway. Entri models tidak mendapatkan opsi 1M ketika:
  • Upstream yang dapat melayani entri memetakannya ke model tanpa dukungan 1M, termasuk upstream yang hanya dijangkau gateway saat failover
  • Baik id maupun nilai upstream_model apa pun dari entri tidak menamai model Claude, seperti alias kustom yang dirutekan ke ARN profil inferensi aplikasi
Untuk mengubah apa yang ditawarkan pemilih, gunakan salah satu dari ini:
  • Mulai pengguna pada opsi 1M: atur modelPrefer1mContext: true dalam blok desktop kebijakan. Pengguna yang belum memilih model memulai pada opsi 1M ketika model terdaftar pertama memilikinya. Pengguna yang sudah memilih model mempertahankan pilihan mereka.
  • Tawarkan opsi secara manual: lakukan ini jika server gateway Anda menjalankan versi lebih lama dari v2.1.284, atau entri tidak menamai model Claude. Cantumkan model dua kali dalam models, sekali dengan ID polosnya dan sekali dengan [1m] ditambahkan, keduanya dengan peta upstream_model yang sama. Claude Desktop menampilkan pasangan tersebut sebagai satu model dengan opsi 1M. Gateway menyajikan entri [1m] tanpa memeriksanya, jadi tambahkan hanya untuk model yang dilayani upstream Anda pada 1M.
Contoh ini menawarkan opsi secara manual untuk alias kustom yang dirutekan ke profil inferensi aplikasi, dan memulai pengguna baru pada opsi tersebut:
Untuk menghapus opsi dari pemilih, atur CLAUDE_CODE_DISABLE_1M_CONTEXT: "1" dalam blok env di bawah kunci cli kebijakan. Jika Anda juga mencantumkan entri yang id-nya diakhiri [1m], gateway masih menyajikannya, jadi hapus juga entri tersebut. Variabel tersebut juga mencapai sesi terminal pengembang yang cocok dengan kebijakan. Untuk apa yang diubahnya di sana, lihat Konteks diperluas.

Prioritas dengan sumber terkelola lainnya

Jika perangkat juga memiliki kebijakan yang dikirimkan MDM atau managed-settings.json lokal, pengaturan yang dikirimkan gateway mendapat peringkat pertama. Prioritas dalam tingkat terkelola di halaman pengaturan terkelola mengatakan kapan sumber lokal berlaku, dan memiliki kunci yang Claude Code baca dari setiap sumber admin terlepas dari sumber mana yang dipilihnya, seperti kunci penguncian sandbox, forceRemoteSettingsRefresh, dan penggabungan env per-variabel. policyHelper yang dikonfigurasi dalam profil MDM atau file pengaturan terkelola hanya berjalan ketika gateway tidak mengirimkan pengaturan; entri mengatakan apa yang digantikan oleh outputnya. Host penyematan seperti Claude Desktop dapat memasok kebijakan melalui opsi SDK managedSettings. Pengaturan induk dari host penyematan mengatakan kapan Claude Code menerapkannya, dan Batasi pengaturan induk mencantumkan pengaturan arah allow mana yang masih berlaku tanpa kunci allowManaged*Only. Kebijakan gateway berlaku untuk setiap invokasi Claude Code pada mesin, termasuk jalankan claude -p non-interaktif dan sesi yang dihasilkan oleh Agent SDK. Jika gateway tidak dapat dijangkau saat startup, sesi yang masuk keluar dengan kesalahan daripada berjalan tanpa kebijakan mereka.

telemetry

CLI mengirim metrik, log, dan, ketika diaktifkan, jejak ke gateway, yang meneruskannya verbatim ke setiap tujuan yang dikonfigurasi. Ekspor menggunakan OpenTelemetry Protocol (OTLP) melalui HTTP. Untuk melewati relay dan memiliki sesi ekspor langsung ke kolektor Anda, namai kolektor dalam kebijakan. Lihat Monitoring usage untuk metrik dan acara yang CLI pancarkan. Dalam sesi yang masuk melalui /login, CLI memberi stempel setiap ekspor dengan identitas pengguna yang diautentikasi, dibaca dari JWT yang diterbitkan gateway: atribut user.id, user.email, dan user.groups. Atribusi biaya dan penggunaan per-pengembang oleh karena itu bekerja tanpa konfigurasi sisi pengembang. Sesi Claude Desktop dan Cowork yang masuk melalui gateway memberi stempel telemetri mereka dengan user.email dan user.groups bersama enduser.id, sehingga Anda dapat mencakup penggunaan terminal, Desktop, dan Cowork dengan satu kueri di user.email atau user.groups. user.groups adalah daftar grup IdP yang dipisahkan koma. Telemetri Desktop dan Cowork juga membawa enduser.sub, klaim sub yang penyedia identitas Anda keluarkan untuk pengguna, yang tetap sama ketika email pengguna berubah. Sesi terminal memberi stempel nilai yang sama di bawah user.id, jadi kueri yang cocok enduser.sub terhadap terminal user.id mencakup penggunaan terminal, Desktop, dan Cowork satu pengguna bersama-sama. Pada ekspor Desktop dan Cowork, user.id adalah pengidentifikasi anonim, bukan subjek. Seperti semua data OpenTelemetry dari Claude Code, atribut ini hanya pergi ke tujuan yang dikonfigurasi organisasi Anda, tidak pernah ke Anthropic. Jika daftar grup pengguna lebih panjang dari 255 karakter setelah dikodekan persen, atau nama grup berisi koma atau tanda sama dengan, gateway meninggalkan user.groups dari telemetri Desktop dan Cowork pengguna itu daripada memotongnya. Sesi terminal pengguna itu masih membawa daftar lengkap. Gateway meninggalkan enduser.sub ketika subjek lebih panjang dari 255 karakter setelah dikodekan persen, atau berisi spasi, karakter di luar ASCII yang dapat dicetak, atau salah satu dari , ; = \ " %. Telemetri Desktop dan Cowork pengguna itu menyimpan atribut lainnya. Anda memerlukan Claude Code v2.1.265 atau lebih baru di server gateway untuk user.email dan user.groups pada telemetri Desktop dan Cowork, dan Claude Desktop 1.24012 atau lebih baru di mesin setiap pengembang untuk user.groups. Anda memerlukan Claude Code v2.1.274 atau lebih baru di server gateway untuk enduser.sub.
Setiap tujuan memilih metrics, logs, dan traces secara independen, dan default adalah metrik saja. Sinyal berbeda dalam sensitivitas:
  • Metrik: penghitung agregat seperti jumlah token, jumlah permintaan, dan latensi
  • Log dan jejak: dapat membawa perintah Bash lengkap, input tool, dan jalur file, mencakup apa pun yang Claude Code lakukan di mesin pengembang
Aktifkan log dan jejak hanya pada tujuan dengan kontrol akses dan kebijakan retensi yang sesuai untuk data itu.
Setiap URL forward_to harus menggunakan https://, dengan satu pengecualian untuk kolektor di antarmuka loopback gateway itu sendiri:
  • http://localhost:<port> melewati validasi konfigurasi, tetapi penjaga SSRF memblokir setiap ekspor dengan ECONNREFUSED_SSRF kecuali Anda menetapkan CLAUDE_GATEWAY_ALLOW_LOOPBACK=1 dalam lingkungan gateway
  • http://127.0.0.1:<port> atau http://[::1]:<port> gagal boot kecuali variabel itu ditetapkan
Untuk kolektor dalam kluster, paparkan melalui HTTPS di alamat internalnya sendiri, atau jalankan sebagai sidecar dengan variabel yang ditetapkan. Ketika HTTPS_PROXY ditetapkan, gateway mengirim ekspor melalui proxy itu. Untuk mencapai kolektor internal secara langsung, tambahkan ke NO_PROXY berdasarkan nama host atau domain dengan titik terkemuka seperti .internal.example.com, yang memerlukan Claude Code v2.1.277 atau lebih baru di server gateway. Pastikan gateway dapat mencapai kolektor tanpa proxy. Entri tanpa titik terkemuka cocok hanya dengan nama yang tepat itu, bukan nama di bawahnya. Rentang CIDR tidak cocok. Dengan proxy-only egress diaktifkan, izinkan kolektor dalam proxy sebagai gantinya, karena entri NO_PROXY apa pun menjaga proxy-only egress tetap mati. Telemetri dimatikan dalam CLI secara default. Ketika Anda menetapkan telemetry.forward_to dan listen.public_url, gateway mengaktifkannya untuk klien yang terhubung dengan mendorong enam environment variable melalui /managed/settings:
  • CLAUDE_CODE_ENABLE_TELEMETRY=1
  • OTEL_METRICS_EXPORTER, OTEL_LOGS_EXPORTER, dan OTEL_TRACES_EXPORTER, masing-masing ditetapkan ke otlp jika setidaknya satu tujuan forward_to mengaktifkan sinyal itu dan ke none sebaliknya
  • OTEL_EXPORTER_OTLP_ENDPOINT=<public_url>
  • OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
Ketika Anda menambahkan label Anda sendiri, gateway juga mendorong OTEL_RESOURCE_ATTRIBUTES. Sebelum Claude Code v2.1.265 di server gateway, gateway mendorong ketiga pemilih eksportir sebagai otlp, termasuk untuk sinyal yang tidak ada tujuan yang memilih. Endpoint yang didorong dibangun dari URL publik, jadi metrik dan log tidak memerlukan konfigurasi OTEL dari pengembang atau kebijakan. Pengembang yang masuk melalui /login tidak dapat mengalihkan ekspor dengan konfigurasi OTEL mereka sendiri:
  • Variabel yang ditetapkan secara lokal: Claude Code menerapkan variabel yang didorong di tingkat terkelola, jadi masing-masing menimpa nilai yang ditetapkan pengembang untuk itu secara lokal.
  • Endpoint yang dikonfigurasi secara lokal: dengan ekspor OTLP/HTTP diaktifkan, CLI mengabaikan endpoint yang dikonfigurasi secara lokal apa pun, terlepas dari apakah gateway mendorong variabel telemetri. Ekspornya pergi ke gateway kecuali kebijakan menamai kolektor Anda sebagai endpoint.
Tanpa tujuan forward_to untuk sinyal, gateway menerima dan membuangnya. Jika pengembang sudah mengekspor telemetri Claude Code ke salah satu kolektor Anda, tambahkan sebagai tujuan forward_to, dengan log atau jejak diaktifkan jika mereka mengekspor itu, sehingga terus menerima data mereka setelah mereka masuk. Untuk melewati relay sebagai gantinya, namai kolektor dalam kebijakan. Jejak juga memerlukan CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1 pada setiap klien. Atur dalam blok env kebijakan terkelola, karena gateway tidak mendorongnya. Pengembang menyetujuinya dalam dialog persetujuan keamanan yang sama yang sudah dipicu oleh endpoint yang didorong. Atur ke 1 hanya dalam kebijakan yang grupnya ingin Anda lacak. Kebijakan yang tidak menetapkannya mewarisi nilai dari kebijakan catch-all match: {} Anda jika kebijakan itu menetapkan satu, per aturan penggabungan. Untuk menjaga klien grup dari mengirim jejak bahkan ketika pengembang menetapkan variabel secara lokal, atur ke 0 dalam kebijakan grup itu. Kedua pengkodean OTLP protobuf dan JSON diteruskan, dan backend yang kompatibel OpenTelemetry apa pun bekerja sebagai tujuan.

Tambahkan label Anda sendiri

Untuk menempatkan label tetap seperti service.namespace atau deployment.environment.name pada telemetri sesi yang masuk melalui gateway, atur telemetry.resource_attributes. Setiap label adalah atribut sumber OpenTelemetry, dan setiap tujuan menerima label yang sama. Sesi mendapatkan label hanya ketika Anda juga menetapkan telemetry.forward_to dan listen.public_url. Contoh ini menambahkan dua label:
Gateway menolak untuk memulai ketika label melanggar salah satu aturan ini, dan kesalahan startup menamai label:
  • Nama menggunakan hanya huruf, digit, ., _, dan -
  • Nama tidak dicadangkan. Dibandingkan dalam huruf apa pun, nama yang dicadangkan adalah semua yang dimulai dengan user., enduser., atau identity., ditambah service.name, service.version, claude.deployment_mode, host.arch, os.type, os.version, dan wsl.version
  • Nilai adalah ASCII yang dapat dicetak non-kosong tanpa spasi dan tidak ada , ; = \ " %
  • Nilai paling banyak 255 karakter saat gateway menghitungnya setelah pengkodean persen, jadi /, :, dan @ masing-masing menghitung sebagai tiga
  • Nilai adalah teks, jadi kutip angka, true, atau false
Anda memerlukan Claude Code v2.1.281 atau lebih baru di server gateway untuk menetapkan telemetry.resource_attributes. Gateway sebelumnya menolak untuk memulai ketika menemukan kunci. Upgrade setiap replika sebelum Anda menambahkan kunci, dan hapus kunci sebelum Anda kembali ke versi sebelumnya. Sesi terminal yang masuk melalui /login menerima label sebagai OTEL_RESOURCE_ATTRIBUTES, didorong dengan variabel telemetri lainnya. Jika Anda menetapkan OTEL_RESOURCE_ATTRIBUTES dalam blok env kebijakan, sesi terminal yang cocok dengan kebijakan itu mendapatkan nilai itu alih-alih label. Claude Desktop menerima label dari gateway bersama user.email dan atribut identitas lainnya. Claude Code juga menyalin setiap label ke setiap titik data metrik, sehingga Anda dapat memfilter metrik berdasarkannya di backend yang tidak mengindeks atribut sumber. Untuk mematikan salinan itu, lihat Kontrol kardinalitas metrik.

Ekspor langsung ke kolektor Anda

Untuk memiliki sesi yang masuk melalui /login mengirim telemetri langsung ke kolektor Anda alih-alih melalui relay, atur OTEL_EXPORTER_OTLP_ENDPOINT ke URL dasar https:// kolektor dalam blok env dari kebijakan terkelola. Claude Code menambahkan /v1/metrics, /v1/logs, atau /v1/traces ke URL yang Anda atur, seperti https://otel-collector.example.com:4318, dan mengekspor setiap sinyal di sana melalui OTLP/HTTP. Memerlukan Claude Code v2.1.265 atau lebih baru di setiap mesin pengembang. Klien sebelumnya mengekspor melalui relay. Untuk mengautentikasi ke kolektor, atur OTEL_EXPORTER_OTLP_HEADERS dalam blok env yang sama. Sesi tidak pernah mengirim token sesi gateway pengembang ke kolektor yang dinamai dengan cara ini. Ketika Anda menambah atau mengubah endpoint ini dalam kebijakan, Claude Code meminta setiap pengembang untuk menyetujuinya dalam dialog persetujuan keamanan sebelum menerapkannya dalam sesi interaktif. Claude Code memeriksa endpoint sebelum mengekspor sinyal secara langsung, dan menyimpan sinyal itu di relay ketika pemeriksaan gagal. Pemeriksaan termasuk:
  • Endpoint berasal dari gateway itu sendiri. Jika Anda menetapkan variabel yang sama dalam profil MDM atau managed-settings.json lokal, ekspor tetap di relay.
  • URL menggunakan https://, atau http:// ke alamat loopback
  • URL diselesaikan ke jalur yang berakhir di /v1/<signal>, tanpa kueri atau fragmen. Claude Code membangun jalur itu sendiri dari variabel generik. Ini menggunakan variabel per-sinyal seperti OTEL_EXPORTER_OTLP_METRICS_ENDPOINT seperti yang ditulis, jadi sertakan jalur lengkap di sana.
  • URL bukan host gateway itu sendiri. Endpoint yang ditujukan ke gateway menyimpan jalur relay dan token sesinya.
  • Baik Anda maupun pengembang tidak mengonfigurasi otelHeadersHelper dalam sumber pengaturan apa pun. Dengan helper yang dikonfigurasi, setiap sinyal tetap di relay.
Endpoint yang Anda namai mengubah hanya di mana ekspor pergi. Anda masih memilih sinyal mana yang mengekspor sama sekali dengan pemilih OTEL_*_EXPORTER. Endpoint saja tidak mengaktifkan ekspor, jadi juga atur variabel yang melakukannya, kecuali gateway sudah mendorongnya:
  • Jika gateway sudah mendorong variabel telemetri, mereka mencakup enablement, pemilih, dan protokol, dan endpoint eksplisit Anda menimpa nilai <public_url> yang didorong. Atur pemilih OTEL_*_EXPORTER ke otlp sendiri hanya untuk sinyal yang tidak ada tujuan forward_to yang mengaktifkan.
  • Jika tidak, juga atur CLAUDE_CODE_ENABLE_TELEMETRY=1, pemilih OTEL_*_EXPORTER, dan OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf.
Ketika pengembang keluar, atau masuk ke gateway yang berbeda, ekspor ke kolektor berhenti dan Claude Code menjatuhkan setiap batch yang tersisa daripada mengirimkannya.

Ketika tujuan gagal

Gateway tidak membuffer, mencoba ulang, atau menyimpan telemetri, jadi itu menjatuhkan ekspor yang tidak mencapai tujuan daripada mengirimkannya terlambat. Setiap tujuan berhasil atau gagal sendiri, dan klien yang mengekspor menerima respons sukses bagaimanapun, jadi pengiriman yang gagal muncul hanya dalam log gateway. Setelah lima pengiriman berturut-turut yang gagal ke tujuan, gateway menjeda penerusan ke dalamnya dalam rentang 30 detik, mencatat setiap jeda, sampai pengiriman berhasil. Respons kesalahan apa pun, timeout, atau kesalahan koneksi menghitung sebagai pengiriman yang gagal, kecuali 400, 413, 415, 422, dan 431, yang berarti kolektor menolak payload ekspor itu sebagai salah format atau terlalu besar. Payload yang ditolak tidak memajukan atau mengatur ulang penghitung kegagalan: gateway terus meneruskan ke tujuan dan mencatat peringatan yang menamakannya dan status, pada penolakan pertama tujuan dan setiap seratus setelahnya.

Penyetelan HTTP

Empat blok tingkat atas opsional, access_control, limits, timeouts, dan rate_limits, menyetel surface HTTP. Default cocok untuk sebagian besar deployment. Jika Anda meninggalkan kedua daftar access_control kosong, yang merupakan default, gateway melayani alamat klien apa pun, jadi hanya jaringan Anda yang membatasi siapa yang dapat mencapainya. Itu penting karena gateway dapat mendorong pengaturan terkelola yang menjalankan perintah di mesin pengembang. Sementara allow_cidrs kosong, gateway memperingatkan di dua tempat, tanpa mengubah cara itu menjawab permintaan apa pun:
  • Saat boot: peringatan dalam log operasional merekomendasikan hanya mengizinkan rentang pribadi 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 100.64.0.0/10, 127.0.0.0/8, ::1/128, dan fc00::/7, ditambah rentang internal lainnya yang pengembang Anda terhubung dari. Jika Anda mengikat gateway ke alamat loopback dan tidak menetapkan trusted_proxies atau public_url, seperti dalam pengembangan lokal, peringatan tidak muncul.
  • Saat runtime: pertama kali permintaan tiba dari alamat di luar rentang pribadi itu, gateway mencatat peringatan dan memancarkan acara audit access.public_client yang membawa IP klien. Keduanya menyala sekali per proses. Alamat link-lokal, 169.254.0.0/16 dan fe80::/10, tidak dihitung sebagai publik. Gateway menjawab /healthz dan /readyz sebelum pemeriksaan ini berjalan, jadi probe kesehatan dari rentang publik tidak memicunya.
Kedua sinyal menggunakan alamat klien saat gateway menyelesaikannya. Jika load balancer, port-forward, atau tunnel meneruskan lalu lintas dan tidak terdaftar dalam listen.trusted_proxies, gateway melihat alamat relay, yang biasanya pribadi, sehingga baik peringatan runtime maupun daftar allow pribadi tidak menangkap lalu lintas yang diteruskan melaluinya. Di belakang front end seperti itu, atur listen.trusted_proxies terlebih dahulu sehingga gateway melihat alamat klien nyata, dan jaga gateway dan semua yang di depannya tidak dapat dijangkau dari internet publik apa pun keadaannya.

load_test_mode

Blok load_test_mode memungkinkan Anda untuk load test gateway tanpa memanggil penyedia model. Sementara itu aktif, gateway membangun dan menandatangani setiap permintaan penyedia seperti biasa, membuangnya alih-alih mengirimkannya, dan streaming respons kalengan kembali melalui jalur respons normalnya. Respons adalah teks pengisi yang dimulai dengan kalimat yang mengatakan itu kalengan. Memerlukan Claude Code v2.1.282 atau lebih baru di server gateway. Gateway sebelumnya menolak untuk memulai ketika menemukan kunci. Upgrade setiap replika sebelum Anda menambahkan blok, dan hapus blok sebelum Anda kembali. Contoh di bawah mengaktifkan mode dengan default, respons sekitar 750 token teks yang streaming selama sekitar 10 detik:
Tes beban dalam mode ini mencakup gateway, Postgres Anda, dan semua yang di depan gateway. Itu tidak mencakup batas, kecepatan, atau jalur jaringan penyedia. Tidak ada permintaan model yang dikirim ke penyedia, jadi CPU replika per permintaan adalah perkiraan dan terbaca lebih rendah dari produksi, yang juga mengenkripsi lalu lintasnya ke penyedia. Konfirmasi jumlah replika dengan pilot kecil terhadap penyedia nyata. Sebelum v2.1.283, perkiraan terbaca jauh lebih rendah. Sementara mode aktif, permintaan dapat membawa header x-load-test-user yang menyimpan angka bulat hingga tujuh digit. Gateway menghitung setiap angka sebagai pengembang terpisah, dengan email dan grup pengembang yang tokennya datang dengan permintaan. Berikan deployment load-test database kosongnya sendiri, karena gateway menolak untuk memulai dengan mode aktif terhadap database di mana pengembang apa pun sudah menghabiskan apa pun.
Jangan pernah mengaktifkan ini untuk gateway yang digunakan pengembang. Setiap permintaan mendapatkan respons kalengan dan tidak ada model yang dipanggil. Gateway mencatat peringatan load_test_mode is on saat boot dan menandai setiap acara audit inference dengan load_test: true sementara mode aktif.

Contoh lengkap

Config reference penuh ini menggunakan setiap core section; HTTP tuning blocks menyimpan defaults mereka. Salin, hapus apa yang Anda tidak butuhkan, dan isi values Anda. Config dalam Quickstart adalah minimal version dari ini.
gateway.yaml

Managed settings sisi client

Semua di atas mengonfigurasi gateway server. Anda menunjukkan developer machines ke gateway secara terpisah, pada setiap device, melalui Claude Code’s managed settings. Gateway tidak dapat mendorong login keys itu sendiri, karena mereka adalah apa yang memberitahu client di mana gateway berada. Untuk CLI, atur keys ini dalam per-OS managed-settings.json. Dua login keys merutekan setiap developer’s /login ke gateway Anda:
parentSettingsBehavior: "merge" menjaga pengiriman Claude Desktop dari egress allowlist ke embedded Claude Code sessions-nya tetap berfungsi; Deliver policy to Claude Desktop sessions menjelaskan mekanisme dan di mana opt-in harus berada. Untuk menghentikan developer dari membypass gateway dengan cloud provider variable atau ANTHROPIC_BASE_URL mereka sendiri, tambahkan "allowedProviders": ["gateway"] ke file yang sama. Claude Code kemudian menolak setiap session di mesin yang tidak diatur untuk Cloud gateway, dan mengakui gateway hanya ketika itu adalah yang dinamai forceLoginGatewayUrl atau yang URL-nya file’s env block atur sebagai ANTHROPIC_BASE_URL. claude gateway menolak untuk berjalan di mesin yang mengatur list, jadi jaga key tetap off di gateway host. Lihat entry allowedProviders dalam settings reference. Memerlukan Claude Code v2.1.285 atau lebih baru. Deploy file managed-settings.json ke setiap device, biasanya melalui platform MDM Anda. File path berbeda menurut platform. Lihat di mana setiap mekanisme menyimpan policy. Secara default, registry policy di Windows atau managed-preferences plist di macOS menggantikan file managed-settings.json daripada menggabungkannya, terlepas dari exception keys dan cross-source checks di atas. Ketiga keys dalam snippet ini mengikuti highest-priority-source rule, jadi fleets yang mengirimkan policy melalui Group Policy atau configuration profiles harus menempatkan ketiganya dalam mekanisme itu sebagai gantinya. Untuk Claude Desktop, atur key bootstrapUrl dalam managed configuration Claude Desktop sendiri ke <listen.public_url>/user/bootstrap. Sign-in flow dan per-group policy kemudian cocok dengan CLI’s setelah policy opt-in server-side dengan key desktop; tanpa opt-in, /user/bootstrap mengembalikan 404. Lihat Claude Desktop overlay untuk bagian server-side. Claude Code menghormati forceLoginGatewayUrl, gatewayInternalNetworks, dan nilai "gateway" dari forceLoginMethod hanya dari managed source di mesin: managed-settings.json, plist macOS atau Windows HKLM registry, atau policy helper. Menetapkannya dalam ~/.claude/settings.json developer sendiri atau dalam gateway payload tidak mengonfigurasi gateway sign-in. Tinggalkan forceLoginMethod dan forceLoginOrgUUID di luar payload. Claude Code masih membaca kedua keys dari payload untuk startup credential check-nya, jadi developer yang menyimpan credential yang dikeluarkan Anthropic di mesin mendapatkan startup exit yang dijelaskan di bawah Administrator policy requires a Cloud gateway sign-in bahkan setelah mereka sign in.