Zum Hauptinhalt springen
Eine Claude Apps Gateway-Bereitstellung wird durch eine YAML-Datei konfiguriert, üblicherweise 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-Beendigung
  • oidc: Ihr Identitätsanbieter (IdP), einschließlich Aussteller, Client, Anspruchszuordnung und wer sich anmelden darf
  • session: die Bearer-Token, die das Gateway ausstellt, mit Geheimnis und Lebensdauer
  • store: PostgreSQL, für Gerätezuschüsse und Rate-Limit-Zähler
  • upstreams: wohin Inferenz geht, ob Anthropic, Amazon Bedrock, Claude Platform auf AWS, Agent Platform von Google Cloud oder Microsoft Foundry
Optionale Abschnitte:
  • login_notice: ein Hinweis, den Entwickler bei der Anmeldung sehen
  • admin: Admin-API-Authentifizierung und Aufbewahrung für Ausgabenlimits
  • enforcement: Ausgabenlimit-Verhalten bei Fehler-offen oder Fehler-geschlossen
  • pricing: vertraglich vereinbarte Sätze und ein Multiplikator für das Ausgabenmessgerät und für die Kostenzahlen, die Entwickler sehen
  • models und auto_include_builtin_models: von Admin kuratierte Modellliste und Pro-Upstream-IDs
  • managed: verwaltete Einstellungsrichtlinien nach IdP-Gruppe
  • telemetry: OTLP-Weiterleitung an Ihren Observability-Stack
  • access_control, limits, timeouts, rate_limits: IP-Zulassung/Ablehnung, Anfragegrößenbeschränkungen, Upstream-Zeit-bis-erstes-Byte und Pro-IP-Anmeldungslimits
  • load_test_mode: Lasttests des Gateways ohne Aufruf eines Modellanbieters

Geheimniserweiterung

Schreiben Sie Geheimnisse wie client_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. Nehmen Sie ein Frontend nur dann in trusted_proxies auf, wenn der letzte X-Forwarded-For-Eintrag, den es weitergibt, von keinem Entwickler geschrieben wurde. Nehmen Sie keine Adresse und keinen Bereich auf, von dem aus Entwickler sich verbinden. Ein Frontend, das die Adresse jeder empfangenen Verbindung anhängt, erfüllt diese Bedingung. Eines, das den Header so weitergibt, wie Entwickler ihn senden, erfüllt sie nicht. X-Forwarded-For-Einträge in der Form ipv4:port oder [ipv6]:port, wie manche Load Balancer sie schreiben, werden ohne den Port gelesen. Eine IPv6-Adresse mit angehängtem Port ohne eckige Klammern wird möglicherweise als andere Adresse oder gar nicht gelesen. Schalten Sie die Port-Option auf jedem Proxy aus, der diese Form schreibt.

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.

Zertifikatbasierte Client-Authentifizierung

Wenn Ihr Identitätsanbieter OAuth-Clients mit einem Zertifikat statt mit einem Client-Secret authentifiziert, wie es Microsoft Entra mit Zertifikat-Anmeldedaten tut, setzen Sie token_endpoint_auth_method: private_key_jwt. Erfordert Claude Code v2.1.284 oder später auf dem Gateway-Server. Mit dieser Konfiguration sendet das Gateway kein Secret. Es authentifiziert sich beim Token-Endpunkt des IdP mit einem kurzlebigen JWT, das mit dem privaten Schlüssel des Zertifikats signiert ist, wenn sich ein Entwickler anmeldet und jedes Mal, wenn das Gateway dessen Sitzung aktualisiert. Das JWT wird mit RS256 signiert und identifiziert das Zertifikat über die Thumbprint-Header x5t und x5t#S256 statt über eine kid. Ihr IdP muss das registrierte Zertifikat anhand des Thumbprints finden können.
1

Schlüssel und Zertifikat erstellen

Erstellen Sie einen unverschlüsselten RSA-Privatschlüssel mit mindestens 2048 Bit im PEM-Format PKCS#8 oder PKCS#1 sowie ein Zertifikat dafür. Das Gateway weigert sich, mit einem Schlüssel zu starten, der diese Bedingungen nicht erfüllt. Dieser openssl-Befehl erstellt einen solchen Schlüssel mit einem selbstsignierten Zertifikat, das ein Jahr gültig ist:
Er schreibt idp-client.key und idp-client.crt in das aktuelle Verzeichnis. Kopieren oder mounten Sie beide Dateien an einen Ort, an dem das Gateway sie lesen kann. Das Beispiel in Schritt 3 verwendet /etc/gateway/.
2

Zertifikat beim IdP hochladen

Laden Sie das Zertifikat, nicht den privaten Schlüssel, in die App-Registrierung des Gateways beim IdP hoch.
3

Schlüssel und Zertifikat zu gateway.yaml hinzufügen

Übergeben Sie dem Gateway den privaten Schlüssel und das Zertifikat in einem client_assertion-Block. Lassen Sie client_secret weg, da sich das Gateway weigert zu starten, wenn es zusammen mit private_key_jwt gesetzt ist. Dieser oidc-Block authentifiziert das Gateway mit einem Zertifikat bei einem Microsoft Entra-Mandanten:
Beide Werte sind die PEM-Inhalte, keine Dateipfade, laden Sie gemountete Dateien also wie im Beispiel mit ${file:/path}. Das Gateway weigert sich zu starten, sofern certificate_pem nicht ein einzelnes PEM-Zertifikat ohne den Rest seiner Kette ist, dessen öffentlicher Schlüssel zu private_key_pem passt.
4

Gateway neu starten und Boot-Log prüfen

Starten Sie das Gateway neu und suchen Sie diese Zeile im Boot-Log:
Vergleichen Sie den SHA-1-Thumbprint mit dem, den der IdP für das hochgeladene Zertifikat anzeigt. Wenn das Zertifikat abgelaufen oder noch nicht gültig ist, startet das Gateway trotzdem, protokolliert aber eine Warnung, dass Anmeldungen und Aktualisierungen fehlschlagen, bis Sie es ersetzen. Um zu bestätigen, dass der IdP das Zertifikat akzeptiert, lassen Sie einen Entwickler sich über das Gateway anmelden.

Client-Zertifikat rotieren

Das Gateway liest Schlüssel und Zertifikat einmal beim Start, eine geänderte Datei wird also erst nach einem Neustart wirksam. Rotieren Sie in dieser Reihenfolge, damit keine Token-Anfrage ein Zertifikat vorlegt, das dem IdP nicht vorliegt:
  1. Laden Sie das neue Zertifikat zusätzlich zum alten beim IdP hoch.
  2. Ersetzen Sie die Schlüssel- und Zertifikatsdateien, die gateway.yaml lädt, und starten Sie dann das Gateway neu. Wenn Sie mehrere Replikate betreiben, funktioniert ein Rolling Restart, da der IdP beide Zertifikate hat, bis Sie das alte entfernen.
  3. Nachdem jedes Replikat neu gestartet wurde, entfernen Sie das alte Zertifikat beim IdP.

IdP-Anfragen durch einen Forward-Proxy

Die Inference-Upstreams beachten HTTPS_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 per CONNECT mit der aufgelösten IP-Adresse zu verbinden, 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 Sie CLAUDE_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, damit nichts in der Konfigurationsdatei die Adressprüfung des Gateways lockern kann.
Das Gateway protokolliert eine network:-Zeile beim Start, während Proxy-only Egress aktiv ist. Jede Zeile unten ist eine Klasse von ausgehenden Anfragen auf einem Gateway mit gesetztem HTTPS_PROXY, 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_PROXY oder HTTP_PROXY ist gesetzt.
  • NO_PROXY und no_proxy sind leer. Wenn Ihre Plattform eines davon in Pods injiziert, setzen Sie beide auf einen leeren Wert auf dem Gateway-Container. Das Auflisten eines Telemetrie-Collectors in NO_PROXY hält Proxy-only Egress aus.
  • CLAUDE_GATEWAY_ALLOW_LOOPBACK ist 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 lehnt das Gateway localhost-ähnliche Namen grundsätzlich ab, während Proxy-only Egress aktiv ist.
Wenn eine dieser Bedingungen nicht erfüllt ist, protokolliert das Gateway beim Start eine Warnung, die die Variable benennt, die es verhindert hat, und behält das Standardverhalten. Sobald Proxy-only Egress aktiv ist, erlauben Sie jedes Ziel im Proxy, einschließlich eines internen Collectors und jedes Hosts, der durch IP-Adresse konfiguriert ist. Sie können einen internen IdP weiterhin mit oidc.use_proxy: false direkt halten.
Aktivieren Sie dies nur, wenn die Allowlist des Proxys mindestens so streng ist wie die eigene Prüfung des Gateways. Der Proxy muss Cloud-Metadaten-Endpunkte wie 169.254.169.254 und metadata.google.internal, Link-Local-Adressen und das eigene Loopback des Proxy-Hosts ablehnen, und er muss sie nach der Adresse ablehnen, zu der ein Name aufgelöst wird, nicht nur nach Name, da das Gateway einen Hostnamen, der zu einem von ihnen aufgelöst wird, nicht mehr abfängt. Ein Proxy, der sich überall hin verbindet, wohin er gebeten wird, entfernt den SSRF-Schutz des Gateways für diese Anfragen.

session

Der session-Block formt die Bearer-Tokens, die das Gateway nach der Anmeldung ausgibt: das Geheimnis, das sie signiert, und wie lange sie gültig sind.

store

Der store-Block verweist das Gateway auf seine PostgreSQL-Datenbank, die Device-Grants und Rate-Limit-Zä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 Inferenz an den ersten Upstream weiter, der das angeforderte Modell auflöst, und überspringt jeden Upstream, dessen groups-Liste den Entwickler nicht einschließt. Bei 5xx, 429, 401, 403, 404 oder Timeout führt das Gateway ein Failover zum nächsten Upstream durch; bei anderen 4xx nicht, da diese Fehler der Anfrage statt dem Upstream zuzuordnen sind. Ein 401 oder 403 bedeutet, dass der Upstream die Anmeldedaten, die das Gateway verwendet hat, abgelehnt oder ihnen den Zugriff verweigert hat, zum Beispiel auf das angeforderte Modell. 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, führt ein 429, das dieser auf eine Anfrage zurückgibt, die die E-Mail des Entwicklers trug, nicht zu einem Failover. Siehe wie eine Limit-Ablehnung pro Benutzer 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 Anmeldedaten intern, daher erfordert das Rotieren von Cloud-Anmeldedaten 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 eigenes 502 zurück, je nachdem, wie die Upstreams antworteten:
  • Ein Upstream gab einen Status zurück, bei dem das Gateway kein Failover durchführt: die Antwort dieses Upstreams. Das Gateway versucht keine weiteren Upstreams.
  • Jeder Upstream, den das Gateway versucht hat, ist auf eine Weise fehlgeschlagen, bei der es ein Failover durchführt: der letzte 429. Wenn keiner einen 429 zurückgegeben hat, bevorzugt das Gateway in dieser Reihenfolge den letzten 401 oder 403, den letzten 404 und den letzten 501. Wenn keiner davon zurückgegeben wurde, das eigene 502 des Gateways, all upstreams failed (N attempted). N zählt Ihre upstreams-Einträge einschließlich übersprungener, abzüglich derer, deren groups-Liste den Entwickler nicht einschließt.
