gateway.yaml. Die Datei definiert alles, was das Gateway tut: wo es lauscht, wie sich Entwickler anmelden, wohin Inferenz geht und welche Richtlinien und Telemetrie gelten. Diese Seite ist die Referenz für jede Option in dieser Datei.
Um Ihre erste zu schreiben, beginnen Sie mit dem Schnellstart, der eine minimale funktionierende Konfiguration erstellt und ausführt. Sobald Sie eine Konfiguration haben, mit der Sie zufrieden sind, behandelt der Bereitstellungsleitfaden die Containerisierung und das Hosting auf Kubernetes, Cloud Run oder Ihrer eigenen Plattform.
Das Gateway liest die Datei einmal beim Start mit claude gateway --config /path/to/gateway.yaml. Jede Option wird beim Start gegen ein Schema validiert, sodass eine fehlerhafte Konfiguration beim Start mit einem Fehler auf Feldebene fehlschlägt, anstatt bei der ersten Verwendung.
Das vollständige Beispiel am Ende dieser Seite behandelt jeden Abschnitt.
Dateistruktur
Fünf Abschnitte sind erforderlich. Jeder andere Abschnitt ist optional, und ein fehlender Abschnitt nimmt seine Standardwerte an. Unbekannte Schlüssel führen zum Fehlschlag beim Start, sodass ein Tippfehler als benannter Fehler anstelle einer stillschweigend ignorierten Einstellung auftaucht. Erforderliche Abschnitte:listen: Bindungsadresse, öffentliche URL, TLS-Beendigungoidc: Ihr Identitätsanbieter (IdP), einschließlich Aussteller, Client, Anspruchszuordnung und wer sich anmelden darfsession: die Bearer-Token, die das Gateway ausstellt, mit Geheimnis und Lebensdauerstore: PostgreSQL, für Gerätezuschüsse und Rate-Limit-Zählerupstreams: wohin Inferenz geht, ob Anthropic, Amazon Bedrock, Claude Platform auf AWS, Agent Platform von Google Cloud oder Microsoft Foundry
admin: Admin-API-Authentifizierung und Aufbewahrung für Ausgabenlimitsenforcement: Ausgabenlimit-Verhalten bei Fehler-offen oder Fehler-geschlossenpricing: vertraglich vereinbarte Sätze und ein Rabattmultiplikator für das Ausgabenmessgerät und für die Kostenzahlen, die Entwickler sehenmodelsundauto_include_builtin_models: von Admin kuratierte Modellliste und Pro-Upstream-IDsmanaged: verwaltete Einstellungsrichtlinien nach IdP-Gruppetelemetry: OTLP-Weiterleitung an Ihren Observability-Stackaccess_control,limits,timeouts,rate_limits: IP-Zulassung/Ablehnung, Anfragegrößenbeschränkungen, Upstream-Zeit-bis-erstes-Byte und Pro-IP-Anmeldungslimitsload_test_mode: Lasttests des Gateways ohne Aufruf eines Modellanbieters
Geheimniserweiterung
Schreiben Sie Geheimnisse wieclient_secret, jwt_secret oder postgres_url nicht direkt in gateway.yaml. Referenzieren Sie sie mit einem der folgenden Formulare, und das Gateway löst den Wert beim Start aus einer Umgebungsvariablen oder einer Datei auf:
Erforderliche Abschnitte
listen
Der listen-Block steuert, wo das Gateway bereitgestellt wird: die Bindungsadresse und der Port, der extern sichtbare Ursprung und optionale TLS-Beendigung.
oidc
Der oidc-Block verbindet das Gateway mit Ihrem Identitätsanbieter und entscheidet, wer sich anmelden kann. Er benennt den Aussteller und OAuth-Client, ordnet die Ansprüche zu, die E-Mail und Gruppen enthalten, und beschränkt die Anmeldung nach E-Mail-Domäne oder Gruppe.
OpenID Connect (OIDC) ist das SSO-Protokoll, das das Gateway mit Ihrem Identitätsanbieter verwendet; siehe Identitätsanbieter-Setup für das, was auf der IdP-Seite registriert werden muss.
IdP-Anfragen durch einen Forward-Proxy
Die Inference-Upstreams beachtenHTTPS_PROXY und HTTP_PROXY in jeder Version. Die eigenen Anfragen des Gateways an den IdP, Discovery, JWKS, Token und Userinfo gehen direkt, sofern Sie nicht oidc.use_proxy: true setzen, was v2.1.227 oder später erfordert. Wenn eine Proxy-Variable gesetzt ist, use_proxy nicht gesetzt ist und der Aussteller nicht von NO_PROXY abgedeckt ist, hält das Gateway diese Anfragen direkt und protokolliert beim Start einen Hinweis, der Sie auffordert, eine Wahl zu treffen; use_proxy: false hält sie direkt und unterdrückt den Hinweis.
Mit use_proxy: true löst der Pod den Hostnamen jedes IdP-Endpunkts selbst auf und fordert den Proxy auf, sich mit der aufgelösten IP-Adresse zu CONNECT, daher muss der Proxy CONNECT zur IP-Adresse jedes Hosts akzeptieren, den das Discovery-Dokument benennt, nicht nur den Aussteller. Verwenden Sie eine http://-Proxy-URL. ca_cert_pem und der SSRF-Schutz gelten auch auf dem Proxy-Pfad.
Proxy-only Egress ändert beide: Während es aktiv ist, folgen IdP-Anfragen dem Proxy, sofern Sie nicht use_proxy: false setzen, und das Gateway übergibt dem Proxy jeden IdP-Hostnamen, ohne ihn zuerst aufzulösen.
Proxy-only Egress
Setzen SieCLAUDE_GATEWAY_PROXY_IS_EGRESS_BOUNDARY=1 in der Umgebung des Gateways, neben HTTPS_PROXY, wenn der Pod andere Hosts nur durch diesen Forward-Proxy erreicht und öffentliche DNS-Namen nicht selbst auflösen kann, oder wenn der Proxy CONNECT zu einer IP-Adresse ablehnt. Erfordert v2.1.277 oder später. Es ist eine Umgebungsvariable statt eines gateway.yaml-Schlüssels, daher kann nichts in der Konfigurationsdatei die Adressprüfung des Gateways lockern.
network:-Zeile beim Start, während Proxy-only Egress aktiv ist.
Jede Zeile unten ist eine Klasse von ausgehenden Anfragen auf einem Gateway mit HTTPS_PROXY gesetzt, standardmäßig und während Proxy-only Egress aktiv ist.
Proxy-only Egress bleibt aus, sofern die Umgebung des Gateways nicht alle drei dieser Bedingungen erfüllt:
HTTPS_PROXYoderHTTP_PROXYist gesetzt.NO_PROXYundno_proxysind leer. Wenn Ihre Plattform eines in Pods injiziert, setzen Sie beide auf einen leeren Wert auf dem Gateway-Container. Das Auflisten eines Telemetrie-Collectors inNO_PROXYhält Proxy-only Egress aus.CLAUDE_GATEWAY_ALLOW_LOOPBACKist nicht aktiviert. Ein Collector oder IdP auf dem eigenen Loopback des Pods kann nicht mit Proxy-only Egress kombiniert werden, da eine an den Proxy übergebene Loopback-Adresse die des Proxy-Hosts selbst wäre, daher geben Sie diesen Services stattdessen eine Adresse, die der Proxy erreichen kann. Aus dem gleichen Grund weigert sich das Gateway,localhost-ähnliche Namen direkt zu akzeptieren, während Proxy-only Egress aktiv ist.
oidc.use_proxy: false halten.
session
Der session-Block formt die Bearer-Tokens, die das Gateway nach der Anmeldung ausgibt: das Geheimnis, das sie signiert, und wie lange sie leben.
store
Der store-Block verweist das Gateway auf seine PostgreSQL-Datenbank, die Gerätezuschüsse und Ratenbegrenzungszähler enthält.
Für die lokale Entwicklung verweisen Sie
postgres_url auf einen Wegwerf-Postgres-Container, zum Beispiel docker run --rm -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres.
upstreams
upstreams ist eine geordnete Liste. Das Gateway leitet Inference an den ersten Upstream weiter, der das angeforderte Modell auflöst.
Bei 5xx, 429, 401, 403, 404 oder Timeout schlägt das Gateway zum nächsten Upstream fehl über; andere 4xx nicht, da diese Fehler dem Request statt dem Upstream zuzuordnen sind. Ein 401 oder 403 bedeutet, dass die eigene Berechtigung des Gateways gegen diesen Upstream fehlgeschlagen ist. Ein 404 bedeutet, dass dieser Upstream das angeforderte Modell nicht bereitstellt, daher kann ein späterer Upstream in der Liste es immer noch tun.
Wenn Sie forward_user_identity: true auf einem Upstream setzen, schlägt ein 429, das dieser auf eine Anfrage zurückgibt, die die E-Mail des Entwicklers trug, nicht fehl über. Siehe wie eine Pro-Benutzer-Limit-Ablehnung den Entwickler erreicht.
Failover bei 404 erfordert Gateway v2.1.198 oder später. Frühere Versionen gaben den ersten 404 an den Client zurück, auch wenn ein späterer Upstream in der Liste das Modell bereitstellte.
Mehrere Upstreams desselben Anbieters müssen einen unterschiedlichen name: setzen.
Amazon Bedrock, Claude Platform on AWS, Google Cloud’s Agent Platform und Microsoft Foundry-Clients werden beim Start einmal erstellt, und ihre SDKs aktualisieren Berechtigungsnachweise intern, daher erfordert das Rotieren von Cloud-Berechtigungsnachweisen keinen Neustart. Statische Anthropic-API-Schlüssel und Bearer werden beim Start gelesen; siehe Anthropic API.
Upstream-Fehlermeldungen
Das Gateway gibt die Fehlerantwort eines Upstreams oder sein eigenes502 zurück, je nachdem, wie die Upstreams antworteten:
- Ein Upstream gab einen Status zurück, bei dem das Gateway nicht fehlschlägt über: diese Upstream-Antwort. Das Gateway versucht keine weiteren Upstreams.
- Jeder Upstream, den das Gateway versuchte, schlug auf eine Weise fehl, bei der es fehlschlägt über: das letzte
429. Wenn keiner ein429zurückgab, bevorzugt das Gateway in der Reihenfolge das letzte401oder403, das letzte404und das letzte501. Wenn keiner von diesen zurückgab, das eigene502des Gateways,all upstreams failed (N attempted), wobei N jeden Eintrag inupstreamszählt, einschließlich Einträge, die das Gateway übersprungen hat, weil sie das angeforderte Modell nicht bereitstellen.
400oder413in Anthropics Standard-Fehler-Envelope: die eigene Nachricht des Upstreams, wieprompt is too long. Claude Platform on AWS, Agent Platform und Microsoft Foundry geben dieses Envelope für Modell-API-Ablehnungen zurück.400oder413in der eigenen Form des Anbieters: eincapability_rejected:-Token. Wenn das Gateway die Ablehnung nicht klassifizieren kann,upstream rejected the requestbei einem400oderrequest too large for this upstreambei einem413.- Jeder andere Status: generischer Pro-Status-Text, wie
upstream rate limit exceededbei einem429.
Input is too long for requested model. durch capability_rejected: prompt_too_long. Claude Code komprimiert automatisch auf dieses Token, wie es auf prompt is too long tut.
Das Beibehalten einer Cloud-Upstream-Nachricht von 400 oder 413 oder das Ersetzen durch ein capability_rejected:-Token erfordert Gateway v2.1.233 oder später.
Anthropic API
Der minimale Anthropic-Upstream ist ein API-Schlüssel aus der Claude Console:api_key: sendetx-api-key. Rotieren Sie ihn in der Claude Console und aktualisieren Sie die Umgebungsvariable.oauth_token: sendetAuthorization: Bearer. Verwenden Sie die Bearer-Form, wenn Ihre Organisation kurzlebige Tokens statt langlebiger API-Schlüssel ausgibt. Der Bearer wird einmal beim Start gelesen, daher aktualisieren Sie durch Remounten des Geheimnisses und Neustart.
base_url eines provider: anthropic-Upstreams auf einen Proxy verweisen, den Sie betreiben, anstatt auf die Anthropic API. Um diesem Proxy mitzuteilen, welcher Entwickler jede Anfrage gesendet hat, setzen Sie forward_user_identity: true auf diesem Upstream. Der Proxy kann dann Ausgaben pro Entwickler zuordnen. Erfordert ein Gateway, das Claude Code v2.1.233 oder später ausführt.
Zum Beispiel für einen Proxy unter upstream-gateway.internal.example.com:
Wenn das IdP-Token keine E-Mail trägt, sendet das Gateway nur
x-claude-gateway-user-id und lässt die zwei E-Mail-Header weg. Wenn Ihr IdP die E-Mail in einem anderen Anspruch ablegt, setzen Sie oidc.email_claim auf diesen Anspruch.
Wenn Ihr Proxy 429 auf eine Anfrage antwortet, die die E-Mail des Entwicklers trug, gibt das Gateway diese Antwort unverändert an den Entwickler zurück, anstatt zum nächsten Upstream fehlzuschlagen, daher hält das Budget oder die Ratenbegrenzung pro Benutzer Ihres Proxys. Die anderen Antworten des Proxys folgen den gewöhnlichen Failover-Regeln. Wenn das IdP-Token eines Entwicklers keine E-Mail trägt, leitet das Gateway seine Anfragen ohne die E-Mail-Header weiter, daher zählt ein 429 auf eine dieser Anfragen als Upstream-Kapazität und schlägt fehl über. Vor v2.1.267 auf dem Gateway-Server schlug jedes 429 fehl über.
Setzen Sie forward_user_identity nur auf einem Upstream, dessen base_url ein Proxy ist, den Sie betreiben. Das Gateway sendet Entwickler-E-Mails an jeden Server, den diese base_url benennt. Wenn die base_url die Anthropic API ist, die Standard ist, weigert sich das Gateway zu starten.
Amazon Bedrock
Für die Client-seitige Amazon Bedrock-Bereitstellung, die das Gateway ersetzt oder frontet, siehe Claude Code on Amazon Bedrock. Der Gateway-seitige Upstream:auth-Block verwendet die Standard-Berechtigungskette des AWS SDK: Umgebungsvariablen, ~/.aws/credentials, ECS-Task-Rolle, EC2-Instanz-Metadaten oder IRSA auf EKS. Geben Sie in der Produktion dem Gateway-Pod eine IAM-Rolle, anstatt statische Schlüssel in ein Container-Image einzubetten.
Explizite Berechtigungsnachweise müssen vollständig sein: Das Gateway schlägt beim Start fehl, wenn aws_access_key_id und aws_secret_access_key nicht zusammen gesetzt sind, oder wenn aws_session_token ohne sie gesetzt ist. Vor v2.1.207 bestand ein partieller auth:-Block die Validierung.
Claude Platform on AWS
Claude Platform on AWS bedient die First-Party-Anthropic-API auf AWS-Infrastruktur unteraws-external-anthropic.<region>.api.aws. Sie verwendet First-Party-Modell-IDs, beachtet anthropic-beta-Header wie gesendet und bedient count_tokens, daher gilt keine der Bedrock-spezifischen Übersetzung. Der anthropicAws-Provider erfordert Claude Code v2.1.198 oder später; frühere Gateway-Versionen lehnen ihn beim Start ab.
Für die Client-seitige Bereitstellung derselben Plattform siehe Claude Code on Claude Platform on AWS. Der Gateway-seitige Upstream:
aws-external-anthropic, daher autorisiert eine Bedrock-scoped IAM-Rolle es nicht. Ein API-Schlüssel in auth.api_key hat Vorrang, wenn SigV4-Berechtigungsnachweise auch gesetzt sind. Ein leerer auth-Block verwendet die Standard-Berechtigungskette des AWS SDK, die gleiche Kette, die der Amazon Bedrock-Upstream verwendet.
Da die Plattform First-Party-Modell-IDs auflöst, leitet der integrierte Katalog zu ihr ohne
models:-Block weiter. Wenn Sie eine models:-Liste kuratieren, schlüsseln Sie den Eintrag anthropicAws: mit der First-Party-ID.
Google Cloud Agent Platform
Für das äquivalente Client-seitige Setup siehe Claude Code on Google Cloud. Der Gateway-seitige Upstream:auth-Block verwendet Application Default Credentials: GOOGLE_APPLICATION_CREDENTIALS, GCE-Metadaten oder GKE Workload Identity. Service-Account-JSON-Schlüsseldateien werden unterstützt, aber nicht empfohlen; verwenden Sie Workload Identity oder fügen Sie ein Service-Account an die GCE- oder Cloud Run-Instanz an.
Setzen Sie region: global, um den globalen Endpunkt für Google Cloud’s Agent Platform anstelle eines regionalen zu verwenden. Google leitet dann jede Anfrage an eine verfügbare Region weiter, daher verfolgen Sie keine Pro-Region-Modellverfügbarkeit. Das Setzen einer bestimmten Region heftet jede Anfrage daran.
Microsoft Foundry
Für die Client-seitige Microsoft Foundry-Bereitstellung siehe Claude Code on Microsoft Foundry. Der Gateway-seitige Upstream:use_azure_ad: true löst durch DefaultAzureCredential auf: Managed Identity auf AKS, ACI oder App Service; die Azure CLI; oder Umgebungsberechtigungsnachweise. API-Schlüssel funktionieren, sind aber projektumfassend und rotieren nicht automatisch. Der Endpunkt von Microsoft Foundry wird von resource: abgeleitet; setzen Sie das optionale base_url, um es für souveräne Clouds wie Azure Government zu überschreiben.
Statische Header auf Upstream-Anfragen
Um feste Header zu den Anfragen hinzuzufügen, die das Gateway an einen Upstream sendet, setzen Sieheaders: auf diesem Upstream. Verwenden Sie es, wenn ein Proxy, den Sie vor dem Anbieter betreiben, Traffic nach einem Header leitet oder zuordnet.
headers: erfordert Claude Code v2.1.277 oder später auf dem Gateway-Server. Ein früheres Gateway weigert sich zu starten, wenn es den Schlüssel findet. Aktualisieren Sie jedes Replikat, bevor Sie den Schlüssel hinzufügen, und entfernen Sie den Schlüssel, bevor Sie zu einer früheren Version zurückrollen.
Die Header gehen an den Server, den base_url benennt, oder an den eigenen Endpunkt des Anbieters, wenn base_url nicht gesetzt ist. Der Anbieter erhält sie auch, sofern Ihr Proxy sie nicht entfernt.
Dieses Beispiel erreicht einen provider: vertex-Upstream durch einen Proxy unter upstream-proxy.internal.example.com. Es setzt den x-source-Header, den der Proxy liest, und sendet ein Token aus der PROXY_TOKEN-Umgebungsvariable als x-proxy-token:
true oder false, damit YAML sie als Text liest.
Um ein Geheimnis aus der Konfigurationsdatei zu halten, verwenden Sie Geheimnis-Erweiterung, um den Wert aus einer Umgebungsvariable mit ${VAR} oder aus einer Datei mit ${file:/path} zu laden. Ein ${VAR}, das zu einem leeren Wert aufgelöst wird, stoppt das Gateway vom Start.
headers: funktioniert auf jedem Anbieter, und jeder Upstream sendet nur seine eigenen.
Nicht jede Anfrage, die das Gateway an einen Upstream sendet, trägt sie:
Auf einem Amazon Bedrock oder Claude Platform on AWS-Upstream, der Anfragen mit AWS SigV4 signiert, sind diese Header Teil der Signatur, daher muss Ihr Proxy sie unverändert durchlassen.
Wenn Sie einen Namen verwenden, den das Gateway reserviert, weigert es sich zu starten, und der Startup-Fehler benennt den Header. Reservierte Namen umfassen:
authorizationundx-api-keyhost,content-typeunduser-agent- Jeder Name, der mit
anthropic-,x-goog-,x-amz-oderx-amzn-beginnt
Mehrere Upstreams
Der gleiche Provider kann mehr als einmal mit einem unterschiedlichenname: erscheinen. Dies deckt verschiedene Regionen, verschiedene Konten über verschiedene Berechtigungsketten, bereitgestellter Durchsatz versus On-Demand und Cross-Provider-Fallback ab.
Das Gateway versucht Upstreams in Reihenfolge. 5xx, 429, 401, 403, 404, Timeouts und fehlender Endpunkt (501) schlagen fehl über; andere 4xx nicht.
429 ist Pro-Upstream-Kapazität, daher schlägt bereitgestellter Durchsatz (PT)-Erschöpfung zu On-Demand fehl über. Wenn Sie forward_user_identity: true auf einem Upstream setzen, ist ein 429 auf eine Anfrage, die die E-Mail des Entwicklers trug, eine Pro-Benutzer-Ablehnung statt und schlägt nicht fehl über.
404 ist Pro-Upstream-Modellverfügbarkeit, daher blockiert ein Upstream, der ein Modell nicht aktiviert hat, keinen späteren Upstream, der es bedient. Ein Upstream, der das angeforderte Modell nicht auflösen kann, wird ohne Netzwerk-Roundtrip übersprungen.
Jede Anfrage startet beim ersten Upstream. Eine Anfrage erreicht einen späteren Upstream nur, wenn jeder Upstream vor ihm fehlgeschlagen ist oder das angeforderte Modell nicht bedient.
Das Gateway führt keine Aufzeichnung fehlgeschlagener Upstreams, daher versucht jede Anfrage, die ihn erreicht, ihn immer noch und wartet, bis er fehlschlägt, bevor es weitergeht, während ein Upstream ausfällt.
Für einen Anthropic-API-Upstream begrenzt timeouts.upstream_ttfb_ms das Warten auf einen ausgefallenen Upstream. Diese Einstellung gilt nicht für die anderen Anbieter, wo das Gateway bis zu eine Stunde wartet, bis ein Upstream anfängt zu antworten.
404 ist Pro-Upstream-Modellverfügbarkeit, daher blockiert ein Upstream, der ein Modell nicht aktiviert hat, keinen späteren Upstream, der es bedient. Ein Upstream, der das angeforderte Modell nicht auflösen kann, wird ohne Netzwerk-Roundtrip übersprungen.
Dieses Beispiel leitet eine bereitgestellte Durchsatz-Amazon Bedrock-Zuteilung zuerst weiter, überläuft zu On-Demand und einem zweiten Konto und fällt zuletzt auf die Anthropic API zurück:
Das Failover zwischen Cloud-Anbietern oder zur direkten Anthropic API ändert, welche Vereinbarung, Geographie und andere Bedingungen die Anfrage regeln.
Die CLI wendet die gleiche Feature-Gating auf Gateways an, unabhängig davon, welcher Upstream eine gegebene Anfrage bedient, daher sendet Failover kein Body-Feld, das ein Upstream ablehnen würde.
Optionale Abschnitte
admin
Optional. Aktiviert /v1/organizations/spend_limits, das Anthropics öffentliche Admin-API widerspiegelt, und erzwingt Ausgabenlimits pro Entwickler auf /v1/messages. Siehe Ausgabenlimits für die Festlegung und Durchsetzung von Limits; dieser Abschnitt behandelt die gateway.yaml-Schlüssel, die die Funktion aktivieren und optimieren.
enforcement
Der enforcement-Block steuert das Verhalten von Ausgabenlimit-Prüfungen, wenn der Store nicht verfügbar ist.
pricing
Der pricing-Block teilt dem Ausgabenzähler mit, was statt des USD-Listenpreises berechnet werden soll, sodass Limits und /effective Ihre vertraglich vereinbarten Sätze widerspiegeln. Beträge bleiben in USD und sind eine Schätzung, keine Rechnung. Zwei Voraussetzungen:
- Claude Code v2.1.227 oder später auf dem Gateway-Server. Frühere Versionen lehnen den unbekannten Schlüssel beim Start ab.
- Ein
admin:-Block oder in v2.1.268 oder später einmanaged:-Block mit mindestens einer Richtlinie. Das Gateway weigert sich zu starten, wennpricinggesetzt ist und keiner der Blöcke vorhanden ist, da nichts es lesen würde.
Wie der Zähler eine Überschreibungszeile abgleicht:
- Eine Zeile ersetzt den Listenpreis für Anfragen, die
upstream, einupstreams[].name, fürmodelbedient. Das schließt den höheren Schnellmodus-Satz ein, sodass Schnell- und Standardanfragen mit denselben vier Sätzen gezählt werden. - Eine integrierte ID wie
claude-sonnet-4-6, abgeglichen wiemodels[].id, deckt jede datierte Form, regionale Amazon-Bedrock-Form oder Google-Cloud-Agent-Plattformform ab, die der Zähler als dieses Modell bewertet. Jede andere Zeichenkette, z. B. ein Alias oder ein Inferenzprofil-ARN, gleicht die ID ab, die der Client gesendet hat, oder die Zeichenkette, die upstream gesendet wurde, Groß-/Kleinschreibung ignoriert. - Wenn sich Zeilen überlappen, wählt der Zähler die spezifischste Zeile statt der ersten Zeile: eine Zeile, deren
modeldie genaue Modellzeichenkette ist, die upstream gesendet wurde, dann eine Zeile, die die genaue ID abgleicht, die der Client gesendet hat, dann eine Zeile, die das integrierte Modell benennt. - Ein unbekannter Upstream-Name schlägt beim Start fehl, ebenso wie zwei Zeilen für einen Upstream, die dasselbe Modell benennen, einschließlich zwei Schreibweisen eines integrierten Modells. Das Gateway warnt beim Start vor einer Zeile, die kein anforderbares Modell verwenden kann.
- Web-Such-Anfragen bleiben beim $0,01-Listenpreis; der Multiplikator wird immer noch auf sie angewendet.
Preise erhöhen
Mit v2.1.271 oder später auf dem Gateway-Server können Siemultiplier über 1, bis zu 10, setzen, um mehr als der Anbieter berechnet zu zählen, z. B. einen internen Verrechnungssatz. Dieses Beispiel zählt jede Anfrage mit 120 % des Preises:
admin:-Block gilt der Aufschlag auch für Ausgabenlimits. Der Zähler zählt 120 % des Preises, sodass Entwickler ihre Limits schneller erreichen. Das Gateway protokolliert eine Warnung beim Start, die dies besagt.
Der Multiplikator ändert nicht, was der Upstream-Anbieter für die Anfragen berechnet.
Wenn das Gateway auch die Sätze an angemeldete Clients sendet, benötigen Entwickler Claude Code v2.1.271 oder später, um den Aufschlag zu sehen. Frühere Clients ignorieren einen multiplier über 1 und zeigen Kosten ohne ihn.
Ein Gateway-Server früher als v2.1.271 weigert sich zu starten, wenn Sie einen multiplier über 1 setzen.
Sätze an angemeldete Clients senden
Mit v2.1.268 oder später auf dem Gateway-Server fügt das Gateway die Sätze auspricing auch in die managed-Richtlinien ein, die es bedient, als die modelPricing-verwaltete Einstellung. Entwickler, die von einer Richtlinie abgeglichen werden, sehen dann die pricing-Sätze für den ersten Upstream, der jede Modell-ID in /usage, der Statuszeile und OpenTelemetry bedient. Ein Entwickler, der keine Richtlinie abgleicht, erhält keine verwalteten Einstellungen, sodass seine Zahlen beim Listenpreis bleiben. Clients wenden die Einstellung in Claude Code v2.1.242 oder später an.
- Was das Gateway hinzufügt: Sofern der
cli-Block einer Richtlinie nicht bereitsmodelPricingsetzt, fügt das Gateway denmultiplierund für jede Modell-ID, die ein Client anfordern kann, die Überschreibungszeile des ersten Upstream hinzu, der diese ID bedient. Ein Satz, den nur ein Failover-Upstream berechnet, bleibt beim Gateway. - Eine Richtlinie ausschließen: Setzen Sie
modelPricingauf{}imcli-Block dieser Richtlinie, und ihre Entwickler bleiben beim Listenpreis. - Sätze einer Richtlinie behalten: Eine Richtlinie, deren
cli-BlockmodelPricingmit ihrem eigenenmultiplieroderoverridessetzt, behält diesesmodelPricingganz, und das Gateway fügt keine eigenen Sätze hinzu.
models
Der models-Block ist eine optionale von Administratoren kuratierte Modellliste, die unter /v1/models bedient und verwendet wird, um Modell-IDs pro Upstream zu übersetzen. Sie ist erforderlich für Nicht-US-Amazon-Bedrock-Regionen, Amazon-Bedrock-Provisioned-Throughput-ARNs und Microsoft-Foundry-Bereitstellungsnamen.
upstream_model muss dem name eines konfigurierten Upstream entsprechen, der standardmäßig auf den Anbieternamen gesetzt ist. Ein Schlüssel, der keinem Upstream entspricht, schlägt beim Start fehl, daher lassen Sie die Zeilen für Anbieter weg, die Sie nicht verwenden.
managed
Der managed-Block definiert rollenbasierte Zugriffrichtlinien, die nach IdP-Gruppen oder E-Mail-Domäne verschlüsselt sind. Richtlinien werden in Reihenfolge ausgewertet; die erste Übereinstimmung wird ausgewählt und dann mit der unten beschriebenen match: {}-Catch-All-Basis zusammengeführt. Sie werden pro Benutzer unter GET /managed/settings mit ETag/304-Caching bedient.
match: {}-Catch-All, üblicherweise zuletzt aufgelistet, wird als Basisschicht behandelt. Jede andere Richtlinie erbt jeden Schlüssel, den sie nicht setzt, von der Catch-All, sodass Pro-Rollen-Einträge nur auflisten müssen, was sich vom Organisationsstandardwert unterscheidet. Die Zusammenführungsregeln hängen vom Schlüsseltyp ab:
- Zulassungslisten:
availableModelsundpermissions.allow. Die Liste einer bestimmten Richtlinie ersetzt die Basis vollständig. - Ablehnungslisten und Hook-Arrays:
permissions.deny,permissions.ask,disabledMcpjsonServers,deniedMcpServers,blockedMarketplacesund jedeshooks-Event-Typ-Array. Diese nehmen die Vereinigung von Basis und Richtlinie, sodass ein organisationsweiter Ablehnungs- oder Audit-Hook nicht versehentlich durch eine Pro-Rollen-Überschreibung gelöscht werden kann. - Datensatz-typisierte Schlüssel:
env,modelOverridesundskillOverrides. Diese werden flach zusammengeführt, sodass ein Pro-Rollen-env-Block Schlüssel überschreibt, die er setzt, und den Rest von der Basis erbt.
availableModels wird auch serverseitig unter /v1/messages erzwungen, sodass ein abgelehntes Modell 400 zurückgibt, unabhängig davon, was der Client sendet.
Das Gateway validiert den model-Wert selbst, bevor es eine Anfrage weitergeleitet, sodass ein fehlerhafter Wert niemals einen Upstream erreicht. Es lehnt die Anfrage in zwei Fällen mit 400 ab:
- Wenn der Wert fehlt oder leer ist, lehnt das Gateway die Anfrage mit der Meldung
model is requiredab. Diese Prüfung erfordert ein Gateway, das Claude Code v2.1.228 oder später ausführt. - Wenn der Wert vorhanden ist, aber keine Zeichenkette ist, lehnt das Gateway die Anfrage mit der Meldung
model must be a stringab. Erfordert ein Gateway, das Claude Code v2.1.221 oder später ausführt.
Ein authentifizierter Benutzer, der keine Richtlinie abgleicht, erhält die Standardwerte des Gateways, was bedeutet, jedes Modell im Katalog und keine verwalteten Einstellungen. Fügen Sie eine
match: {}-Catch-All zuletzt hinzu, wenn Sie eine garantierte Standardrichtlinie möchten.
Das Gateway führt kein eigenes Benutzerverzeichnis. Es autorisiert jede Anfrage vom IdP-Token des Benutzers, liest die Gruppenmitgliedschaft aus dem
groups-Anspruch des Tokens und wertet Richtlinien dagegen aus. Es gibt kein Verzeichnis zum Aufzählen und keine Konten zum Vorab-Erstellen, und daher keinen SCIM-Endpunkt, da es nichts gibt, das SCIM synchronisieren könnte.Führen Sie Benutzer- und Gruppenzyklus-Management an der Quelle der Wahrheit durch, die das native SCIM-Provisioning Ihres IdP oder eine dedizierte Identitäts-Governance-Plattform ist. Mitgliedschaft und Deprovisioning, die dort gesteuert werden, fließen automatisch durch den Token in das Gateway. Wenn Sie SCIM-Provisioning von Claude-Konten selbst möchten, ist das eine Claude for Enterprise-Fähigkeit.Zwei Ausbreitungsuhren gelten:- Richtlinieninhalt: Das Bearbeiten einer Richtlinie und das erneute Bereitstellen erreichen verbundene Clients bei ihrer nächsten verwalteten Einstellungsabfrage, innerhalb einer Stunde, abgesehen von den Änderungen, die nur beim nächsten Start gelten
- Gruppenmitgliedschaft: Das Ändern der Gruppenmitgliedschaft eines Benutzers ändert, welche Richtlinie ihn abgleicht. Dies tritt beim nächsten Sitzungs-Neuausgabe in Kraft, was die nächste stille Aktualisierung bedeutet, begrenzt durch
session.ttl_hours.
Matcher-Werte, die das Gateway beim Start stoppen
Beim Start prüft das Gateway denmatch-Block jeder Richtlinie und die admin_groups-Liste. Jeder dieser Werte stoppt das Gateway mit einem Fehler, der das Feld benennt:
- Eine leere
groups-Liste - Ein leerer Eintrag in
groupsoder inadmin_groups - Eine leere
email_domain - Eine
email_domain, die@, Leerzeichen oder ein Komma enthält. Das Gateway trimmt den Wert und entfernt ein führendes@, bevor diese Prüfung durchgeführt wird. Schreiben Sie eine bloße Domäne, z. B.example.com.
- Eine leere
email_domain: Das Gateway übersprung die Domänenprüfung, sodass eine Richtlinie mit einer leerenemail_domainund keinergroups-Liste jeden authentifizierten Benutzer abglich - Eine leere
groups-Liste: Die Richtlinie gleichte niemanden ab - Eine
email_domain, die@, Leerzeichen oder ein Komma enthält: Die Richtlinie gleichte niemanden ab - Ein leerer Eintrag in
groupsoder inadmin_groups: Der Eintrag gleichte einen Benutzer nur ab, wenn dergroups-Anspruch des IdP dieses Benutzers auch einen leeren Eintrag enthielt. Inadmin_groupsgewährte diese Übereinstimmung Admin-Zugriff. Wenn Ihreadmin_groups-Liste niemals einen leeren Eintrag enthielt, erhielt niemand auf diese Weise Admin-Zugriff.
Was in cli geht
Jeder cli-Wert ist ein vollständiges Claude-Code-managed-settings.json-Dokument, das gleiche Schema, das Sie über MDM oder /etc/claude-code/managed-settings.json bereitstellen würden, hier als YAML ausgedrückt. Die CLI wendet das bereitgestellte Dokument auf der verwalteten Ebene an, über Benutzer- und Projekteinstellungen, anstelle von serverseitig verwalteten Einstellungen. Sie ignoriert daher die Einstellungen, die auf OS-Ebenen-Richtlinienquellen beschränkt sind, wie policyHelper und wslInheritsWindowsSettings.
Das Gateway validiert jedes Dokument beim Start gegen das Einstellungsschema der CLI, sodass ein nicht erkannter Top-Level-Schlüssel beim Start mit einem Fehler fehlschlägt, der jeden fehlerhaften Schlüssel benennt. Absichtlich offene Teile des Schemas akzeptieren immer noch beliebige Werte, da neuere Clients Einträge erkennen können, die das Schema des Gateways nicht erkennt. Diese offenen Schlüssel umfassen env, pluginConfigs und Schlüssel, die unter permissions verschachtelt sind.
Da die Validierung das Schema verwendet, das mit der installierten Version des Gateways gebündelt ist, erfordert das Einfügen eines Top-Level-Einstellungsschlüssels, der von einer neueren Claude-Code-Version eingeführt wurde, in die verwaltete Konfiguration, das Gateway zuerst zu aktualisieren. Testen Sie eine neue Richtlinie auf einem Client, bevor Sie sie ausrollen.
Die vollständige Schlüsselreferenz befindet sich in Claude-Code-Einstellungen. Die Schlüssel, die Operatoren zuerst erreichen:
Da diese Einstellungen über das Netzwerk ankommen, zeigt die CLI jedem Entwickler einen Sicherheitsgenehmigungsdialog, bevor die unten aufgelisteten Einstellungen angewendet werden:
hooksenv-Variablen, die die Genehmigung des Entwicklers erfordern, wie Proxy- und Basis-URL-Variablen- Shell-Ausführungseinstellungen wie
apiKeyHelperundstatusLine - die Sandbox-Binäreinstellungen
sandbox.bwrapPath,sandbox.socatPathundsandbox.ripgrep - Sandbox-Einstellungen, die Datenverkehr abfangen, Anmeldedaten injizieren oder die Isolation schwächen, wie
sandbox.network.tlsTerminateund die Proxy-Port-Einstellungen. Sicherheitsgenehmigungsdialoge listet sie alle auf.
env-Variablen an, ohne dem Entwickler den Genehmigungsdialog zu zeigen, wie Modellauswahleinstellungen und numerische Limits. Andere bereitgestellte Variablen können die Genehmigung des Entwicklers erfordern, bevor sie wirksam werden; ein nicht leerer Proxy-, Basis-URL- oder OTEL_EXPORTER_OTLP_ENDPOINT-Wert tut dies immer. Wenn eine bereitgestellte Variable Genehmigung benötigt, benennt der Dialog sie.
Umgebungsvariablen und der Genehmigungsdialog hat die Details, einschließlich vier Datenschutz-Umschalter, deren bereitgestellter Wert entscheidet, ob sie Genehmigung benötigen. Vor v2.1.218 wendete Claude Code weniger Variablen an, ohne den Entwickler zu fragen, sodass mehr bereitgestellte Variablen den Dialog auslösten.
Die Telemetrie-Konfiguration des Gateways drückt OTEL_EXPORTER_OTLP_ENDPOINT, sodass das Setzen von telemetry.forward_to den Dialog auf jedem interaktiven Client auslöst. Der Dialog schützt die Maschine des Entwicklers vor einem kompromittierten oder feindseligem Gateway, nicht die Organisation vor dem Entwickler.
Ein nicht-interaktiver Lauf mit dem Flag -p kann den Dialog nicht anzeigen. Er wendet die gepushten Einstellungen nur für diesen Lauf an und speichert sie nicht als genehmigt, sodass die nächste interaktive Sitzung des Entwicklers immer noch den Dialog für sie anzeigt. Vor v2.1.207 speicherte ein nicht-interaktiver Lauf die Einstellungen als genehmigt und keine spätere interaktive Sitzung zeigte den Dialog dafür.
Wenn ein Entwickler ablehnt, beendet Claude Code diese Sitzung, anstatt die Richtlinie anzuwenden. Wenn Sie einen neuen Hook oder eine beliebige Env-Variable, die den Dialog auslöst, an eine breite Richtlinie pushen, zeigt Claude Code daher den Dialog jedem abgleichenden Entwickler. Es zeigt den Dialog in einer laufenden Sitzung bei der nächsten stündlichen Abfrage und ansonsten beim nächsten Start des Entwicklers.
Der cli-Schlüssel hieß in früheren Versionen settings. Diese Schreibweise wird immer noch als Alias akzeptiert, aber neue Bereitstellungen sollten cli verwenden.
MCP-Server in einer Richtlinie
Um MCP-Server für die Claude-Code-Clients bereitzustellen, die eine Richtlinie abgleicht, setzen SiemanagedMcpServers im cli-Block dieser Richtlinie. Sie benötigen Claude Code v2.1.259 oder später auf dem Gateway-Server und auf Clients.
Das Gateway prüft jeden Eintrag beim Start mit den gleichen Regeln, die Claude Code auf dem Client anwendet, und wenn ein Eintrag eine Prüfung nicht besteht, weigert sich das Gateway zu starten und benennt den Eintrag.
Wenn Sie eine ${VAR}-Referenz in gateway.yaml schreiben, löst das Gateway sie beim Start aus seiner Umgebung durch Geheimnis-Erweiterung auf, bevor es die Eintragsprüfungen ausführt, sodass jeder abgleichende Client den Literalwert erhält und ihn lesen kann. Die Header-Anleitung für bereitgestellte Server gilt für den erweiterten Wert.
Das Gateway lehnt die .mcp.json-Schreibweise mcpServers in einem cli-Block ab, und sein Boot-Fehler benennt managedMcpServers als den zu verwendenden Schlüssel. Vor v2.1.259 lehnte das Gateway jede MCP-Server-Definition in einem cli-Block ab.
Claude Desktop-Überlagerung
Wenn Ihre Organisation auch Claude Desktop bereitstellt, bedient das gleiche Gateway beide Clients. Zeigen SiebootstrapUrl in Claude Desktops verwalteter Konfiguration auf <listen.public_url>/user/bootstrap. Claude Desktop leitet den OAuth-Aussteller von dieser URL ab, führt die gleiche Geräte-Code-Anmeldung gegen dieses Gateway durch und ruft seine Konfiguration aus der Antwort ab.
Erfordert Claude Code v2.1.203 oder später auf dem Gateway-Server und ein explizites Opt-In:
/user/bootstrap gibt 404 zurück, es sei denn, die Richtlinie, die den Benutzer abgleicht, trägt einen desktop-Schlüssel. Ein leerer desktop: {} meldet eine Richtlinie an, und ein desktop-Schlüssel auf der match: {}-Basisschicht meldet jede Richtlinie an, die ihn erbt. Das Audit-Log zeichnet jede Anfrage als desktop_bootstrap.serve oder desktop_bootstrap.denied auf.cli-Blocks und von der Top-Level-Gateway-Konfiguration ab:
-
Die Modellliste aus
availableModels -
Deaktivierte Tools aus Bare-Tool-Namen-
permissions.deny-Einträgen. Wenn SiedisabledBuiltinToolsimdesktop-Block der Richtlinie setzen, bedient das Gateway die Vereinigung Ihres Wertes und der abgeleiteten Liste, sodass Sie auf diese Weise mehr Tools deaktivieren können, aber eines, das Sie durchpermissions.denydeaktiviert haben, nicht erneut aktivieren können -
Die Egress-Zulassungsliste aus
sandbox.network.allowedDomains. Wenn SiecoworkEgressAllowedHostsimdesktop-Block der Richtlinie setzen, verwendet das Gateway diesen Wert statt der abgeleiteten Liste -
Ein OTLP-Endpunkt, der auf das Gateway selbst zeigt, und die Identitätsattribute des angemeldeten Benutzers. Das Gateway leitet die Exporte, die es an diesem Endpunkt erhält, an Ihre
forward_to-Ziele weiter. Es enthält den Endpunkt und die Attribute, wenn Sie sowohltelemetry.forward_toals auchlisten.public_urlsetzen. Claude Desktop exportiert jedes Signal mit einer Kodierung:http/protobufoderhttp/json, wenn SieOTEL_EXPORTER_OTLP_PROTOCOLoder eine seiner Pro-Signal-Varianten aufhttp/jsonimenvder Richtlinie setzen. Vor Claude Code v2.1.261 auf dem Gateway-Server setzte die Antworthttp/jsonunabhängig, sodass ein Collector, der nur Protobuf akzeptiert, Claude Desktops Exporte ablehnte
disabledBuiltinTools, coworkEgressAllowedHosts oder Claude Desktops eigene managedMcpServers-Einstellung im desktop-Block einer Richtlinie zu setzen, benötigen Sie Claude Code v2.1.232 oder später auf dem Gateway-Server. Claude Desktops managedMcpServers nimmt einen Array-Wert statt eines Objekts.
Das Gateway lässt Schlüssel ohne Claude-Desktop-Äquivalent weg, wie hooks und scoped-Berechtigungsregeln wie Bash(npm *), aus der Bootstrap-Antwort.
Fügen Sie den optionalen desktop-Block neben cli hinzu, um Claude-Desktop-Einstellungen direkt zu setzen. Schreiben Sie Einstellungen aus Claude Desktops verwalteter Konfigurationsreferenz als flache Schlüsselnamen. Lassen Sie Schlüssel weg, die Claude Desktop nur aus MDM oder lokalen Dateien liest, wie bootstrapUrl; das Gateway lehnt sie beim Start ab. Vor v2.1.232 akzeptierte das Gateway eine feste Liste von 11 Feature-Gate-Schlüsseln, wie chatTabEnabled und disableAutoUpdates, und lehnte jeden anderen Schlüssel beim Start ab. Vor v2.1.227 lehnte das Gateway auch chatTabEnabled und chatAdvancedFileAnalysisEnabled beim Start ab.
desktop-Block beim Start gegen das Konfigurationsschema, das Claude Desktop selbst verwendet, sodass ein Fehler beim Gateway-Start als Fehler auftaucht, der den Schlüssel benennt, statt jeden verbundenen Desktop zu erreichen. Das Gateway schlägt beim Start fehl, wenn ein Block Folgendes enthält:
- Ein unbekannter Schlüssel
- Ein erkannter Schlüssel, dessen Wert Claude Desktop ablehnen oder stillschweigend löschen würde, wie ein leerer Wert oder ein falsch geschriebener Unterschlüssel in einem verschachtelten Eintrag. Vor v2.1.260 ließ das Gateway ein falsch geschriebenes Feld in einem verschachtelten Objekt eines
managedMcpServers- oderorgPluginSettings-Eintrags stillschweigend fallen, anstatt beim Start fehlzuschlagen. - Ein Schlüssel, den das Gateway selbst berechnet: die Inferenzverbindung, die Modellliste und das OTLP-Relay. Konfigurieren Sie diese durch
upstreams,modelsund dentelemetry-Abschnittforward_to. - Ein Legacy-Alias eines aktuellen Schlüssels. Im Boot-Fehler benennt das Gateway den kanonischen Schlüssel zum Schreiben.
managedMcpServers-Eintrag ohne transport, startet das Gateway und protokolliert eine Warnung, die den Ersatz benennt.
Das Gateway validiert einen desktop-Block gegen das Schema, das mit seiner installierten Version gebündelt ist, wie es den cli-Block tut. Um eine Einstellung bereitzustellen, die von einer neueren Claude-Desktop-Version eingeführt wurde, aktualisieren Sie das Gateway zuerst. Zum Beispiel benötigen userPluginMarketplacesEnabled und userPluginUploadsEnabled Claude Code v2.1.260 oder später auf dem Gateway-Server und Claude Desktop 1.37937.0 oder später auf den Maschinen der Mitglieder.
Wenn Sie orgPluginSettings im desktop-Block einer Richtlinie setzen, bedient das Gateway es in der Array-Form, die Claude Desktop 1.15200.0 und später liest. Ältere Desktops ignorieren das Array und erzwingen keine Plugin-Tool-Richtlinie, daher aktualisieren Sie Mitglieder auf 1.15200.0 oder später, bevor Sie sich darauf verlassen.
Das Gateway füllt Schlüssel, die der desktop-Block einer Richtlinie nicht setzt, aus dem match: {}-Catch-All-desktop-Block, auf die gleiche Weise, wie es den cli-Block einer Richtlinie ausfüllt. Wenn Sie disabledBuiltinTools oder builtinToolPolicy sowohl in der Basis als auch in einer Rollen-Richtlinie setzen, behält das Gateway die Einschränkung der Basis:
disabledBuiltinTools: Das Gateway verwendet die Vereinigung der Liste der Basis und der RichtliniebuiltinToolPolicy: Wenn Sie ein Tool in der Basis auf einen anderen Wert alsallowsetzen, behält das Gateway diesen Wert, auch wenn Sieallowfür das gleiche Tool in einer Rollen-Richtlinie setzen
banner ganz, sodass wenn Sie banner.text in einer Rollen-Richtlinie setzen, das Gateway die banner.backgroundColor der Basis löscht.
Wenn Sie Claude Desktop nicht bereitstellen, lassen Sie desktop vollständig aus Ihren Richtlinien weg; das Gateway gibt dann 404 von /user/bootstrap für jeden Benutzer zurück.
Vorrang mit anderen verwalteten Quellen
Wenn ein Gerät auch eine MDM-bereitgestellte Richtlinie oder eine lokalemanaged-settings.json hat, rangieren Gateway-bereitgestellte Einstellungen zuerst. Vorrang innerhalb der verwalteten Ebene auf der Seite der verwalteten Einstellungen sagt, wann die lokalen Quellen gelten, und hat die Schlüssel, die Claude Code aus jeder Admin-Quelle liest unabhängig davon, welche Quelle es ausgewählt hat, wie die Sandbox-Lock-Schlüssel, forceRemoteSettingsRefresh und die Pro-Variable env-Zusammenführung. Ein policyHelper, der in einem MDM-Profil oder der Datei der verwalteten Einstellungen konfiguriert ist, wird nur ausgeführt, wenn das Gateway keine Einstellungen bereitstellt; der Eintrag sagt, was seine Ausgabe ersetzt.
Einbettungs-Hosts wie Claude Desktop können Richtlinien durch die SDK-Option managedSettings bereitstellen. Übergeordnete Einstellungen von Einbettungs-Hosts sagt, wann Claude Code sie anwendet, und Übergeordnete Einstellungen einschränken listet auf, welche Zulassungs-Richtungs-Einstellungen immer noch ohne die allowManaged*Only-Sperren gelten.
Gateway-Richtlinien gelten für jeden Claude-Code-Aufruf auf der Maschine, einschließlich nicht-interaktiver claude -p-Läufe und Sitzungen, die vom Agent SDK erzeugt werden. Wenn das Gateway beim Start nicht erreichbar ist, beenden sich angemeldete Sitzungen mit einem Fehler, anstatt ohne ihre Richtlinie zu laufen.
telemetry
Die CLI sendet Metriken, Protokolle und, wenn aktiviert, Traces an das Gateway, das sie wörtlich an jedes konfigurierte Ziel weitergeleitet. Die Exporte verwenden OpenTelemetry Protocol (OTLP) über HTTP. Um das Relay zu überspringen und Sitzungen direkt an Ihren Collector exportieren zu lassen, benennen Sie den Collector in einer Richtlinie. Siehe Überwachung der Nutzung für die Metriken und Ereignisse, die die CLI ausgibt.
Die CLI stempelt jeden Export mit der Identität des authentifizierten Benutzers, gelesen aus dem vom Gateway ausgegebenen JWT: die Attribute user.id, user.email und user.groups. Die Kostenattribution pro Entwickler und Nutzungsattribution funktioniert daher ohne Konfiguration auf der Entwicklerseite.
Claude Desktop und Cowork-Sitzungen, die sich durch das Gateway anmelden, stempeln ihre Telemetrie mit user.email und user.groups neben enduser.id, sodass Sie Terminal-, Desktop- und Cowork-Nutzung mit einer Abfrage auf user.email oder user.groups abdecken können. user.groups ist die kommagetrennte IdP-Gruppenliste.
Desktop und Cowork-Telemetrie tragen auch enduser.sub, den sub-Anspruch, den Ihr Identitätsanbieter für den Benutzer ausstellt, der gleich bleibt, wenn sich die E-Mail eines Benutzers ändert. Terminal-Sitzungen stempeln den gleichen Wert unter user.id, sodass eine Abfrage, die enduser.sub gegen Terminal-user.id abgleicht, die Terminal-, Desktop- und Cowork-Nutzung eines Benutzers zusammen abdeckt. Bei Desktop- und Cowork-Exporten ist user.id ein anonymer Bezeichner, nicht der Betreff.
Wie alle OpenTelemetry-Daten von Claude Code gehen diese Attribute nur an Ziele, die Ihre Organisation konfiguriert, niemals an Anthropic.
Wenn die Gruppenliste eines Benutzers länger als 255 Zeichen ist, sobald sie prozentual kodiert ist, oder ein Gruppenname ein Komma oder Gleichheitszeichen enthält, lässt das Gateway user.groups aus der Desktop- und Cowork-Telemetrie dieses Benutzers weg, anstatt es zu kürzen. Die Terminal-Sitzungen dieses Benutzers tragen immer noch die vollständige Liste.
Das Gateway lässt enduser.sub weg, wenn der Betreff länger als 255 Zeichen ist, sobald er prozentual kodiert ist, oder ein Leerzeichen, ein Zeichen außerhalb des druckbaren ASCII oder eines von , ; = \ " % enthält. Die Desktop- und Cowork-Telemetrie dieses Benutzers behält seine anderen Attribute.
Sie benötigen Claude Code v2.1.265 oder später auf dem Gateway-Server für user.email und user.groups auf Desktop- und Cowork-Telemetrie, und Claude Desktop 1.24012 oder später auf der Maschine jedes Entwicklers für user.groups.
Sie benötigen Claude Code v2.1.274 oder später auf dem Gateway-Server für enduser.sub.
forward_to-URL muss https:// verwenden, mit einer Ausnahme für einen Collector auf der Loopback-Schnittstelle des Gateways selbst:
http://localhost:<port>besteht die Konfigurationsvalidierung, aber der SSRF-Guard blockiert jeden Export mitECONNREFUSED_SSRF, es sei denn, Sie setzenCLAUDE_GATEWAY_ALLOW_LOOPBACK=1in der Umgebung des Gatewayshttp://127.0.0.1:<port>oderhttp://[::1]:<port>schlägt beim Start fehl, es sei denn, diese Variable ist gesetzt
HTTPS_PROXY gesetzt ist, sendet das Gateway Exporte durch diesen Proxy.
Um einen internen Collector direkt zu erreichen, fügen Sie ihn zu NO_PROXY nach Hostname oder nach einer Domäne mit einem führenden Punkt wie .internal.example.com hinzu, was Claude Code v2.1.277 oder später auf dem Gateway-Server erfordert. Stellen Sie sicher, dass das Gateway den Collector ohne den Proxy erreichen kann. Ein Eintrag ohne einen führenden Punkt gleicht nur diesen genauen Namen ab, nicht Namen darunter. CIDR-Bereiche gleichen nicht ab.
Mit Proxy-Only-Egress aktiviert, erlauben Sie den Collector stattdessen im Proxy, da jeder NO_PROXY-Eintrag Proxy-Only-Egress ausschaltet.
Telemetrie ist in der CLI standardmäßig deaktiviert. Wenn Sie sowohl telemetry.forward_to als auch listen.public_url setzen, schaltet das Gateway sie für verbundene Clients ein, indem es sechs Umgebungsvariablen durch /managed/settings drückt:
CLAUDE_CODE_ENABLE_TELEMETRY=1OTEL_METRICS_EXPORTER,OTEL_LOGS_EXPORTERundOTEL_TRACES_EXPORTER, jeweils aufotlpgesetzt, wenn mindestens einforward_to-Ziel dieses Signal aktiviert, und aufnoneandernfallsOTEL_EXPORTER_OTLP_ENDPOINT=<public_url>OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
OTEL_RESOURCE_ATTRIBUTES.
Vor Claude Code v2.1.265 auf dem Gateway-Server drückte das Gateway alle drei Exporter-Selektoren als otlp, einschließlich für Signale, die kein Ziel aktiviert hat.
Der gepushte Endpunkt wird aus der öffentlichen URL erstellt, sodass Metriken und Protokolle keine OTEL-Konfiguration von Entwicklern oder Richtlinien benötigen.
Entwickler, die sich durch /login anmelden, können Exporte nicht mit ihrer eigenen OTEL-Konfiguration umleiten:
- Lokal gesetzte Variablen: Claude Code wendet die gepushten Variablen auf der verwalteten Ebene an, sodass jede den Wert überschreibt, den ein Entwickler lokal dafür setzt.
- Lokal konfigurierte Endpunkte: Mit OTLP/HTTP-Export aktiviert ignoriert die CLI jeden lokal konfigurierten Endpunkt, unabhängig davon, ob das Gateway die Telemetrie-Variablen gepusht hat. Seine Exporte gehen an das Gateway, es sei denn, eine Richtlinie benennt Ihren Collector als Endpunkt.
forward_to-Ziel für ein Signal akzeptiert das Gateway es und verwirft es. Wenn Entwickler bereits Claude-Code-Telemetrie an einen Ihrer Collector exportieren, fügen Sie ihn als forward_to-Ziel hinzu, mit Protokollen oder Traces aktiviert, wenn sie diese exportieren, sodass er ihre Daten weiterhin erhält, nachdem sie sich anmelden. Um das Relay stattdessen zu überspringen, benennen Sie den Collector in einer Richtlinie.
Traces erfordern auch CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1 auf jedem Client. Setzen Sie es im env-Block einer verwalteten Richtlinie, da das Gateway es nicht drückt. Entwickler genehmigen es im gleichen Sicherheitsgenehmigungsdialog, den der gepushte Endpunkt bereits auslöst.
Setzen Sie es auf 1 nur in den Richtlinien, deren Gruppen Sie verfolgen möchten. Eine Richtlinie, die es nicht setzt, erbt den Wert von Ihrer match: {}-Catch-All-Richtlinie, wenn diese Richtlinie einen setzt, pro den Zusammenführungsregeln. Um zu verhindern, dass die Clients einer Gruppe Traces senden, auch wenn ein Entwickler die Variable lokal setzt, setzen Sie sie auf 0 in der Richtlinie dieser Gruppe.
Sowohl Protobuf- als auch JSON-OTLP-Kodierungen werden weitergeleitet, und jedes OpenTelemetry-kompatible Backend funktioniert als Ziel.
Ihre eigenen Labels hinzufügen
Um feste Labels wieservice.namespace oder deployment.environment.name auf die Telemetrie von Sitzungen zu legen, die sich durch das Gateway anmelden, setzen Sie telemetry.resource_attributes. Jedes Label ist ein OpenTelemetry-Ressourcenattribut, und jedes Ziel erhält die gleichen Labels.
Sitzungen erhalten die Labels nur, wenn Sie auch telemetry.forward_to und listen.public_url setzen. Dieses Beispiel fügt zwei Labels hinzu:
- Namen verwenden nur Buchstaben, Ziffern,
.,_und- - Namen sind nicht reserviert. Verglichen in jeder Schreibweise sind die reservierten Namen alles, das mit
user.,enduser.oderidentity.beginnt, plusservice.name,service.version,claude.deployment_mode,host.arch,os.type,os.versionundwsl.version - Werte sind nicht leere druckbare ASCII ohne Leerzeichen und keine von
, ; = \ " % - Werte sind höchstens 255 Zeichen, wie das Gateway sie nach prozentualem Kodieren zählt, sodass
/,:und@jeweils als drei zählen - Werte sind Text, daher zitieren Sie eine Zahl,
trueoderfalse
telemetry.resource_attributes zu setzen. Ein früheres Gateway weigert sich zu starten, wenn es den Schlüssel findet. Aktualisieren Sie jedes Replikat, bevor Sie den Schlüssel hinzufügen, und entfernen Sie den Schlüssel, bevor Sie zu einer früheren Version zurückrollen.
Terminal-Sitzungen, die sich durch /login anmelden, erhalten die Labels als OTEL_RESOURCE_ATTRIBUTES, gepusht mit den anderen Telemetrie-Variablen. Wenn Sie OTEL_RESOURCE_ATTRIBUTES im env-Block einer Richtlinie setzen, erhalten Terminal-Sitzungen, die diese Richtlinie abgleichen, diesen Wert statt der Labels. Claude Desktop erhält die Labels vom Gateway neben user.email und den anderen Identitätsattributen.
Claude Code kopiert auch jedes Label auf jeden Metrik-Datenpunkt, sodass Sie Metriken in einem Backend, das Ressourcenattribute nicht indiziert, danach filtern können. Um diese Kopie auszuschalten, siehe Metriken-Kardinalitätskontrolle.
Direkt an Ihren Collector exportieren
Um Sitzungen, die sich durch/login anmelden, Telemetrie direkt an Ihren Collector senden zu lassen, anstatt durch das Relay, setzen Sie OTEL_EXPORTER_OTLP_ENDPOINT auf die https://-Basis-URL des Collectors im env-Block einer verwalteten Richtlinie. Claude Code hängt /v1/metrics, /v1/logs oder /v1/traces an die URL an, die Sie setzen, wie https://otel-collector.example.com:4318, und exportiert jedes Signal dort über OTLP/HTTP. Erfordert Claude Code v2.1.265 oder später auf der Maschine jedes Entwicklers. Frühere Clients exportieren durch das Relay.
Um sich beim Collector zu authentifizieren, setzen Sie OTEL_EXPORTER_OTLP_HEADERS im gleichen env-Block. Sitzungen senden niemals das Gateway-Sitzungstoken des Entwicklers an einen Collector, der auf diese Weise benannt wird.
Wenn Sie diesen Endpunkt in einer Richtlinie hinzufügen oder ändern, fragt Claude Code jeden Entwickler, ihn im Sicherheitsgenehmigungsdialog zu genehmigen, bevor er ihn in einer interaktiven Sitzung anwendet.
Claude Code prüft den Endpunkt, bevor es ein Signal direkt exportiert, und behält dieses Signal auf dem Relay, wenn eine Prüfung fehlschlägt. Die Prüfungen umfassen:
- Der Endpunkt kommt vom Gateway selbst. Wenn Sie die gleiche Variable in einem MDM-Profil oder einer lokalen
managed-settings.jsonsetzen, bleiben Exporte auf dem Relay. - Die URL verwendet
https://oderhttp://zu einer Loopback-Adresse - Die URL wird zu einem Pfad aufgelöst, der mit
/v1/<signal>endet, ohne Abfrage oder Fragment. Claude Code erstellt diesen Pfad selbst aus der generischen Variable. Es verwendet eine Pro-Signal-Variable wieOTEL_EXPORTER_OTLP_METRICS_ENDPOINTwie geschrieben, daher den vollständigen Pfad dort einschließen. - Die URL ist nicht der eigene Host des Gateways. Ein Endpunkt, der auf das Gateway adressiert ist, behält den Relay-Pfad und sein Sitzungstoken.
- Weder Sie noch der Entwickler haben
otelHeadersHelperin einer Einstellungsquelle konfiguriert. Mit einem konfigurierten Helper bleibt jedes Signal auf dem Relay.
OTEL_*_EXPORTER-Selektoren.
Der Endpunkt allein schaltet Export nicht ein, daher setzen Sie auch die Variablen, die dies tun, es sei denn, das Gateway drückt sie bereits:
- Wenn das Gateway bereits die Telemetrie-Variablen drückt, decken sie Aktivierung, Selektoren und Protokoll ab, und Ihr expliziter Endpunkt überschreibt den gepushten
<public_url>-Wert. Setzen Sie einenOTEL_*_EXPORTER-Selektor aufotlpselbst nur für ein Signal, das keinforward_to-Ziel aktiviert. - Wenn nicht, setzen Sie auch
CLAUDE_CODE_ENABLE_TELEMETRY=1, dieOTEL_*_EXPORTER-Selektoren undOTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf.
Wenn ein Ziel fehlschlägt
Das Gateway puffert, wiederholt oder speichert Telemetrie nicht, daher verwirft es einen Export, der ein Ziel nicht erreicht, anstatt ihn verspätet zu liefern. Jedes Ziel erfolgreich oder schlägt fehl auf eigene Faust, und der exportierende Client erhält eine Erfolgsmeldung auf jeden Fall, sodass eine fehlgeschlagene Lieferung nur im Protokoll des Gateways angezeigt wird. Nach fünf aufeinanderfolgenden fehlgeschlagenen Lieferungen an ein Ziel pausiert das Gateway die Weiterleitung dorthin in 30-Sekunden-Abständen, protokolliert jede Pause, bis eine Lieferung erfolgreich ist. Jede Fehlerantwort, Timeout oder Verbindungsfehler zählt als fehlgeschlagene Lieferung, außer400, 413, 415, 422 und 431, die bedeuten, dass der Collector diese Export-Nutzlast als fehlerhaft oder zu groß ablehnt.
Eine abgelehnte Nutzlast weder voranschreitet noch setzt den Fehlerzähler zurück: Das Gateway leitet weiterhin an das Ziel weiter und protokolliert eine Warnung, die es und den Status benennt, bei der ersten Ablehnung des Ziels und alle hundert danach.
HTTP-Optimierung
Vier optionale Top-Level-Blöcke,access_control, limits, timeouts und rate_limits, optimieren die HTTP-Oberfläche. Die Standards passen zu den meisten Bereitstellungen.
Wenn Sie beide
access_control-Listen leer lassen, was der Standard ist, bedient das Gateway jede Client-Adresse, sodass nur Ihr Netzwerk einschränkt, wer es erreichen kann. Das ist wichtig, da ein Gateway verwaltete Einstellungen pushen kann, die Befehle auf Entwicklermaschinen ausführen.
Während allow_cidrs leer ist, warnt das Gateway an zwei Stellen, ohne zu ändern, wie es auf eine Anfrage antwortet:
- Beim Start: eine Warnung im Betriebsprotokoll empfiehlt, nur die privaten Bereiche
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/128undfc00::/7zuzulassen, plus alle anderen internen Bereiche, von denen sich Ihre Entwickler verbinden. Wenn Sie das Gateway an eine Loopback-Adresse binden und wedertrusted_proxiesnochpublic_urlsetzen, wie in der lokalen Entwicklung, erscheint die Warnung nicht. - Zur Laufzeit: Das erste Mal, wenn eine Anfrage von einer Adresse außerhalb dieser privaten Bereiche ankommt, protokolliert das Gateway eine Warnung und gibt ein
access.public_client-Audit-Ereignis aus, das die Client-IP trägt. Beide werden einmal pro Prozess ausgelöst. Link-lokale Adressen,169.254.0.0/16undfe80::/10, zählen nicht als öffentlich. Das Gateway antwortet auf/healthzund/readyz, bevor diese Prüfung ausgeführt wird, sodass Health-Probes aus öffentlichen Bereichen sie nicht auslösen.
listen.trusted_proxies aufgelistet ist, sieht das Gateway die Adresse des Relays, die normalerweise privat ist, sodass weder die Laufzeit-Warnung noch eine private Zulassungsliste Datenverkehr, der durch sie weitergeleitet wird, erfasst.
Hinter einem solchen Front-End setzen Sie zuerst listen.trusted_proxies, damit das Gateway echte Client-Adressen sieht, und halten Sie das Gateway und alles davor unabhängig vom öffentlichen Internet unerreichbar.
load_test_mode
Der load_test_mode-Block ermöglicht es Ihnen, ein Gateway zu laden, ohne einen Modell-Anbieter aufzurufen. Während es aktiviert ist, erstellt das Gateway jede Anbieter-Anfrage wie gewohnt, verwirft sie statt sie zu senden, und streamt eine vorgefertigte Antwort durch seinen normalen Antwortpfad zurück. Die Antwort ist Fülltext, der mit einem Satz beginnt, der besagt, dass er vorgefertigt ist.
Erfordert Claude Code v2.1.282 oder später auf dem Gateway-Server. Ein früheres Gateway weigert sich zu starten, wenn es den Schlüssel findet. Aktualisieren Sie jedes Replikat, bevor Sie den Block hinzufügen, und entfernen Sie den Block, bevor Sie zurückrollen.
Das Beispiel unten schaltet den Modus mit den Standardwerten ein, eine Antwort von ungefähr 750 Token Text, die über etwa 10 Sekunden gestreamt werden:
Ein Lasttest in diesem Modus deckt das Gateway, Ihre Postgres und alles vor dem Gateway ab. Es deckt die Grenzen, Geschwindigkeit oder den Netzwerkpfad des Anbieters nicht ab.
Keine Modell-Anfrage wird an den Anbieter gesendet, daher ist die CPU pro Anfrage eines Replikats eine Schätzung und liest niedriger als Produktion, die auch ihren Datenverkehr zum Anbieter verschlüsselt. Bestätigen Sie eine Replikat-Anzahl mit einem kleinen Piloten gegen den echten Anbieter. Vor v2.1.283 liest die Schätzung viel niedriger.
Während der Modus aktiviert ist, kann eine Anfrage einen
x-load-test-user-Header tragen, der eine ganze Zahl von bis zu sieben Ziffern hält. Das Gateway zählt jede Zahl als einen separaten Entwickler mit der E-Mail und den Gruppen des Entwicklers, dessen Token mit der Anfrage kam.
Geben Sie der Load-Test-Bereitstellung ihre eigene leere Datenbank, da das Gateway sich weigert zu starten, wenn der Modus gegen eine Datenbank aktiviert ist, in der ein Entwickler bereits etwas ausgegeben hat.
Vollständiges Beispiel
Diese vollständige Referenzkonfiguration behandelt jeden Kernabschnitt; die HTTP-Abstimmungsblöcke behalten ihre Standardwerte. Kopieren Sie sie, löschen Sie, was Sie nicht brauchen, und füllen Sie Ihre Werte aus. Die Konfiguration im Schnellstart ist eine minimale Version davon.gateway.yaml
Client-seitige verwaltete Einstellungen
Alles oben konfiguriert den Gateway-Server. Sie zeigen Entwicklermaschinen separat auf jedem Gerät auf das Gateway, durch Claude Code’s verwaltete Einstellungen. Das Gateway kann die Anmeldeschlüssel nicht selbst pushen, da sie dem Client sagen, wo sich das Gateway befindet. Für die CLI setzen Sie diese Schlüssel in die Pro-Betriebssystem-Dateimanaged-settings.json. Die beiden Anmeldeschlüssel leiten die /login jedes Entwicklers zu Ihrem Gateway:
parentSettingsBehavior: "merge" behält Claude Desktop’s Bereitstellung der Egress-Allowlist für seine eingebetteten Claude Code-Sitzungen bei; Richtlinie für Claude Desktop-Sitzungen bereitstellen erklärt den Mechanismus und wo sich die Opt-in befinden muss.
Stellen Sie die managed-settings.json-Datei auf jedem Gerät bereit, typischerweise über Ihre MDM-Plattform. Der Dateipfad unterscheidet sich je nach Plattform. Siehe wo jeder Mechanismus die Richtlinie speichert.
Standardmäßig ersetzt eine Registrierungsrichtlinie unter Windows oder ein verwaltetes Preferences-Plist unter macOS die managed-settings.json-Datei, anstatt sie damit zu zusammenzuführen, mit Ausnahme der Ausnahmeschlüssel und quellenübergreifenden Überprüfungen oben. Alle drei Schlüssel in diesem Snippet folgen der Regel mit der höchsten Prioritätsquelle, daher müssen Flotten, die Richtlinien über Gruppenrichtlinien oder Konfigurationsprofile bereitstellen, alle drei stattdessen in diesem Mechanismus platzieren.
Für Claude Desktop setzen Sie den bootstrapUrl-Schlüssel in Claude Desktop’s eigene verwaltete Konfiguration auf <listen.public_url>/user/bootstrap. Der Anmeldungsfluss und die Pro-Gruppen-Richtlinie entsprechen dann der CLI’s, sobald eine Richtlinie sich serverseitig mit einem desktop-Schlüssel anmeldet; ohne die Anmeldung gibt /user/bootstrap 404 zurück. Siehe Claude Desktop-Overlay für die serverseitige Hälfte.
Claude Code ehrt forceLoginGatewayUrl, gatewayInternalNetworks und den "gateway"-Wert von forceLoginMethod nur von einer verwalteten Quelle auf dem Computer: managed-settings.json, das macOS-Plist oder die Windows HKLM-Registrierung, oder ein Richtlinien-Helper. Ein Entwickler, der sie in seiner eigenen ~/.claude/settings.json setzt, hat keine Auswirkung, und das Setzen im Gateway-Payload auch nicht.
Verwandt
- Claude Apps Gateway-Übersicht: Schnellstart und Entwickler-Verbindung
- Bereitstellungsleitfaden: IdP-Setup, Container-Image, Kubernetes und Cloud Run sowie Operationen
- Ausgabenlimits: Pro-Entwickler-Caps und die Admin API