Wenn das Gateway eine Upstream-Antwort zurückgibt, behält es den Statuscode des Upstreams. Ob es die Nachricht des Upstreams behält, hängt vom Anbieter ab. Der Fehler-Body eines Anthropic-API-Upstreams erreicht den Entwickler unverändert. Die Amazon Bedrock, Claude Platform on AWS, Google Cloud’s Agent Platform und Microsoft Foundry-Upstreams können Ihre Konto-IDs, Rollen-ARNs und Projekt-IDs in ihrem Fehlertext benennen. Das Gateway zeichnet diesen vollständigen Text im Betriebs-Log auf. Was der Entwickler von diesen Upstreams sieht, hängt von der Ablehnung ab:
  • 400 oder 413 in Anthropics Standard-Fehler-Envelope: die eigene Nachricht des Upstreams, wie prompt is too long. Claude Platform on AWS, Agent Platform und Microsoft Foundry geben dieses Envelope für Modell-API-Ablehnungen zurück.
  • 400 oder 413 in der eigenen Form des Anbieters: ein capability_rejected:-Token. Wenn das Gateway die Ablehnung nicht klassifizieren kann, upstream rejected the request bei einem 400 oder request too large for this upstream bei einem 413.
  • Jeder andere Status: generischer Text pro Status, wie upstream rate limit exceeded bei einem 429.
Zum Beispiel ersetzt das Gateway Amazon Bedrocks Input is too long for requested model. durch capability_rejected: prompt_too_long. Claude Code komprimiert automatisch bei diesem Token, wie es bei 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:
Die zwei Formen von Anmeldedaten unterscheiden sich im Header, den sie senden:
  • api_key: sendet x-api-key. Rotieren Sie ihn in der Claude Console und aktualisieren Sie die Umgebungsvariable.
  • oauth_token: sendet Authorization: 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 erneutes Mounten des Geheimnisses und Neustart.
Anstelle eines statischen Schlüssels oder Bearers können Sie Workload Identity Federation verwenden. Erstellen Sie eine Federation-Regel, indem Sie dem Workload Identity Federation-Leitfaden folgen, dann mounten Sie das OIDC-JWT Ihrer Workload als Datei, wie ein Kubernetes-projiziertes Service-Account-Token oder ein ID-Token einer CI-Plattform. Das Gateway tauscht das JWT gegen einen kurzlebigen Bearer aus und aktualisiert ihn automatisch. Die Token-Datei wird bei jedem Austausch erneut gelesen, daher werden rotierte projizierte Tokens ohne Neustart übernommen.
Identitäts-Header pro Benutzer für einen Proxy, den Sie betreiben
Sie können die 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:
Das Gateway fügt diese Header zu jeder Anfrage hinzu, die es an diesen Upstream weiterleitet. 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. Ihr Proxy erhält nicht die x-claude-code-*-Header, die Claude Code sendet, wie etwa x-claude-code-session-id. Das Gateway gibt sie an keinen Upstream weiter, gruppieren Sie Anfragen nach Entwickler also mit den Headern aus der obigen Tabelle. 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 ein Failover zum nächsten Upstream durchzuführen, sodass das Budget oder Rate-Limit pro Benutzer Ihres Proxys greift. 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 führt zu einem Failover. Vor v2.1.267 auf dem Gateway-Server führte jedes 429 zu einem Failover. 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, was der Standard ist, weigert sich das Gateway zu starten.
Wenn Sie forward_user_identity auf einem Amazon Bedrock-Upstream setzen, beendet sich das Gateway beim Start mit Unrecognized key(s) in object: 'forward_user_identity'. Wenn Ihr Proxy vor Bedrock sitzt, listen Sie ihn stattdessen als provider: anthropic-Upstream auf. Das Gateway sendet diesem Upstream das Anthropic-Messages-Format, daher muss Ihr Proxy Anfragen für Bedrock übersetzen. Um AWS stattdessen jeden Entwickler namentlich mitzuteilen, siehe AWS-Kostenzuordnung pro Entwickler.

Amazon Bedrock

Für die clientseitige Amazon Bedrock-Bereitstellung, die das Gateway ersetzt oder der es vorgeschaltet ist, siehe Claude Code on Amazon Bedrock. Der gatewayseitige Upstream:
Ein leerer auth-Block verwendet die Standard-Anmeldedatenkette 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 Anmeldedaten 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 unvollständiger auth:-Block die Validierung.
Eine Amazon Bedrock-Guardrail anwenden
Um eine Amazon Bedrock-Guardrail auf jede Inference-Anfrage anzuwenden, die das Gateway über einen Bedrock-Upstream sendet, fügen Sie diesem Upstream einen guardrail-Block hinzu. Erfordert Claude Code v2.1.281 oder später auf dem Gateway-Server.
Gewähren Sie außerdem bedrock:ApplyGuardrail auf die Guardrail dem Principal, der die Anfragen dieses Upstreams signiert: dem AWS-Principal des Gateways oder, mit assume_role, der in role_arn benannten Rolle. Setzen Sie guardrail auf jedem bedrock-Upstream oder auf keinem. Bei einer Mischung weigert sich das Gateway zu starten, da Failover eine Anfrage sonst an einen Bedrock-Upstream ohne Guardrail senden könnte. Die Guardrail gilt nur für Bedrock-Upstreams. Wenn Sie einen anderen Anbieter in upstreams auflisten, sendet das Gateway Anfragen an diesen Anbieter ohne die Guardrail oder weigert sich zu starten, wenn dieser Anbieter mantle ist. Wenn eine /v1/messages-Anfrage, deren Body ein amazon-bedrock-*-Feld wie amazon-bedrock-guardrailConfig enthält, einen Bedrock-Upstream mit gesetztem guardrail erreicht, antwortet das Gateway mit 400, statt sie weiterzuleiten.
Standardmäßig fügt das Gateway Prompts keine Eingabe-Tags hinzu, sodass ein Guardrail-Filter, den Amazon Bedrock nur auf getaggte Eingaben anwendet, bei Datenverkehr über das Gateway nicht ausgeführt wird. Um die Tags hinzuzufügen, setzen Sie input_tagging. Welche Filter von Eingabe-Tags abhängen, erfahren Sie unter Eingabe-Tags in der Amazon-Bedrock-Dokumentation.
Guardrail-Eingabe-Tags hinzufügen
Damit das Gateway die Eingabe-Tags hinzufügt, die der Filter für Prompt-Angriffe eines Amazon-Bedrock-Guardrails benötigt, setzen Sie input_tagging im guardrail-Block und starten Sie das Gateway neu. Setzen Sie denselben Wert auf jedem bedrock-Upstream, sonst startet das Gateway nicht. Erfordert Claude Code v2.1.316 oder höher auf dem Gateway-Server. Ein Gateway mit einer Version ohne diesen Schlüssel beendet sich beim Start mit Unrecognized key(s) in object: 'input_tagging'.
Laut der Dokumentation von Amazon Bedrock wertet jeder Filter im Guardrail nicht getaggte Inhalte nicht mehr aus, sobald eine Anfrage Eingabe-Tags enthält. Testen Sie input_tagging auf einem Test-Gateway, bevor Sie es auf einem Gateway setzen, das Entwickler nutzen.
input_tagging nimmt einen dieser Werte an: Wenn bei last_message die user-Nachrichten seit Claudes letzter Antwort keinen taggbaren Text enthalten, taggt das Gateway stattdessen die Systemnachrichten mitten in der Konversation seit dieser Antwort. Ein Tool-Aufruf zählt als Antwort. Die Empfehlung von Amazon Bedrock für den Filter für Prompt-Angriffe lautet, Benutzereingaben so zu taggen, dass der System-Prompt ausgeschlossen ist. Wenn Sie all_messages_and_system setzen, kann ein Filter, der den eigenen System-Prompt von Claude Code kennzeichnet, Anfragen blockieren. Das folgende Beispiel taggt Text in jeder user-Nachricht:
user-Nachrichten können auch Text enthalten, den Claude Code hinzufügt, etwa System-Erinnerungen; prüfen Sie daher auf dem Test-Gateway, dass gewöhnliche Anfragen nicht blockiert werden. In Tests von Anthropic behielt eine getaggte Sitzung ihre Prompt-Cache-Lesezugriffe von einem Prompt zum nächsten bei, und die Tags fügten keine Eingabe-Token hinzu.
Was Eingabe-Tags nicht abdecken
Kein input_tagging-Wert hält einen Entwickler auf, der absichtlich Text dort platziert, wo kein Tag gesetzt wird. Verlassen Sie sich nicht darauf, dass der Guardrail diese Teile einer Anfrage auswertet:
  • Inhalte, die das Gateway nicht taggt: unter anderem Nachrichten, die Ihr input_tagging-Wert auslässt, Tool-Definitionen, Eingaben von Tool-Aufrufen, Bilder und PDFs. Sofern Sie nicht all_messages_and_system setzen, ist auch der System-Prompt nicht getaggt.
  • Tool-Ergebnisse: Diese enthalten, was Claudes Tools zurückgeben, etwa Dateiinhalte und Webseiten. In Tests von Anthropic hat ein Wortfilter sie nicht ausgewertet, weder mit noch ohne Tags.
Wenn Ihr AWS-Konto oder Ihre Organisation einen Guardrail erzwingt, erfahren Sie in der Dokumentation von Amazon Bedrock, wie dieser Guardrail Eingabe-Tags behandelt.
Protokollieren, welcher Guardrail-Filter ausgelöst hat
Um herauszufinden, welcher Amazon-Bedrock-Guardrail-Filter die Anfrage eines Entwicklers blockiert hat, setzen Sie guardrail_trace: true für den Bedrock-Upstream, starten Sie das Gateway neu und lassen Sie den Entwickler die Anfrage erneut senden. Suchen Sie dann das guardrail.trace-Ereignis der Anfrage im Audit-Log. Erfordert Claude Code v2.1.314 oder höher auf dem Gateway-Server. Ein früheres Gateway startet nicht, wenn es guardrail_trace findet.
Das Gateway schreibt ein guardrail.trace-Ereignis ohne den gefundenen Text, wenn ein Filter ausgelöst hat oder die Aktion der Guardrail INTERVENED ist. Finden Sie die Ereignisse des Entwicklers über email oder sub. Eine gestreamte Anfrage kann mehrere Ereignisse erzeugen, und eines davon kann eine leere filters-Liste haben; lesen Sie daher jedes Ereignis mit derselben request_id: Das Ereignis lässt den Text weg, den ein Filter gefunden hat, einschließlich des match-Felds des Bedrock-Trace. Entwickler erhalten die Trace-Daten von Bedrock nicht, da das Gateway sie aus jeder Antwort entfernt, ob gestreamt oder nicht. Wenn ein Client ein amazon-bedrock-*-Feld im Body einer /v1/messages-Anfrage sendet, antwortet das Gateway bei einem Upstream, der guardrail_trace setzt, mit 400.
Bedrock in einem anderen AWS-Konto
Setzen Sie assume_role auf einem Bedrock-Upstream, und das Gateway verwendet seine eigene AWS-Identität nur, um sts:AssumeRole für eine von Ihnen benannte Rolle aufzurufen, die sich in einem anderen AWS-Konto als das Gateway befinden kann. Jede Bedrock-Anfrage von diesem Upstream wird mit den einstündigen Anmeldedaten signiert, die STS zurückgibt, sodass kein langlebiger Zugriffsschlüssel Kontogrenzen überschreitet. Erfordert ein Gateway, das Claude Code v2.1.281 oder später ausführt. Ein früheres Gateway weigert sich zu starten, wenn es den Schlüssel findet.
Der assume_role-Block akzeptiert drei Schlüssel: Die Vertrauensrichtlinie der Rolle benennt den eigenen Principal des Gateways, etwa seine IRSA- oder ECS-Task-Rolle. Dieser Principal benötigt sts:AssumeRole für die Rolle und keine eigene Bedrock-Berechtigung. Entfernen Sie die Condition, wenn Sie keine external_id setzen.
  • Wenn STS ablehnt oder nicht erreichbar ist, sendet das Gateway die Anfrage nicht mit den eigenen Anmeldedaten des Upstreams. Es protokolliert den STS-Fehler zusammen mit dem, was zu prüfen ist, und versucht dann den nächsten aufgelisteten Upstream. Upstream-Fehlermeldungen beschreibt, was der Client erhält, wenn kein Upstream erfolgreich ist. Ein späterer Upstream ohne assume_role würde die Anfrage mit seinen eigenen Anmeldedaten bedienen, listen Sie einen solchen also nur auf, wenn Sie das wollen.
  • Das Gateway ruft den regionalen STS-Endpunkt sts.<region>.amazonaws.com auf, den sein Netzwerk erreichen muss. Für den FIPS-Endpunkt setzen Sie AWS_USE_FIPS_ENDPOINT=true in der Umgebung des Gateways statt use_fips_endpoint in einer AWS-Konfigurationsdatei.
  • assume_role benötigt SigV4-Quell-Anmeldedaten: Das Gateway startet nicht, wenn es zusammen mit aws_bearer_token gesetzt ist.
  • Ohne eine groups-Liste kann jeder Entwickler, den das Gateway zulässt, diesen Upstream verwenden. Um einzuschränken, welche Modelle ein Entwickler verwenden kann, setzen Sie availableModels in einer managed-Richtlinie.
  • Damit ein über die Rolle bereitgestelltes Modell nicht auch von einem anderen Konto bereitgestellt wird, geben Sie ihm eine benutzerdefinierte ID, deren upstream_model-Zuordnung nur den Namen dieses Upstreams enthält. Bei einer solchen ID überspringt das Gateway jeden anderen Upstream, sodass weder die Anfrage noch die Token-Zählung für eine abgebrochene Anfrage per Failover an ein anderes Konto gehen kann.
  • Eine Anfrage für einen integrierten Modellnamen kann diesen Upstream dennoch erreichen, und das Gateway signiert sie mit derselben Rolle. Führen Sie diesen Upstream zuletzt auf, sofern sein Konto diese Modelle nicht ebenfalls bereitstellen soll.
Dieses Beispiel gibt einem Modell eine benutzerdefinierte ID, die nur der isolierte Upstream bereitstellt:
AWS-Kostenzuordnung pro Entwickler
Standardmäßig signiert das Gateway jede Bedrock-Anfrage mit denselben Anmeldedaten, sodass AWS die Anfragen aller Entwickler unter einem einzigen IAM-Principal sieht. Fügen Sie session_name: email zu assume_role hinzu, und das Gateway ruft sts:AssumeRole einmal pro Entwickler und Stunde auf, wobei der Sitzungsname auf die E-Mail dieses Entwicklers gesetzt ist, und signiert dessen Anfragen mit den zurückgegebenen Anmeldedaten, sodass die Anfragen jedes Entwicklers AWS unter seiner eigenen Assumed-Role-Sitzung erreichen. Die Rolle kann sich im eigenen Konto des Gateways befinden. Erfordert ein Gateway, das Claude Code v2.1.281 oder später ausführt. Kostenzuordnung auf AWS behandelt die IAM-Rolle und wo die AWS-Abrechnung die Sitzungen anzeigt.
session_name wählt aus, welcher verifizierte Anspruch zum AWS-RoleSessionName wird: email oder sub. Das Gateway schreibt jedes Zeichen außer ASCII-Buchstaben, Ziffern und _+,.@- als =XX-Hex pro UTF-8-Byte und kürzt ein Ergebnis, das länger als 64 Zeichen ist, auf ein Präfix plus einen Hash, sodass der Sitzungsname jedes Entwicklers gültig und eindeutig bleibt. Eine Anfrage eines Entwicklers, dessen Token den Anspruch nicht enthält, wird nicht über diesen Upstream gesendet, und das Operator-Log weist darauf hin, zu sub zu wechseln oder oidc.email_claim zu setzen. Ein aktiver Entwickler verursacht einen STS-Aufruf pro Stunde pro Gateway-Replikat, und gleichzeitige erste Anfragen teilen sich einen Aufruf. Das Gateway führt mit dieser Rolle auch einen eigenen Aufruf aus: die Token-Zählung für eine Anfrage, die der Client abgebrochen hat, damit Ausgabenlimits genau bleiben. Diese Zählung und ihre Ein-Token-Fallback-Anfrage werden von der gemeinsamen claude-apps-gateway-Sitzung signiert, daher ordnet AWS den Fallback claude-apps-gateway statt dem Entwickler zu. Für eine strikte Zuordnung pro Entwickler setzen Sie assume_role mit session_name auf jedem aufgelisteten Bedrock-Upstream. Ein Upstream ohne diese Einstellung signiert die Anfragen, die er bedient, mit seinen eigenen Anmeldedaten.

Amazon Bedrock Mantle-Endpunkt

Der mantle-Provider sendet Inference an den Mantle-Endpunkt von Amazon Bedrock. Er erfordert Claude Code v2.1.283 oder später auf dem Gateway-Server. Frühere Gateway-Versionen lehnen ihn beim Start ab, aktualisieren Sie also jedes Replikat, bevor Sie ihn hinzufügen. Das folgende Beispiel stellt Mantle an die erste Stelle, mit einem Amazon Bedrock-Upstream dahinter, der jedes Modell bedient, das das models-Feld auslässt:
Die folgende Tabelle listet die Felder auf, die für einen mantle-Upstream spezifisch sind. Gewähren Sie der AWS-Identität des Upstreams die eigenen IAM-Aktionen von Mantle für Inference und Token-Zählung, die unter Mantle-Endpunkt verwenden aufgeführt sind. Für eine Mantle-Modell-ID, die das Gateway nicht kennt, fügen Sie dem übergeordneten models:-Block einen Eintrag hinzu, dessen upstream_model den Namen dieses Upstreams dieser ID zuordnet. Setzen Sie dann die id dieses Eintrags auch in das models-Feld dieses Upstreams. Die Einstellungen guardrail und assume_role eines bedrock-Upstreams erstrecken sich nicht auf die Anfragen, die Mantle bedient:
  • guardrail: Das Gateway wendet keine Bedrock-Guardrail auf Anfragen an, die es an Mantle sendet, daher weigert es sich zu starten, wenn ein mantle-Upstream aufgelistet ist, während ein bedrock-Upstream guardrail setzt.
  • assume_role: Setzen Sie es für den mantle-Upstream selbst. Ohne diese Einstellung werden von Mantle bediente Anfragen mit den eigenen auth-Anmeldedaten des mantle-Upstreams gesendet.
Was die eigenen Fehlerantworten von Mantle bedeuten, erfahren Sie unter Mantle-Endpunkt-Fehler.

Claude Platform on AWS

Claude Platform on AWS stellt die First-Party-Anthropic-API auf AWS-Infrastruktur unter aws-external-anthropic.<region>.api.aws bereit. Sie verwendet First-Party-Modell-IDs, beachtet anthropic-beta-Header wie gesendet und stellt count_tokens bereit, daher entfällt jegliche Bedrock-spezifische Ü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 clientseitige Bereitstellung derselben Plattform siehe Claude Code on Claude Platform on AWS. Der gatewayseitige Upstream:
Die Plattform läuft in einem von Amazon Bedrock getrennten AWS-Konto und signiert SigV4-Anfragen für ihren eigenen Service-Namen, aws-external-anthropic, daher autorisiert eine auf Bedrock beschränkte IAM-Rolle sie nicht. Ein API-Schlüssel in auth.api_key hat Vorrang, wenn auch SigV4-Anmeldedaten gesetzt sind. Ein leerer auth-Block verwendet die Standard-Anmeldedatenkette 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 ohne models:-Block an sie weiter. Wenn Sie eine models:-Liste kuratieren, verwenden Sie für den Eintrag den Schlüssel anthropicAws: mit der First-Party-ID.

Google Cloud Agent Platform

Für das äquivalente clientseitige Setup siehe Claude Code on Google Cloud. Der gatewayseitige Upstream:
Ein leerer 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 hängen Sie einen 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, sodass Sie die Modellverfügbarkeit pro Region nicht verfolgen müssen. Das Setzen einer bestimmten Region bindet jede Anfrage an diese.

Microsoft Foundry

Für die clientseitige Microsoft Foundry-Bereitstellung siehe Claude Code on Microsoft Foundry. Der gatewayseitige Upstream:
use_azure_ad: true löst über DefaultAzureCredential auf: Managed Identity auf AKS, ACI oder App Service; die Azure CLI; oder Anmeldedaten aus der Umgebung. API-Schlüssel funktionieren, gelten aber projektweit und rotieren nicht automatisch. Der Endpunkt von Microsoft Foundry wird von resource: abgeleitet; setzen Sie das optionale base_url, um ihn 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 Sie headers: auf diesem Upstream. Verwenden Sie es, wenn ein Proxy, den Sie vor dem Anbieter betreiben, Traffic anhand eines Headers weiterleitet 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 auf eine frühere 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 ebenfalls, sofern Ihr Proxy sie nicht entfernt. Dieses Beispiel erreicht einen provider: vertex-Upstream über einen Proxy unter upstream-proxy.internal.example.com. Es setzt den x-source-Header, den der Proxy liest, und sendet ein Token aus der Umgebungsvariable PROXY_TOKEN als x-proxy-token:
Werte sind druckbarer ASCII-Text ohne Leerzeichen an einem der beiden Enden. Setzen Sie eine Zahl, true oder false in Anführungszeichen, damit YAML sie als Text liest. Um ein Geheimnis aus der Konfigurationsdatei herauszuhalten, 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, verhindert den Start des Gateways. headers: funktioniert bei jedem Anbieter, und jeder Upstream sendet nur seine eigenen. Nicht jede Anfrage, die das Gateway an einen Upstream sendet, enthält sie: Bei 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 Startfehler benennt den Header. Reservierte Namen umfassen:
  • authorization und x-api-key
  • host, content-type und user-agent
  • Jeden Namen, der mit anthropic-, x-goog-, x-amz- oder x-amzn- beginnt

Mehrere Upstreams

Derselbe Anbieter kann mehr als einmal mit einem unterschiedlichen name: erscheinen. Dies deckt verschiedene Regionen, verschiedene Konten über verschiedene Anmeldedatenketten, Provisioned Throughput versus On-Demand und anbieterübergreifenden Fallback ab. Das Gateway versucht Upstreams der Reihe nach. Bei 5xx, 429, 401, 403, 404, Timeouts und fehlendem Endpunkt (501) erfolgt ein Failover; bei anderen 4xx nicht. 429 ist Kapazität pro Upstream, daher führt die Erschöpfung von Provisioned Throughput (PT) zu einem Failover auf On-Demand. Wenn Sie forward_user_identity: true auf einem Upstream setzen, ist ein 429 auf eine Anfrage, die die E-Mail des Entwicklers trug, stattdessen eine Ablehnung pro Benutzer und führt nicht zu einem Failover. Eine Anfrage geht nur in diesen Fällen über einen Upstream hinaus:
  • Der Upstream ist fehlgeschlagen
  • Der Upstream stellt das angeforderte Modell nicht bereit
  • Der Upstream hat eine groups-Liste, in der der Entwickler nicht enthalten ist
Das Gateway führt keine Aufzeichnung über fehlgeschlagene Upstreams, daher versucht, während ein Upstream ausgefallen ist, jede Anfrage, die ihn erreicht, ihn weiterhin und wartet auf sein Fehlschlagen, bevor sie weitergeht. Das Gateway wartet so lange darauf, dass eine Antwort beginnt:
  • provider: anthropic-Upstreams: timeouts.upstream_ttfb_ms, standardmäßig 120 Sekunden
  • Andere Anbieter: bis zu einer Stunde. Um diese Wartezeit für Streaming-Anfragen zu verkürzen, setzen Sie timeouts.upstream_ttfb_ms auf Gateway v2.1.295 oder später. Modellanfragen ohne Streaming warten in jedem Fall bis zu einer Stunde
404 ist Modellverfügbarkeit pro Upstream, daher blockiert ein Upstream, der ein Modell nicht aktiviert hat, keinen späteren Upstream, der es bereitstellt. Ein Upstream, der das angeforderte Modell nicht auflösen kann, wird ohne Netzwerk-Roundtrip übersprungen. Dieses Beispiel leitet zuerst an ein Amazon Bedrock-Provisioned-Throughput-Kontingent weiter, weicht bei Überlauf auf On-Demand und ein zweites Konto aus und fällt zuletzt auf die Anthropic API zurück:
Ein Failover zwischen Cloud-Anbietern oder zur direkten Anthropic API ändert, welche Vereinbarung, Geografie und anderen Bedingungen für die Anfrage gelten. Die CLI wendet dasselbe Feature-Gating auf Gateways an, unabhängig davon, welcher Upstream eine bestimmte Anfrage bedient, daher sendet ein Failover standardmäßig kein Body-Feld, das ein Upstream ablehnen würde. Wenn Sie die einstündige Cache-TTL in einer Richtlinie setzen, geht sie an jeden Upstream in der Liste, setzen Sie sie also nur, wenn alle sie akzeptieren.

Jedes Team an seinen eigenen Upstream senden

Um die Anfragen jedes Teams an ein eigenes AWS-Konto oder Google Cloud-Projekt zu senden, führen Sie einen Upstream pro Team auf und geben Sie jedem eine groups-Liste. Nur Entwickler in einer aufgeführten IdP-Gruppe erreichen diesen Upstream, sowohl beim ersten Versuch als auch beim Failover. Jeder Anbieter unterstützt groups. Erfordert Claude Code v2.1.314 oder höher auf dem Gateway-Server. Dieses Beispiel gibt den Gruppen payments-eng und search-eng jeweils ein eigenes AWS-Konto und fügt einen Upstream ohne groups-Liste hinzu, den jeder Entwickler verwenden kann:
Mit der Beispielkonfiguration beginnen die Anfragen jedes Entwicklers beim ersten Upstream in seiner Zeile und gehen beim Failover zum nächsten über: Wenn der Upstream eines Teams das angeforderte Modell mit einem 403 verweigert, probiert das Gateway den nächsten Upstream in der Zeile dieses Teams, der das Modell bereitstellt. Um das Team auf einem Upstream zu halten, geben Sie jedem Upstream eine groups-Liste und stellen Sie sicher, dass kein anderer Upstream eine Gruppe aufführt, in der die Entwickler des Teams Mitglied sind. Dieses Team hat dann kein Failover, und Anfragen von Entwicklern, die in keiner aufgeführten Gruppe sind, schlagen mit einem 400 fehl. Damit jeder Entwickler den vorgesehenen Upstream erreicht, schreiben Sie Einträge, die exakt übereinstimmen, und setzen Sie offene Upstreams an das Ende:
  • Einträge: Schreiben Sie jede Gruppe genau so, wie Ihr IdP sie im Groups-Claim sendet, den auch match.groups liest. Das Gateway startet nicht, wenn es eine leere Liste oder einen leeren Eintrag findet. Es prüft einen Eintrag nicht gegen Ihren IdP, sodass ein Eintrag, der auf niemanden zutrifft, keine Warnung auslöst.
  • Reihenfolge: Setzen Sie einen Upstream ohne groups-Liste an das Ende. Er bedient alle; steht er weiter vorn, übernimmt er die Anfragen eines Teams vor dessen eigenem Upstream.
Ein Gateway vor v2.1.314 startet nicht, wenn es groups findet. Aktualisieren Sie daher jedes Replikat, bevor Sie es hinzufügen.Bevor Sie ein Rollback durchführen, entfernen Sie jeden Upstream mit einer groups-Liste sowie jeden upstream_model-Schlüssel und jede Preisüberschreibung, die ihn benennt, und behalten Sie mindestens einen Upstream bei. Wird nur der Schlüssel groups entfernt, ist dieser Upstream für jeden Entwickler offen. Ein Schlüssel oder eine Überschreibung, die noch einen entfernten Upstream benennt, verhindert den Start des Gateways mit references unknown upstream.
Was passiert, wenn ein Entwickler in keiner aufgeführten Gruppe ist
Wenn jeder Upstream eine groups-Liste hat, sieht ein Entwickler, der in keiner dieser Gruppen ist, diesen Fehler, und das Gateway kontaktiert keinen Anbieter:
Fügen Sie den Entwickler in Ihrem IdP zu einer aufgeführten Gruppe hinzu, oder fügen Sie einen Upstream ohne groups-Liste hinzu. Das Gateway liest die Gruppen eines Entwicklers bei jeder Token-Aktualisierung erneut. Wenn Ihr IdP bei einer Aktualisierung keine Gruppen mitsendet, hat der Entwickler danach keine:
  • oidc.allowed_groups ist gesetzt: Das Gateway lehnt die Aktualisierung ab, und die Sitzung endet
  • Andernfalls, wenn ein Upstream keine groups-Liste hat: Die Anfragen des Entwicklers gehen an diesen Upstream
  • Andernfalls, wenn jeder Upstream eine groups-Liste hat: Die Anfragen des Entwicklers schlagen mit diesem Fehler fehl
Wenn der Userinfo-Endpunkt Ihres IdP den Groups-Claim zurückgibt und oidc.google_groups nicht gesetzt ist, setzen Sie oidc.userinfo_fallback auf true, um die Gruppen von dort zu ergänzen.

Optionale Abschnitte

login_notice

Um Entwicklern bei der Anmeldung einen Hinweis anzuzeigen, setzen Sie den Schlüssel login_notice auf oberster Ebene auf den Hinweistext mit bis zu 500 Zeichen. Dieses Beispiel gibt an, für wen das Gateway bestimmt ist und wo man Zugriff anfragen kann:
Entwickler sehen den Text unter Notice from <gateway hostname> auf der Verifizierungsseite des Gateways im Browser und auf dem interaktiven Anmeldebildschirm im Terminal. Zeilenumbrüche im Text werden zu Leerzeichen. Der Hinweis erscheint vor der Anmeldung, sodass ihn jeder lesen kann, der das Gateway erreicht. Erfordert Claude Code v2.1.319 oder höher auf dem Gateway-Server und für den Terminal-Bildschirm auch auf dem Rechner des Entwicklers. Ein älteres Gateway verweigert den Start, 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 ein Rollback durchführen.

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.

Reihenfolge gemeinsamer Budgets

Ein gemeinsames Budget ist ein monatliches Limit, auf das eine ganze Gruppe ihre Ausgaben anrechnet. Um eines festzulegen, fügen Sie pooled_budget zur Anfrage hinzu, die die monatliche Obergrenze der Gruppe festlegt, etwa "pooled_budget": {"amount": "500000"} für 5.000 $. Die Anfrage enthält außerdem den scope der Gruppe, "period": "monthly" und amount, das weiterhin die eigene Obergrenze jedes Mitglieds bleibt. Für einen Entwickler in mehreren solchen Gruppen wird jede Anfrage auf das erste Budget angerechnet, dessen Ausgaben unter seinem Limit liegen, und abgelehnt, wenn jedes Budget aufgebraucht ist. pooled_conflict_rule legt die Reihenfolge fest, in der das Gateway die Budgets ausprobiert:
  • default_order: das größte Limit zuerst, bei gleichen Limits in aufsteigender Reihenfolge der Gruppennamen
  • priority_list: die Budgets der Gruppen in pooled_priority_order in Listenreihenfolge, danach die Budgets der übrigen Gruppen nach Gruppenname
Wenn Sie Gruppen ohne pooled_conflict_rule: priority_list auflisten, ignoriert das Gateway die Liste und protokolliert beim Start eine Warnung. Ein Gateway-Server vor v2.1.319 verweigert den Start, wenn er pooled_conflict_rule oder pooled_priority_order findet. Aktualisieren Sie jedes Replikat, bevor Sie einen der beiden Schlüssel hinzufügen, und entfernen Sie beide Schlüssel, bevor Sie ein Rollback durchführen.

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 ein managed:-Block mit mindestens einer Richtlinie. Das Gateway weigert sich zu starten, wenn pricing gesetzt 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, ein upstreams[].name, für model bedient. Das schließt den höheren Fast-Modus-Satz ein, sodass Fast- und Standardanfragen mit denselben vier Sätzen gezählt werden.
  • Eine integrierte ID wie claude-sonnet-4-6, abgeglichen wie models[].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 model die 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.
Für regionale Sätze geben Sie jeder Region ihren eigenen benannten Upstream und eine Zeile pro Upstream.

Preise erhöhen

Mit v2.1.271 oder später auf dem Gateway-Server können Sie multiplier ü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:
Mit einem 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 höher auf dem Gateway-Server fügt das Gateway die Preise aus pricing außerdem in die managed-Richtlinien ein, die es ausliefert, und zwar als verwaltete Einstellung modelPricing. Entwickler, auf die eine Richtlinie zutrifft, sehen die pricing-Preise dann in /usage, in der Statuszeile und in OpenTelemetry. Ein Entwickler, auf den keine Richtlinie zutrifft, erhält keine verwalteten Einstellungen, sodass seine Zahlen beim Listenpreis bleiben. Clients wenden die Einstellung ab Claude Code v2.1.242 an.
  • Was das Gateway hinzufügt: Sofern der cli-Block einer Richtlinie nicht bereits modelPricing setzt, fügt das Gateway den multiplier und 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.
  • Upstreams mit einer groups-Liste: Ist ein solcher Upstream der erste, der eine Modell-ID bedient, fügt das Gateway für diese ID keine Zeile hinzu. Entwickler sehen dann den eigenen Preis von Claude Code für diese ID, also den Standardpreis des Modells, wenn Claude Code die ID erkennt, multipliziert mit dem multiplier.
  • Eine Richtlinie ausschließen: Setzen Sie modelPricing auf {} im cli-Block dieser Richtlinie, und ihre Entwickler bleiben beim Listenpreis.
  • Sätze einer Richtlinie behalten: Eine Richtlinie, deren cli-Block modelPricing mit ihrem eigenen multiplier oder overrides setzt, behält dieses modelPricing ganz, 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.
Jeder Schlüssel unter 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. Damit Entwickler den Alias fable mit auto_include_builtin_models: false verwenden können, fügen Sie models einen Eintrag claude-fable-5 hinzu. Das ist die ID, zu der der Alias fable für am Gateway angemeldete Entwickler aufgelöst wird. Ohne diesen Eintrag schlagen ihre Nachrichten mit einem Fehler fehl, der mit API Error: 400 model claude-fable-5 is not in the operator's model allowlist beginnt.

managed

Der Block managed definiert rollenbasierte Zugriffsrichtlinien, die an IdP-Gruppen oder E-Mail-Domains geknüpft sind. Richtlinien werden der Reihe nach ausgewertet; standardmäßig wird die erste Übereinstimmung ausgewählt und dann mit der Basis des Catch-all match: {} zusammengeführt. Ein Benutzer, auf den zwei Rollenrichtlinien zutreffen, erhält nur die erste, sodass die deny-Regeln der zweiten Richtlinie nicht gelten, es sei denn, Sie wenden jede zutreffende Richtlinie an. Richtlinien werden pro Benutzer unter GET /managed/settings mit ETag/304-Caching ausgeliefert.
Eine 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: availableModels und permissions.allow. Die Liste einer bestimmten Richtlinie ersetzt die Basis vollständig.
  • Denylists und Hook-Arrays: Diese bilden die Vereinigung aus Basis und Richtlinie:
    • permissions.deny und permissions.ask
    • disabledMcpjsonServers und deniedMcpServers
    • blockedMarketplaces und deniedModels
    • Die Event-Typ-Arrays von hooks
  • Datensatz-typisierte Schlüssel: env, modelOverrides und skillOverrides. 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. Eine leere Liste lehnt jedes Modell ab. Die Prüfung umfasst auch das Modell, mit dem eine Sitzung startet, bevor der Entwickler eines auswählt, daher starten Sie Sitzungen mit einem Modell, das die Richtlinie zulässt. Das Gateway validiert den model-Wert selbst, bevor es eine Anfrage weiterleitet, 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 required ab. 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 string ab. 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. Legen Sie organisationsweite deny-Regeln in die Richtlinie match: {}, da die Regeln einer Gruppenrichtlinie nur gelten, solange das Token des Benutzers diese Gruppe enthält.
Das Gateway führt kein eigenes Benutzerverzeichnis. Es autorisiert jede Anfrage anhand des IdP-Tokens 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, in das SCIM synchronisieren könnte.Führen Sie das Lebenszyklus-Management von Benutzern und Gruppen 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 über das 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 Claude-Code-Clients bei ihrer nächsten Abfrage der verwalteten Einstellungen, 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 bei der nächsten Sitzungs-Neuausgabe in Kraft, also bei der nächsten stillen Aktualisierung, begrenzt durch session.ttl_hours.
Claude Desktop folgt seinem eigenen Zeitplan.

Jede zutreffende Richtlinie anwenden

Ein Benutzer, auf den mehrere Rollenrichtlinien zutreffen, erhält nur die erste, es sei denn, Sie setzen policy_mode: layered neben policies. Mit layered gilt jede Richtlinie, die auf den Benutzer zutrifft, bis hinunter zur ersten Richtlinie match: {}. policy_mode erfordert Claude Code v2.1.316 oder höher auf dem Gateway-Server. Ein Gateway mit einer Version, der dieser Schlüssel fehlt, verweigert den Start, wenn es ihn findet. Aktualisieren Sie jedes Replikat, bevor Sie den Schlüssel hinzufügen, und entfernen Sie den Schlüssel, bevor Sie auf eine frühere Version zurückgehen. In diesem Beispiel verliert eine Gruppe WebFetch und eine andere erhält Opus:
Die Tabelle zeigt, was ein Benutzer in no-web und opus-users unter dem Standard first_match und unter layered erhält. Das Gateway führt jede zutreffende Richtlinie mit den darunter aufgeführten zusammen, nach denselben Regeln zum Zusammenführen wie bei der Basisebene:
  • Allowlists, Einzelwerte und Blöcke wie sandbox: Jeder Wert stammt vollständig aus der zuerst aufgeführten zutreffenden Richtlinie, die ihn setzt, sodass sich die availableModels-Listen zweier Gruppen nicht addieren.
  • Denylists und Hook-Arrays: Diese addieren sich über jede zutreffende Richtlinie, sodass ein Benutzer in zwei Gruppen die deny-Regeln beider Gruppen erhält.
  • env, modelOverrides und skillOverrides: Einträge werden nach Namen zusammengeführt, und die zuerst aufgeführte zutreffende Richtlinie, die einen Namen setzt, liefert dessen Wert.
  • desktop-Schlüssel: Diese werden nach den Regeln für den Basisblock desktop zusammengeführt.
Richtlinien können sich zu lockereren Regeln addieren, als jede einzelne für sich ergibt. Beispiel: Die Richtlinie match: {} setzt sandbox.enabled: true, die Richtlinie einer Gruppe setzt permissions.allow: ["Bash"] und die einer anderen Gruppe sandbox.enabled: false. Ein Benutzer in beiden Gruppen erhält Bash erlaubt bei ausgeschalteter Sandbox. Führen Sie in diesem Fall die Richtlinie, die Bash erlaubt, zuerst auf und kopieren Sie den gesamten sandbox-Block der Richtlinie match: {} hinein.
Mit layered verweigert das Gateway bei einigen Einstellungen den Start, darunter diese:
  • Ein !-Muster: eine !-Negation in einer Read- oder Edit-Regel in der Liste permissions.deny oder permissions.ask einer beliebigen Richtlinie, die der Richtlinie match: {} eingeschlossen
  • Eine Einschränkung von Hooks außerhalb des Catch-all: disableAllHooks, allowedHttpHookUrls oder httpHookAllowedEnvVars in einer anderen Richtlinie als match: {}

Sitzungen mit einem Modell starten, das die Richtlinie zulässt

Wenn availableModels das Standardmodell von Claude Code nicht enthält, erhalten Sitzungen 400-Antworten, bis der Entwickler ein aufgelistetes Modell auswählt, zum Beispiel mit /model. In Gateway-Sitzungen ist der Standard das Opus-Modell, zu dem der Alias opus aufgelöst wird, und availableModels allein ändert daran nichts. Um dies zu beheben, setzen Sie enforceAvailableModels: true im selben cli-Block und prüfen Sie dann, welche Art von Eintrag die Liste enthält:
  • Ein Alias wie sonnet oder eine integrierte ID wie claude-sonnet-4-6: Sitzungen starten mit einem dieser Modelle, und die Option Default in /model wird zu ihm aufgelöst
  • Kein Alias und keine integrierte ID in der Liste: Sitzungen können weiterhin mit dem integrierten Standard starten, setzen Sie daher zusätzlich model im cli-Block dieser Richtlinie auf eine der aufgelisteten IDs
Diese Richtlinie listet eine benutzerdefinierte ID auf, die models definiert, und startet Sitzungen mit dieser ID:

Matcher-Werte, die das Gateway beim Start stoppen

Beim Start prüft das Gateway den match-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 groups oder in admin_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.
Vor v2.1.232 startete das Gateway mit diesen Werten. Jeder Wert hatte diese Auswirkung:
  • Eine leere email_domain: Das Gateway übersprang die Domänenprüfung, sodass eine Richtlinie mit einer leeren email_domain und keiner groups-Liste jeden authentifizierten Benutzer abglich
  • Eine leere groups-Liste: Die Richtlinie glich niemanden ab
  • Eine email_domain, die @, Leerzeichen oder ein Komma enthält: Die Richtlinie glich niemanden ab
  • Ein leerer Eintrag in groups oder in admin_groups: Der Eintrag glich einen Benutzer nur ab, wenn der groups-Anspruch des IdP dieses Benutzers auch einen leeren Eintrag enthielt. In admin_groups gewährte diese Übereinstimmung Admin-Zugriff. Wenn Ihre admin_groups-Liste niemals einen leeren Eintrag enthielt, erhielt niemand auf diese Weise Admin-Zugriff.

cli oder code wählen

Wenn eine Richtlinie den Schlüssel code verwendet, verhindert jeder der folgenden Punkte den Start des Gateways:
  • Gateway-Version: code erfordert Claude Code v2.1.296 oder höher auf dem Gateway-Server. Ein früheres Gateway startet nicht, wenn es den Schlüssel findet. Aktualisieren Sie jede Replik, bevor Sie den Schlüssel hinzufügen, und ändern Sie code wieder in cli, bevor Sie auf eine frühere Version zurückgehen.
  • Gemischte Schlüssel: Eine Datei, die sowohl code als auch cli oder dessen frühere Schreibweise settings enthält, stoppt das Gateway beim Start. Stellen Sie alle Blöcke unter einen Schlüssel, in einer einzigen Bearbeitung.
Die Claude-Code-Einstellungen einer Richtlinie, etwa eine Regel, die das Lesen von .env-Dateien verweigert, gehören in einen Block unter dem Schlüssel cli oder code. code ist der empfohlene Schlüssel, cli der Legacy-Schlüssel. Beide Schlüssel nehmen denselben Inhalt auf. Der Schlüssel bestimmt, wo die Einstellungen durchgesetzt werden:
  • cli: das Terminal, die Erweiterungen für VS Code und JetBrains sowie das Agent SDK. Unter cli erhält der Code-Tab von Claude Desktop die abgeleiteten Einstellungen, sodass eine eingeschränkte Regel wie Read(./.env) einen Benutzer dort nicht aufhält.
  • code: dieselben Orte, und auch der Code-Tab von Claude Desktop kann abgedeckt werden.
Eine Datei, die cli verwendet, funktioniert wie bisher, und ein Gateway, das cli in einer Richtlinie mit einem desktop-Schlüssel findet, warnt beim Start und startet trotzdem. Wechseln Sie zu code, damit die Einstellungen auch den Code-Tab abdecken können. Lesen Sie vor dem Wechsel code-Einstellungen im Code-Tab anwenden. Die Richtlinie benötigt einen desktop-Schlüssel, und die Rechner der Benutzer müssen eingerichtet werden, bevor die Einstellungen dort gelten; außerdem wird die Websuche in Claude Desktop deaktiviert. Diese Richtlinie stellt die deny-Regel unter code, mit einem leeren desktop-Schlüssel:
Wenn Sie wechseln, löschen Sie jede serve_to_desktop-Zeile in derselben Bearbeitung, in der Sie die Blöcke umbenennen. Wo eine Anweisung den cli-Block nennt, verwenden Sie Ihren code-Block. serve_to_desktop: true ist eine Legacy-Methode, um die cli-Einstellungen einer Richtlinie dem Code-Tab anzubieten. Sie hat keine Wirkung, wenn sich Claude Desktop über bootstrapUrl verbindet. Solange Ihre Richtlinien cli verwenden, bedeutet eine Startwarnung, die diesen Schlüssel nennt, dass diese Einstellungen den Code-Tab nicht erreichen:
  • Um den Code-Tab abzudecken: Wechseln Sie zu code, sobald die Rechner der Benutzer die Bedingungen in code-Einstellungen im Code-Tab anwenden erfüllen
  • Um bei cli zu bleiben: Setzen Sie serve_to_desktop: false neben cli in einer Richtlinie, um die Warnung zu unterdrücken

Was in cli geht

Jeder code- oder cli-Wert ist ein vollständiges Claude-Code-Dokument managed-settings.json, mit demselben Schema, das Sie per MDM oder über /etc/claude-code/managed-settings.json bereitstellen würden, hier als YAML ausgedrückt. Die CLI wendet das gelieferte Dokument auf der verwalteten Ebene an, oberhalb der Benutzer- und Projekteinstellungen, anstelle der serververwalteten Einstellungen. Sie ignoriert daher die Einstellungen, die auf Richtlinienquellen auf Betriebssystemebene beschränkt sind, etwa 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 betroffenen 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, zu denen Operatoren zuerst greifen:
Da diese Einstellungen über das Netzwerk ankommen, zeigt die CLI jedem Entwickler einen Sicherheitsgenehmigungsdialog, bevor die unten aufgelisteten Einstellungen angewendet werden:
  • hooks
  • env-Variablen, die die Genehmigung des Entwicklers erfordern, wie Proxy- und Basis-URL-Variablen
  • Shell-Ausführungseinstellungen wie apiKeyHelper und statusLine
  • die Sandbox-Binäreinstellungen sandbox.bwrapPath, sandbox.socatPath und sandbox.ripgrep
  • Sandbox-Einstellungen, die Datenverkehr abfangen, Anmeldedaten injizieren oder die Isolation schwächen, wie sandbox.network.tlsTerminate und die Proxy-Port-Einstellungen. Sicherheitsgenehmigungsdialoge listet sie alle auf.
Genehmigungsspeicher behandelt, wie lange eine Genehmigung dauert und wann der Dialog erneut angezeigt wird. Claude Code wendet einige gelieferte env-Variablen an, ohne dem Entwickler den Genehmigungsdialog anzuzeigen, etwa Einstellungen zur Modellauswahl und numerische Limits. Andere gelieferte Variablen können die Genehmigung des Entwicklers erfordern; ein nicht leerer Proxy-, Basis-URL- oder OTEL_EXPORTER_OTLP_ENDPOINT-Wert erfordert sie immer. Wenn eine gelieferte Variable eine Genehmigung erfordert, nennt der Dialog sie. Umgebungsvariablen und der Genehmigungsdialog enthält die Details, einschließlich vier Datenschutzschaltern, bei denen der gelieferte Wert entscheidet, ob sie eine Genehmigung erfordern. Die Telemetrie-Konfiguration des Gateways pusht 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 feindseligen Gateway, nicht die Organisation vor dem Entwickler. Ein nicht interaktiver Lauf, etwa claude -p, eine Agent-SDK-Sitzung oder eine Sitzung im Code-Tab von Claude Desktop, kann den Dialog nicht anzeigen. Er wendet die übertragenen Einstellungen nur für diesen Lauf an und speichert sie nicht als genehmigt, sodass die nächste interaktive Sitzung des Entwicklers den Dialog weiterhin anzeigt. 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, sieht daher jeder abgleichende Entwickler den Dialog in seinen interaktiven Sitzungen. Eine laufende interaktive Sitzung zeigt ihn bei der nächsten stündlichen Abfrage an, andernfalls erscheint er beim nächsten interaktiven Start des Entwicklers. Der Schlüssel cli hieß in früheren Versionen settings, und das Gateway akzeptiert diese Schreibweise weiterhin als Alias. Verwenden Sie für neue Bereitstellungen code.

Eine Richtlinie vor der Bereitstellung testen

Um eine Richtlinienänderung zu testen, starten Sie das Gateway mit einer Wegwerf-Postgres-Datenbank. Das Gateway verbindet sich mit Postgres und wendet seine Schemamigrationen an, bevor es den Inhalt der Blöcke cli, code und desktop prüft. Wenn es die Datenbank nicht erreichen kann, bricht der Start bei could not connect to Postgres ab und meldet nichts über deren Inhalt.

Kontextfenster in Terminal-Sitzungen

Terminal-Sitzungen, die über /login angemeldet sind, verwenden das 1M-Kontextfenster für Opus 4.7 und später, Sonnet 5 und später sowie die Fable-Modelle. Die Modell-ID benötigt kein [1m]-Suffix, und Sitzungen komprimieren bei etwa 967K Token. Vor Claude Code v2.1.287 auf der Maschine des Entwicklers behandelte Claude Code die Opus- und Fable-Modelle so, als hätten sie ein 200K-Fenster, sofern die Modell-ID nicht auf [1m] endete. Damit Terminal-Sitzungen stattdessen an der 200K-Grenze komprimieren, setzen Sie das Fenster für die automatische Komprimierung im env der Richtlinie:
Claude Code wendet diese Variable an, ohne dem Entwickler den Genehmigungsdialog zu zeigen. Die Variable gilt für jedes Modell, einschließlich Modell-IDs, die auf [1m] enden. Um den 1M-Kontext stattdessen auszuschalten, setzen Sie CLAUDE_CODE_DISABLE_1M_CONTEXT: "1" im selben env-Block. Claude Code behandelt dann jedes Modell so, als hätte es ein 200K-Fenster. In interaktiven Sitzungen genehmigt jeder Entwickler diese Variable im Genehmigungsdialog, bevor sie wirksam wird.

Einstündiger Prompt-Cache

Um die einstündige Prompt-Cache-TTL statt der standardmäßigen fünf Minuten anzufordern, fügen Sie diese Schlüssel zum vorhandenen code-, cli- oder settings-Block einer Richtlinie hinzu und starten das Gateway neu. Die Schlüssel erfordern Claude Code v2.1.242 oder höher auf dem Gateway-Server und auf den Clients. promptCacheTtl deckt die Hauptkonversation ab. subagentPromptCacheTtl ist optional und deckt Subagenten, Workflows und Hintergrundanfragen ab. Dieses Beispiel fügt beide zu einer match: {}-Richtlinie mit dem Schlüssel cli hinzu:
Setzen Sie die Schlüssel nur, wenn Ihre Upstreams die einstündige TTL für jedes Modell anbieten, das das Gateway ausliefert. Lehnt ein Upstream die TTL ab, schlägt die Anfrage fehl, und weder das Gateway noch Claude Code wiederholt sie mit der fünfminütigen TTL. Prüfen Sie für Amazon Bedrock die unterstützten Modelle, Regionen und Limits.
Um promptCacheTtl zu bestätigen, melden Sie sich als Benutzer, auf den die Richtlinie zutrifft, beim Gateway an und prüfen Sie, welche TTL Ihre Cache-Schreibvorgänge verwendet haben. Übergeben Sie --model, um die Prüfung für jedes Modell zu wiederholen, das das Gateway ausliefert. Einstündige Cache-Schreibvorgänge kosten mehr als fünfminütige. Damit Ausgabenlimits diesen höheren Preis berücksichtigen, benötigen Sie v2.1.286 oder höher auf dem Gateway-Server.

MCP-Server in einer Richtlinie

Um MCP-Server für die Claude-Code-Clients bereitzustellen, die eine Richtlinie abgleicht, setzen Sie managedMcpServers 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 Sie bootstrapUrl 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.
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.
Einstellungen, die das Gateway für Claude Desktop ableitet
Das Gateway leitet einen Großteil der Bootstrap-Antwort aus dem cli- oder code-Block der zutreffenden Richtlinie und aus der Gateway-Konfiguration auf oberster Ebene ab:
  • Die Modellliste, aus availableModels. Die Liste lässt Modelle aus, die die Richtlinie mit deniedModels oder availableModelsMatch: exact blockiert. Dieser Filter erfordert Claude Code v2.1.299 oder höher auf dem Gateway-Server. Erweiterter Kontext in Claude Desktop behandelt die 1M-Kontextoption jedes Modells
  • Deaktivierte Tools aus permissions.deny-Einträgen mit bloßen Tool-Namen. Wenn Sie disabledBuiltinTools im desktop-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 durch permissions.deny deaktiviert haben, nicht erneut aktivieren können
  • Die Egress-Allowlist, aus sandbox.network.allowedDomains. Wenn Sie coworkEgressAllowedHosts im desktop-Block der Richtlinie setzen, verwendet das Gateway diesen Wert anstelle der abgeleiteten Liste. Wenn die vom Gateway ausgelieferte Allowlist * enthält und das Gateway nicht zusätzlich allowedWorkspaceFolders von Claude Desktop ausliefert, schaltet Claude Desktop die Bash-Sandbox im Code-Tab nicht ein
  • 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 sowohl telemetry.forward_to als auch listen.public_url setzen. Claude Desktop exportiert jedes Signal mit einer Kodierung: http/protobuf oder http/json, wenn Sie OTEL_EXPORTER_OTLP_PROTOCOL oder eine seiner Pro-Signal-Varianten auf http/json im env der Richtlinie setzen. Vor Claude Code v2.1.261 auf dem Gateway-Server setzte die Antwort http/json unabhängig davon, sodass ein Collector, der nur Protobuf akzeptiert, Claude Desktops Exporte ablehnte
Um 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, wie hooks und bereichsbezogene Berechtigungsregeln wie Bash(npm *), aus der Bootstrap-Antwort weg.
code-Einstellungen im Code-Tab anwenden
Die Claude-Code-Einstellungen, die eine Richtlinie unter ihrem Schlüssel code enthält, gelten im Code-Tab von Claude Desktop, wenn alle folgenden Bedingungen erfüllt sind:
  • Die Richtlinie hat außerdem einen desktop-Schlüssel, wobei ein leeres desktop: {} zählt
  • Claude Desktop hat Version 2.9939.2 oder höher
  • Die verwalteten Einstellungen von Claude Code auf dem Rechner nennen dieses Gateway
  • Dieser Rechner erreicht das Gateway über HTTPS in einem privaten Netzwerk
Die letzten beiden Bedingungen gelten für den Rechner, auf dem Claude Code für die Sitzung läuft. Bei einer lokalen Sitzung ist das der eigene Computer des Benutzers. Bei einer Code-Tab-Sitzung über SSH ist es der Remote-Host. Stellen Sie die clientseitigen verwalteten Einstellungen auf diesen Rechnern bereit, bevor Sie cli in code umbenennen. Wenn die ersten beiden Bedingungen erfüllt sind und eine der letzten beiden nicht, erhält ein Benutzer, auf den die Richtlinie zutrifft, eines der folgenden Ergebnisse:
  • Über HTTPS, wenn Claude Desktop Claude Code v2.1.296 oder höher enthält: Der Code-Tab startet nicht, und die Antwort auf den Prompt des Benutzers nennt den Grund
  • Über HTTPS, wenn Claude Desktop eine frühere Version enthält: Der Code-Tab startet ohne Ihre code-Einstellungen, und nichts in der Sitzung weist darauf hin
  • Über reines HTTP: Der Code-Tab startet ohne Ihre code-Einstellungen, unabhängig davon, welche Version Claude Desktop enthält
Wenn ein Proxy vor dem Gateway /managed/settings mit einem eigenen 404 beantwortet, startet der Code-Tab ebenfalls ohne Ihre code-Einstellungen, auch auf einem Rechner, der alle vier Bedingungen erfüllt. In einer Richtlinie mit einem desktop-Schlüssel deaktiviert ein code-Block, der Einstellungen enthält, das Tool WebSearch in Cowork, Chat und dem Code-Tab. Zu MCP-Servern siehe Wo managedMcpServers gilt.
Claude-Desktop-Einstellungen direkt setzen
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. Dieses Beispiel setzt drei Claude-Desktop-Schlüssel für die Gruppe eng-contractors neben ihren cli-Einstellungen:
Jeder Schlüssel ist optional; Claude Desktop wendet seinen eigenen Standard für jeden Schlüssel an, den Sie weglassen.
Was das Gateway beim Start ablehnt
Das Gateway validiert jeden 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:
  • Einen unbekannten Schlüssel
  • Einen erkannten Schlüssel, dessen Wert Claude Desktop ablehnen oder stillschweigend verwerfen würde, wie einen leeren Wert oder einen falsch geschriebenen Unterschlüssel in einem verschachtelten Eintrag. Vor v2.1.260 ließ das Gateway ein falsch geschriebenes Feld in einem verschachtelten Objekt eines managedMcpServers- oder orgPluginSettings-Eintrags stillschweigend fallen, anstatt beim Start fehlzuschlagen.
  • Einen Schlüssel, den das Gateway selbst berechnet: die Inferenzverbindung, die Modellliste und das OTLP-Relay. Konfigurieren Sie diese durch upstreams, models und forward_to im Abschnitt telemetry.
  • Einen Legacy-Alias eines aktuellen Schlüssels. Im Boot-Fehler benennt das Gateway den kanonischen Schlüssel, den Sie schreiben sollten.
Wenn Sie einen veralteten Wert oder eine veraltete Eintragsform verwenden, wie einen managedMcpServers-Eintrag ohne transport, startet das Gateway und protokolliert eine Warnung, die den Ersatz benennt. 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.
Schlüssel, die eine neuere Gateway- oder Claude-Desktop-Version erfordern
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. blockReadsOutsideWorkingDirectories, disableBypassPermissionsMode, configRecheckIntervalMinutes und sshClientPath benötigen Claude Code v2.1.281 oder später auf dem Gateway-Server. Dasselbe gilt für den Wert required von microsoftAuthBroker und das Feld continuousAccessEvaluation eines Microsoft-365-managedMcpServers-Eintrags. Claude-Desktop-Versionen, die älter als der Wert required sind, lesen ihn als disabled, setzen Sie required daher erst, wenn das Claude Desktop jedes Mitglieds ihn unterstützt. Claude Desktops verwaltete Konfigurationsreferenz listet die Version auf, die jeden Schlüssel zuerst liest.
sshTransport erfordert Claude Code v2.1.293 oder höher auf dem Gateway-Server.
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.
Wie eine Rollen-Richtlinie den desktop-Basisblock erbt
Das Gateway füllt Schlüssel, die der desktop-Block einer Richtlinie nicht setzt, aus dem desktop-Block der match: {}-Catch-All, auf die gleiche Weise, wie es den cli-Block einer Richtlinie aus der Basis 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 Liste der Richtlinie
  • builtinToolPolicy: Wenn Sie ein Tool in der Basis auf einen anderen Wert als allow setzen, behält das Gateway diesen Wert, auch wenn Sie allow für das gleiche Tool in einer Rollen-Richtlinie setzen
Für jeden anderen Schlüssel, wenn Sie ihn in der Rollen-Richtlinie setzen, verwendet das Gateway den Wert der Rollen-Richtlinie. Das Gateway ersetzt ein Array oder ein verschachteltes Objekt wie banner ganz, sodass wenn Sie banner.text in einer Rollen-Richtlinie setzen, das Gateway die banner.backgroundColor der Basis verwirft.
Wenn eine Richtlinienänderung Claude Desktop erreicht
Nachdem Sie das Gateway mit einer geänderten Richtlinie erneut bereitgestellt haben, wendet Claude Desktop die meisten Einstellungen erst beim nächsten Start an:
  • Geschlossen: Claude Desktop ruft die Bootstrap-Antwort beim Start ab, daher gilt die Änderung ab dem nächsten Start
  • Geöffnet: Claude Desktop prüft standardmäßig alle 10 Minuten auf eine geänderte Antwort und wendet einige Einstellungen ohne Neustart an. Für die übrigen, etwa skillCreationEnabled, sieht der Benutzer in der Seitenleiste eine Karte Relaunch Claude Desktop und behält die vorherige Konfiguration, bis er die App neu startet. Nach standardmäßig 24 Stunden zeigt Claude Desktop einen Neustart-Dialog an und startet nach 2 Minuten Inaktivität selbstständig neu
Um die 24 Stunden zu verkürzen, setzen Sie relaunchEnforcementHours im desktop-Block der Richtlinie. Sie benötigen Claude Code v2.1.260 oder später auf dem Gateway-Server und Claude Desktop 1.40609.0 oder später auf den Maschinen der Mitglieder. Mit 0 erscheint der Dialog, sobald Claude Desktop die Änderung erkennt.

Erweiterter Kontext in Claude Desktop

Wenn Sie Claude Desktop über das Gateway bedienen, bietet dessen Modellauswahl für jedes aufgelistete Modell, das mit einem Kontextfenster von 1M laufen kann, eine 1M-Kontextoption an. Dazu gehören Claude Opus 4.6 und später, Claude Sonnet 4.6 und später sowie die Fable-Modelle. Die Option ist die [1m]-Variante des Modells, die Erweiterter Kontext beschreibt. Sie benötigen Claude Code v2.1.284 oder später auf dem Gateway-Server. Ein models-Eintrag erhält keine 1M-Option, wenn:
  • Ein Upstream, der den Eintrag bedienen kann, ihn einem Modell ohne 1M-Unterstützung zuordnet, einschließlich eines Upstream, den das Gateway nur bei Failover erreicht
  • Weder seine id noch einer seiner upstream_model-Werte ein Claude-Modell benennt, etwa ein benutzerdefinierter Alias, der an einen ARN eines Application-Inference-Profils weitergeleitet wird
Um zu ändern, was die Auswahl anbietet, verwenden Sie eine dieser Möglichkeiten:
  • Benutzer mit der 1M-Option starten lassen: Setzen Sie modelPrefer1mContext: true im desktop-Block der Richtlinie. Benutzer, die noch kein Modell gewählt haben, starten mit der 1M-Option, wenn das erste aufgelistete Modell eine hat. Benutzer, die bereits ein Modell gewählt haben, behalten ihre Wahl.
  • Die Option manuell anbieten: Tun Sie dies, wenn Ihr Gateway-Server eine ältere Version als v2.1.284 ausführt oder ein Eintrag kein Claude-Modell benennt. Listen Sie das Modell zweimal in models auf, einmal mit seiner einfachen ID und einmal mit angehängtem [1m], beide mit derselben upstream_model-Zuordnung. Claude Desktop zeigt das Paar als ein Modell mit einer 1M-Option an. Das Gateway bedient einen [1m]-Eintrag, ohne ihn zu prüfen, fügen Sie einen solchen Eintrag daher nur für ein Modell hinzu, das Ihre Upstreams mit 1M bedienen.
Dieses Beispiel bietet die Option manuell für einen benutzerdefinierten Alias an, der an ein Application-Inference-Profil weitergeleitet wird, und lässt neue Benutzer damit starten:
Die 1M-Option entfernen
Um die Option aus der Auswahl zu entfernen, setzen Sie CLAUDE_CODE_DISABLE_1M_CONTEXT: "1" im env-Block unter dem cli-Schlüssel der Richtlinie. Wenn Sie auch einen Eintrag aufgelistet haben, dessen id auf [1m] endet, bedient das Gateway ihn weiterhin, löschen Sie diesen Eintrag daher ebenfalls. Die Variable erreicht auch die Terminal-Sitzungen der Entwickler, die die Richtlinie abgleicht. Was sie dort ändert, lesen Sie unter Erweiterter Kontext.

Vorrang mit anderen verwalteten Quellen

Wenn ein Gerät auch eine MDM-bereitgestellte Richtlinie oder eine lokale managed-settings.json hat, haben Gateway-bereitgestellte Einstellungen Vorrang. 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 env-Zusammenführung pro Variable. 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, Logs und, wenn aktiviert, Traces an das Gateway, das sie wörtlich an jedes konfigurierte Ziel weiterleitet. 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. In über /login angemeldeten Sitzungen versieht die CLI jeden Export mit der Identität des authentifizierten Benutzers, die aus dem vom Gateway ausgestellten JWT gelesen wird: die Attribute user.id, user.email und user.groups. Die Zuordnung von Kosten und Nutzung pro Entwickler funktioniert daher ohne Konfiguration auf Entwicklerseite. Ereignisse, die Claude Code protokolliert, bevor sich der Entwickler anmeldet, tragen diese Identität nicht. Welches Attribut einer Änderung der Gruppen eines Entwicklers folgt, erfahren Sie unter Gruppenänderungen während einer offenen Sitzung. 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 das Subjekt. 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 das Subjekt länger als 255 Zeichen ist, sobald es 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 ihre 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.
Jedes Ziel meldet sich unabhängig für metrics, logs und traces an, und der Standard ist nur Metriken. Die Signale unterscheiden sich in der Empfindlichkeit:
  • Metriken: Aggregatzähler wie Token-Zählungen, Anfragezählungen und Latenz
  • Logs und Traces: können vollständige Bash-Befehle, Tool-Eingaben und Dateipfade tragen, die alles abdecken, was Claude Code auf der Maschine eines Entwicklers tut
Aktivieren Sie Logs und Traces nur auf Zielen mit den Zugriffskontrollen und der Aufbewahrungsrichtlinie, die diese Daten erfordern.
Jede 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 mit ECONNREFUSED_SSRF, es sei denn, Sie setzen CLAUDE_GATEWAY_ALLOW_LOOPBACK=1 in der Umgebung des Gateways
  • http://127.0.0.1:<port> oder http://[::1]:<port> schlägt beim Start fehl, es sei denn, diese Variable ist gesetzt
Für einen In-Cluster-Collector stellen Sie ihn über HTTPS unter seiner eigenen internen Adresse bereit, oder führen Sie ihn als Sidecar mit der gesetzten Variable aus. Wenn 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 aktiviertem Proxy-Only-Egress 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 pusht:
  • CLAUDE_CODE_ENABLE_TELEMETRY=1
  • OTEL_METRICS_EXPORTER, OTEL_LOGS_EXPORTER und OTEL_TRACES_EXPORTER, jeweils auf otlp gesetzt, wenn mindestens ein forward_to-Ziel dieses Signal aktiviert, und andernfalls auf none
  • OTEL_EXPORTER_OTLP_ENDPOINT=<public_url>
  • OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
Wenn Sie Ihre eigenen Labels hinzufügen, pusht das Gateway auch OTEL_RESOURCE_ATTRIBUTES. Vor Claude Code v2.1.265 auf dem Gateway-Server pushte das Gateway alle drei Exporter-Selektoren als otlp, auch für Signale, die kein Ziel aktiviert hatte. Der gepushte Endpunkt wird aus der öffentlichen URL erstellt, sodass Metriken und Logs 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 aktiviertem OTLP/HTTP-Export ignoriert die CLI jeden lokal konfigurierten Endpunkt, unabhängig davon, ob das Gateway die Telemetrie-Variablen gepusht hat. Ihre Exporte gehen an das Gateway, es sei denn, eine Richtlinie benennt Ihren Collector als Endpunkt.
Ohne ein 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 aktivierten Logs oder Traces, 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 pusht. Entwickler genehmigen es im gleichen Sicherheitsgenehmigungsdialog, den der gepushte Endpunkt bereits auslöst. Setzen Sie es nur in den Richtlinien auf 1, deren Gruppen Sie tracen möchten. Eine Richtlinie, die es nicht setzt, erbt den Wert von Ihrer match: {}-Catch-All-Richtlinie, wenn diese Richtlinie einen setzt, gemäß den Zusammenführungsregeln. Um zu verhindern, dass die Clients einer Gruppe Traces senden, auch wenn ein Entwickler die Variable lokal setzt, setzen Sie sie in der Richtlinie dieser Gruppe auf 0. Sowohl Protobuf- als auch JSON-OTLP-Kodierungen werden weitergeleitet, und jedes OpenTelemetry-kompatible Backend funktioniert als Ziel.

Kumulative Metriken senden

Wenn Ihr Collector nur kumulative Metriken akzeptiert, setzen Sie OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE auf cumulative. Claude Code sendet standardmäßig Delta-Metriken, und das Gateway leitet sie ohne Umwandlung weiter. Setzen Sie die Variable dort, wo die jeweilige Sitzungsart sie liest: Wenn Sie die Variable zu den verwalteten Einstellungen eines Rechners hinzufügen, setzen Sie außerdem parentSettingsBehavior: "merge" in der Quelle mit der höchsten Priorität auf diesem Rechner. Ohne diese Einstellung laufen Cowork-Sitzungen und Code-Tab-Sitzungen unter einer cli-Richtlinie ohne die Egress-Allowlist und andere Richtlinien, die Claude Desktop ihnen als übergeordnete Einstellungen übergibt.

Ihre eigenen Labels hinzufügen

Um feste Labels wie service.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:
Das Gateway weigert sich zu starten, wenn ein Label eine dieser Regeln bricht, und der Startfehler benennt das Label:
  • Namen verwenden nur Buchstaben, Ziffern, ., _ und -
  • Namen sind nicht reserviert. Verglichen in jeder Schreibweise sind die reservierten Namen alles, das mit user., enduser. oder identity. beginnt, plus service.name, service.version, claude.deployment_mode, host.arch, os.type, os.version und wsl.version
  • Werte sind nicht leeres druckbares ASCII ohne Leerzeichen und ohne eines von , ; = \ " %
  • Werte sind höchstens 255 Zeichen lang, wie das Gateway sie nach prozentualem Kodieren zählt, sodass /, : und @ jeweils als drei zählen
  • Werte sind Text, setzen Sie daher eine Zahl, true oder false in Anführungszeichen
Sie benötigen Claude Code v2.1.281 oder später auf dem Gateway-Server, um 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 abgleicht, 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.

Gruppenänderungen während einer offenen Sitzung

Terminal-Sitzungen setzen user.groups auf die OTLP-Ressource und zusätzlich auf jeden Metrik-Datenpunkt und jedes Ereignis. Wenn sich die Gruppen eines Entwicklers ändern, während eine Sitzung offen ist, tragen Datenpunkte und Ereignisse für die Nutzung nach der nächsten stillen Aktualisierung die neuen Gruppen. Die Ressource behält die alten Gruppen, bis der Entwickler Claude Code neu startet; gruppieren Sie daher nach dem Attribut am Datenpunkt oder Ereignis. Wenn Sie resource_to_telemetry_conversion im Prometheus-Remote-Write-Exporter des OpenTelemetry Collectors einschalten, ersetzt der Exporter das user.groups jedes Datenpunkts durch das der Ressource, sodass jeder Datenpunkt die alten Gruppen zeigt. Um den Wert des Datenpunkts zu behalten, löschen Sie user.groups vor diesem Exporter aus der Ressource. Dieser resource-Prozessor des OpenTelemetry Collectors löscht das Attribut in den Pipelines, die ihn aufführen:
Nachdem Sie resource/drop-user-groups zu den processors der Metrik-Pipeline hinzugefügt haben, trägt jede Serie das Label user_groups aus ihrem eigenen Datenpunkt.

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, bittet Claude Code jeden Entwickler, ihn im Sicherheitsgenehmigungsdialog zu genehmigen, bevor es 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.json setzen, bleiben Exporte auf dem Relay.
  • Die URL verwendet https:// oder, bei einer Loopback-Adresse, http://
  • 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. Eine Pro-Signal-Variable wie OTEL_EXPORTER_OTLP_METRICS_ENDPOINT verwendet es wie geschrieben, geben Sie dort daher den vollständigen Pfad an.
  • Die URL ist nicht der eigene Host des Gateways. Ein Endpunkt, der an das Gateway adressiert ist, behält den Relay-Pfad und sein Sitzungstoken.
  • Weder Sie noch der Entwickler haben otelHeadersHelper in einer Einstellungsquelle konfiguriert. Mit einem konfigurierten Helper bleibt jedes Signal auf dem Relay.
Der Endpunkt, den Sie benennen, ändert nur, wohin Exporte gehen. Welche Signale überhaupt exportiert werden, wählen Sie weiterhin mit den OTEL_*_EXPORTER-Selektoren. Der Endpunkt allein schaltet den Export nicht ein, setzen Sie daher auch die Variablen, die dies tun, es sei denn, das Gateway pusht sie bereits:
  • Wenn das Gateway bereits die Telemetrie-Variablen pusht, decken sie Aktivierung, Selektoren und Protokoll ab, und Ihr expliziter Endpunkt überschreibt den gepushten <public_url>-Wert. Setzen Sie einen OTEL_*_EXPORTER-Selektor nur für ein Signal selbst auf otlp, das kein forward_to-Ziel aktiviert.
  • Wenn nicht, setzen Sie auch CLAUDE_CODE_ENABLE_TELEMETRY=1, die OTEL_*_EXPORTER-Selektoren und OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf.
Wenn sich der Entwickler abmeldet oder bei einem anderen Gateway anmeldet, stoppen Exporte an den Collector und Claude Code verwirft jeden verbleibenden Batch, anstatt ihn zu senden.

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 ist für sich erfolgreich oder schlägt fehl, und der exportierende Client erhält in jedem Fall eine Erfolgsantwort, sodass eine fehlgeschlagene Lieferung nur im Log des Gateways erscheint. Nach fünf aufeinanderfolgenden fehlgeschlagenen Lieferungen an ein Ziel pausiert das Gateway die Weiterleitung dorthin in 30-Sekunden-Abschnitten und protokolliert jede Pause, bis eine Lieferung erfolgreich ist. Jede Fehlerantwort, jeder Timeout und jeder Verbindungsfehler zählt als fehlgeschlagene Lieferung, außer 400, 413, 415, 422 und 431, die bedeuten, dass der Collector die Payload dieses Exports als fehlerhaft oder zu groß abgelehnt hat. Eine abgelehnte Payload erhöht den Fehlerzähler weder, noch setzt sie ihn zurück: Das Gateway leitet weiterhin an das Ziel weiter und protokolliert eine Warnung, die das Ziel und den Status benennt, bei der ersten Ablehnung des Ziels und bei jeder hundertsten 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 Betriebs-Log 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/128 und fc00::/7 zuzulassen, plus alle anderen internen Bereiche, von denen sich Ihre Entwickler verbinden. Wenn Sie das Gateway an eine Loopback-Adresse binden und weder trusted_proxies noch public_url setzen, wie in der lokalen Entwicklung, erscheint die Warnung nicht.
  • Zur Laufzeit: Wenn zum ersten Mal 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/16 und fe80::/10, zählen nicht als öffentlich. Das Gateway antwortet auf /healthz und /readyz, bevor diese Prüfung ausgeführt wird, sodass Health-Probes aus öffentlichen Bereichen sie nicht auslösen.
Beide Signale verwenden die Client-Adresse, wie das Gateway sie auflöst. Wenn ein Load Balancer, Port-Forward oder Tunnel Datenverkehr weiterleitet und nicht in 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 erfasst, der durch es weitergeleitet wird. Wenn die Weiterleitung in listen.trusted_proxies gehört, führen Sie sie dort auf. Halten Sie das Gateway und alles davor unabhängig davon vom öffentlichen Internet aus unerreichbar.

load_test_mode

Mit dem load_test_mode-Block können Sie ein Gateway einem Lasttest unterziehen, ohne einen Modellanbieter aufzurufen. Während er aktiviert ist, erstellt und signiert 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 sie 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, einer Antwort von ungefähr 750 Token Text, die über etwa 10 Sekunden gestreamt wird:
Ein Lasttest in diesem Modus deckt das Gateway, Ihre Postgres-Datenbank und alles vor dem Gateway ab. Er deckt nicht die Limits, die Geschwindigkeit und den Netzwerkpfad des Anbieters ab, ebenso wenig die Wartezeit am Limit für gleichzeitige Upstream-Anfragen jedes Replikats. Ein Replikat protokolliert weiterhin die Warnung client requests are open, wenn mehr Anfragen offen sind als dieses Limit, also ab dem Punkt, an dem Produktionsanfragen zu warten beginnen. Es wird keine Modell-Anfrage an den Anbieter gesendet, daher ist die CPU pro Anfrage eines Replikats eine Schätzung und fällt niedriger aus als in der Produktion, die ihren Datenverkehr zum Anbieter zusätzlich verschlüsselt. Bestätigen Sie eine Replikat-Anzahl mit einem kleinen Pilotversuch gegen den echten Anbieter. Vor v2.1.283 fällt die Schätzung deutlich niedriger aus. Während der Modus aktiviert ist, kann eine Anfrage einen x-load-test-user-Header tragen, der eine ganze Zahl mit bis zu sieben Ziffern enthält. Das Gateway zählt jede Zahl als separaten Entwickler, mit der E-Mail und den Gruppen des Entwicklers, dessen Token mit der Anfrage kam. Geben Sie der Lasttest-Bereitstellung ihre eigene leere Datenbank, da das Gateway sich weigert, mit aktiviertem Modus gegen eine Datenbank zu starten, in der ein Entwickler bereits etwas ausgegeben hat.
Schalten Sie dies niemals für ein Gateway ein, das Entwickler verwenden. Jede Anfrage erhält die vorgefertigte Antwort und kein Modell wird aufgerufen. Das Gateway protokolliert beim Start eine load_test_mode is on-Warnung und markiert jedes inference-Audit-Ereignis mit load_test: true, während der Modus aktiviert ist.

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-Datei managed-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. Um zu verhindern, dass Entwickler das Gateway mit einer Cloud-Anbieter-Variable oder einer eigenen ANTHROPIC_BASE_URL umgehen, fügen Sie "allowedProviders": ["gateway"] zur selben Datei hinzu. Claude Code lehnt dann jede Sitzung auf dem Computer ab, die nicht für ein Cloud-Gateway eingerichtet ist, und lässt ein Gateway nur zu, wenn es dasjenige ist, das forceLoginGatewayUrl angibt, oder eines, dessen URL der env-Block der Datei als ANTHROPIC_BASE_URL setzt. claude gateway verweigert die Ausführung auf einem Computer, der die Liste setzt, halten Sie den Schlüssel daher vom Gateway-Host fern. Siehe den Eintrag allowedProviders in der Einstellungsreferenz. Erfordert Claude Code v2.1.285 oder höher. 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 berücksichtigt forceLoginGatewayUrl, gatewayInternalNetworks und den "gateway"-Wert von forceLoginMethod von einer verwalteten Quelle auf dem Computer: managed-settings.json, das macOS-Plist oder die Windows HKLM-Registrierung, oder ein Richtlinien-Helper. Das Setzen dieser Schlüssel in der Gateway-Payload konfiguriert die Gateway-Anmeldung nicht. Informationen zur eigenen ~/.claude/settings.json eines Entwicklers finden Sie unter Gateway-URL in Benutzereinstellungen festlegen. Lassen Sie forceLoginMethod und forceLoginOrgUUID aus der Payload heraus. Claude Code liest beide Schlüssel für seine Überprüfung der Anmeldedaten beim Start weiterhin aus der Payload, sodass ein Entwickler, der von Anthropic ausgestellte Anmeldedaten auf dem Computer behält, auch nach der Anmeldung den unter Administratorrichtlinie erfordert eine Cloud-Gateway-Anmeldung beschriebenen Abbruch beim Start erhält.