gateway.yaml という 1 つの YAML ファイルで設定されます。このファイルは、ゲートウェイが行うすべてのことを定義します:どこでリッスンするか、開発者がどのようにサインインするか、推論がどこに行くか、どのポリシーとテレメトリーが適用されるかです。このページは、そのファイル内のすべてのオプションのリファレンスです。最初のファイルを作成するには、クイックスタートから始めてください。これは最小限の動作設定を構築して実行します。設定に満足したら、デプロイメントガイドで、Kubernetes、Cloud Run、または独自のプラットフォームでのコンテナ化とホスティングについて説明しています。
ゲートウェイは、claude gateway --config /path/to/gateway.yaml でスタートアップ時にファイルを 1 回読み込みます。すべてのオプションはブート時にスキーマに対して検証されるため、形式が正しくない設定は、最初の使用時ではなく、フィールドレベルのエラーで開始時に失敗します。
このページの最後にある完全な例は、すべてのセクションを実行します。
ファイル構造
5 つのセクションが必須です。その他のセクションはすべてオプションであり、省略されたセクションはデフォルト値を使用します。不明なキーはブート時に失敗するため、タイプミスは設定が無視されるのではなく、名前付きエラーとして表示されます。 必須セクション:listen:バインドアドレス、パブリック URL、TLS ターミネーションoidc:ID プロバイダー(IdP)、発行者、クライアント、クレームマッピング、サインイン可能なユーザーを含むsession:ゲートウェイが発行するベアラートークン、シークレット、ライフタイムstore:デバイスグラント、レート制限カウンター用の PostgreSQLupstreams:推論の送信先、Anthropic、Amazon Bedrock、AWS 上の Claude Platform、Google Cloud の Agent Platform、Microsoft Foundry のいずれか
admin:Admin API 認証、支出制限の保持enforcement:支出制限のフェイルオープンまたはフェイルクローズ動作pricing:契約レート、支出メーター用の乗数、開発者が表示するコスト数値用の乗数modelsとauto_include_builtin_models:管理者がキュレーションしたモデルリスト、アップストリームごとの IDmanaged:IdP グループ別の管理設定ポリシーtelemetry:オブザーバビリティスタックへの OTLP フォワーディングaccess_control、limits、timeouts、rate_limits:IP 許可/拒否、リクエストサイズ上限、アップストリーム初バイト到達時間、IP ごとのサインイン制限load_test_mode:モデルプロバイダーを呼び出さずにゲートウェイをロードテストする
シークレット展開
client_secret、jwt_secret、postgres_url などのシークレットを gateway.yaml に直接書き込まないでください。以下のいずれかの形式で参照すると、ゲートウェイはブート時に環境変数またはファイルから値を解決します:
必須セクション
listen
listen ブロックは、ゲートウェイがサービスを提供する場所を制御します。バインドアドレスとポート、外部から見えるオリジン、およびオプションの TLS 終了を指定します。
oidc
oidc ブロックはゲートウェイをアイデンティティプロバイダーに接続し、誰がサインインできるかを決定します。発行者と OAuth クライアントに名前を付け、メールとグループを含むクレームをマップし、メールドメインまたはグループによるサインインを制限します。
OpenID Connect(OIDC)はゲートウェイがアイデンティティプロバイダーで使用する SSO プロトコルです。IdP 側で登録する内容については、アイデンティティプロバイダーのセットアップを参照してください。
証明書によるクライアント認証
Microsoft Entra が証明書の認証情報で行うように、アイデンティティプロバイダーがクライアントシークレットではなく証明書で OAuth クライアントを認証する場合は、token_endpoint_auth_method: private_key_jwt を設定します。ゲートウェイサーバーで Claude Code v2.1.284 以降が必要です。
この設定では、ゲートウェイはシークレットを送信しません。開発者がサインインするとき、およびゲートウェイがそのセッションをリフレッシュするたびに、証明書の秘密鍵で署名された短期間有効な JWT を使用して IdP のトークンエンドポイントに対して認証します。JWT は RS256 で署名され、kid ではなく x5t および x5t#S256 サムプリントヘッダーによって証明書を識別します。IdP は登録された証明書をサムプリントで検索できる必要があります。
1
鍵と証明書を作成する
PKCS#8 または PKCS#1 PEM 形式の、2048 ビット以上の暗号化されていない RSA 秘密鍵と、それに対応する証明書を作成します。ゲートウェイは、これらの条件を満たさない鍵では起動を拒否します。次の これにより、現在のディレクトリに
openssl コマンドは、そのような鍵と、1 年間有効な自己署名証明書を作成します:idp-client.key と idp-client.crt が書き込まれます。両方のファイルを、ゲートウェイが読み取れる場所にコピーまたはマウントします。ステップ 3 の例では /etc/gateway/ を使用しています。2
証明書を IdP にアップロードする
秘密鍵ではなく証明書を、IdP 上のゲートウェイのアプリ登録にアップロードします。
3
鍵と証明書を gateway.yaml に追加する
client_assertion ブロックで、ゲートウェイに秘密鍵と証明書を渡します。client_secret は省略します。private_key_jwt と一緒に設定されていると、ゲートウェイは起動を拒否するためです。次の oidc ブロックは、証明書を使用してゲートウェイを Microsoft Entra テナントに対して認証します:${file:/path} でマウントされたファイルを読み込みます。certificate_pem がチェーンの残りを含まない単一の PEM 証明書であり、その公開鍵が private_key_pem と一致しない限り、ゲートウェイは起動を拒否します。4
ゲートウェイを再起動してブートログを確認する
ゲートウェイを再起動し、ブートログで次の行を探します:SHA-1 サムプリントを、アップロードした証明書について IdP が表示するものと比較します。証明書の有効期限が切れている、またはまだ有効でない場合でもゲートウェイは起動しますが、置き換えるまでサインインとリフレッシュが失敗するという警告をログに記録します。IdP が証明書を受け入れることを確認するには、開発者 1 人にゲートウェイを通じてサインインしてもらいます。
クライアント証明書のローテーション
ゲートウェイは鍵と証明書をブート時に一度だけ読み込むため、ファイルの変更は再起動後にのみ反映されます。IdP が持っていない証明書をトークンリクエストが提示することがないよう、次の順序でローテーションします:- 新しい証明書を、古い証明書と並べて IdP にアップロードします。
gateway.yamlが読み込む鍵と証明書のファイルを置き換えてから、ゲートウェイを再起動します。複数のレプリカを実行している場合は、ローリング再起動で問題ありません。古い証明書を削除するまで、IdP は両方の証明書を保持しているためです。- すべてのレプリカが再起動した後、古い証明書を IdP から削除します。
フォワードプロキシを通じた IdP リクエスト
推論アップストリームはすべてのバージョンでHTTPS_PROXY と HTTP_PROXY を尊重します。ゲートウェイ独自の IdP、検出、JWKS、トークン、および userinfo へのリクエストは、oidc.use_proxy: true を設定しない限り直接です。これには v2.1.227 以降が必要です。プロキシ変数が設定され、use_proxy が設定されておらず、発行者が NO_PROXY でカバーされていない場合、ゲートウェイはそれらのリクエストを直接に保ち、ブート時に選択するよう求める通知をログに記録します。use_proxy: false はそれらを直接に保ち、通知を抑止します。
use_proxy: true の場合、ポッドは各 IdP エンドポイントのホスト名を自身で解決し、プロキシに解決された IP アドレスへの CONNECT を要求します。プロキシは、発行者だけでなく、検出ドキュメントが名前を付けるすべてのホストの IP アドレスへの CONNECT を受け入れる必要があります。http:// プロキシ URL を使用します。ca_cert_pem と SSRF ガードはプロキシされたパスにも適用されます。
プロキシのみのエグレスはこれらの両方を変更します。アクティブな場合、IdP リクエストは use_proxy: false を設定しない限りプロキシに従い、ゲートウェイは最初にそれを解決せずにプロキシに各 IdP ホスト名を渡します。
プロキシのみのエグレス
ポッドがそのフォワードプロキシを通じてのみ他のホストに到達でき、パブリック DNS 名を自身で解決できない場合、またはプロキシが IP アドレスへのCONNECT を拒否する場合は、ゲートウェイの環境で HTTPS_PROXY の隣に CLAUDE_GATEWAY_PROXY_IS_EGRESS_BOUNDARY=1 を設定します。v2.1.277 以降が必要です。これは gateway.yaml キーではなく環境変数です。設定ファイルの何もゲートウェイのアドレスチェックを緩和できないようにするためです。
network: 行をログに記録します。
以下の各行は、HTTPS_PROXY が設定されたゲートウェイ上の 1 つのクラスのアウトバウンドリクエストについて、デフォルトの場合とプロキシのみのエグレスがアクティブな場合の動作を示します。
プロキシのみのエグレスは、ゲートウェイの環境がこれら 3 つの条件をすべて満たさない限り、オフのままです:
HTTPS_PROXYまたはHTTP_PROXYが設定されています。NO_PROXYとno_proxyは空です。プラットフォームがいずれかをポッドに注入する場合、ゲートウェイコンテナの両方を空の値に設定します。NO_PROXYにテレメトリコレクターをリストすると、プロキシのみのエグレスがオフのままです。CLAUDE_GATEWAY_ALLOW_LOOPBACKがオンになっていません。ポッド独自のループバック上のコレクターまたは IdP は、プロキシのみのエグレスと組み合わせることはできません。ループバックアドレスがプロキシに渡されるとプロキシホスト独自のものになるため、代わりにプロキシが到達できるアドレスをそれらのサービスに与えてください。同じ理由で、ゲートウェイはプロキシのみのエグレスがアクティブな場合、localhostスタイルの名前を完全に拒否します。
oidc.use_proxy: false で内部 IdP を直接に保つことは引き続き可能です。
session
session ブロックは、ゲートウェイがサインイン後に発行するベアラートークンを定義します。トークンに署名するシークレットと、その有効期間です。
store
store ブロックはゲートウェイを PostgreSQL データベースに向けます。このデータベースはデバイスグラントとレート制限カウンターを保持します。
ローカル開発の場合、
postgres_url を使い捨て Postgres コンテナに向けます。例えば docker run --rm -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres。
upstreams
upstreams は順序付きリストです。ゲートウェイは、要求されたモデルを解決する最初のアップストリームに推論を転送します。
5xx、429、401、403、404、またはタイムアウト時に、ゲートウェイは次のアップストリームにフェイルオーバーします。他の 4xx ではフェイルオーバーしません。これらのエラーはアップストリームではなくリクエストに起因するためです。401 または 403 は、ゲートウェイが使用した認証情報をアップストリームが拒否したか、例えば要求されたモデルへのアクセスを拒否したことを意味します。404 はそのアップストリームが要求されたモデルを提供しないことを意味するため、リスト内の後のアップストリームがまだ提供できます。
アップストリームで forward_user_identity: true を設定する場合、開発者のメールを含むリクエストに対してそのアップストリームが返す 429 はフェイルオーバーしません。ユーザーごとの制限による拒否が開発者にどう届くかを参照してください。
404 でのフェイルオーバーにはゲートウェイ v2.1.198 以降が必要です。以前のリリースは、リスト内の後のアップストリームがモデルを提供している場合でも、最初の 404 をクライアントに返しました。
同じプロバイダーの複数のアップストリームは、異なる name: を設定する必要があります。
Amazon Bedrock、Claude Platform on AWS、Google Cloud の Agent Platform、および Microsoft Foundry クライアントはスタートアップ時に 1 回構築され、SDK は内部的に認証情報をリフレッシュするため、クラウド認証情報のローテーションは再起動を必要としません。静的 Anthropic API キーとベアラーはスタートアップ時に読み込まれます。Anthropic API を参照してください。
アップストリームエラーメッセージ
ゲートウェイは、アップストリームがどのように応答したかに応じて、1 つのアップストリームのエラーレスポンスまたはそれ独自の502 を返します:
- ゲートウェイがフェイルオーバーしないステータスをアップストリームが返した:そのアップストリームのレスポンス。ゲートウェイはそれ以上のアップストリームを試みません。
- ゲートウェイが試みたすべてのアップストリームがフェイルオーバーする方法で失敗した:最後の
429。いずれも429を返さなかった場合、ゲートウェイは順に、最後の401または403、最後の404、最後の501を優先します。いずれも返さなかった場合、ゲートウェイ独自の502。all upstreams failed (N attempted)。N はupstreamsのすべてのエントリをカウントします。要求されたモデルを提供しないためゲートウェイがスキップしたエントリを含みます。
- Anthropic の標準エラーエンベロープの
400または413:prompt is too longなどのアップストリーム独自のメッセージ。Claude Platform on AWS、Agent Platform、および Microsoft Foundry はモデル API の拒否に対してこのエンベロープを返します。 - プロバイダー独自の形式の
400または413:capability_rejected:トークン。ゲートウェイが拒否を分類できない場合、400でupstream rejected the requestまたは413でrequest too large for this upstream。 - その他のステータス:
429でupstream rate limit exceededなどのステータスごとの汎用文言。
Input is too long for requested model. を capability_rejected: prompt_too_long に置き換えます。Claude Code は prompt is too long と同様に、そのトークンで自動的にコンパクトにします。
クラウドアップストリームの 400 または 413 メッセージを保つか、capability_rejected: トークンで置き換えるには、ゲートウェイ v2.1.233 以降が必要です。
Anthropic API
最小限の Anthropic アップストリームは、Claude Console からの API キーです:api_key:x-api-keyを送信します。Claude Console でローテーションし、環境変数を更新します。oauth_token:Authorization: Bearerを送信します。組織が長期 API キーではなく短期トークンを発行する場合、ベアラーフォームを使用します。ベアラーはスタートアップ時に 1 回読み込まれるため、シークレットを再マウントして再起動することでリフレッシュします。
provider: anthropic アップストリームの base_url を Anthropic API ではなく実行するプロキシに向けることができます。そのプロキシに各リクエストを送信した開発者を伝えるには、そのアップストリームで forward_user_identity: true を設定します。プロキシはその後、開発者ごとに支出を帰属させることができます。Claude Code v2.1.233 以降を実行しているゲートウェイが必要です。
例えば、upstream-gateway.internal.example.com のプロキシの場合:
IdP トークンがメールを含まない場合、ゲートウェイは
x-claude-gateway-user-id のみを送信し、2 つのメールヘッダーを省略します。IdP がメールを別のクレームに入れる場合、oidc.email_claim をそのクレームに設定します。
プロキシが開発者のメールを含むリクエストに 429 で応答する場合、ゲートウェイはそのレスポンスを開発者にそのまま返し、次のアップストリームにフェイルオーバーしません。これにより、プロキシのユーザーごとの予算またはレート制限が維持されます。プロキシの他のレスポンスは通常のフェイルオーバールールに従います。開発者の IdP トークンがメールを含まない場合、ゲートウェイはメールヘッダーなしでリクエストを転送するため、そのようなリクエストへの 429 はアップストリーム容量としてカウントされ、フェイルオーバーします。ゲートウェイサーバーの v2.1.267 より前では、すべての 429 がフェイルオーバーしました。
forward_user_identity は、base_url が運用するプロキシであるアップストリームにのみ設定します。ゲートウェイは開発者メールを、その base_url が名前を付けるサーバーに送信します。base_url が Anthropic API(デフォルト)の場合、ゲートウェイは起動を拒否します。
Amazon Bedrock
ゲートウェイが置き換える、または前段に置くクライアント側の Amazon Bedrock デプロイについては、Claude Code on Amazon Bedrock を参照してください。ゲートウェイ側のアップストリーム:auth ブロックは AWS SDK のデフォルト認証情報チェーンを使用します:環境変数、~/.aws/credentials、ECS タスクロール、EC2 インスタンスメタデータ、または EKS 上の IRSA。本番環境では、コンテナイメージに静的キーを埋め込む代わりに、ゲートウェイポッドに IAM ロールを与えます。
明示的な認証情報は完全である必要があります。aws_access_key_id と aws_secret_access_key が一緒に設定されていない場合、または aws_session_token がそれらなしで設定されている場合、ゲートウェイはブート時に失敗します。v2.1.207 より前では、部分的な auth: ブロックが検証に合格しました。
ゲートウェイが Bedrock アップストリームを通じて送信するすべての推論リクエストに Amazon Bedrock ガードレールを適用するには、そのアップストリームに
guardrail ブロックを追加します。ゲートウェイサーバーで Claude Code v2.1.281 以降が必要です。
assume_role を使用する場合は role_arn で指定したロール)に、そのガードレールに対する bedrock:ApplyGuardrail を付与します。
すべての bedrock アップストリームで guardrail を設定するか、どれにも設定しないでください。ゲートウェイは混在した設定では起動を拒否します。そうしないと、フェイルオーバーによってリクエストがガードレールのない Bedrock アップストリームに送信される可能性があるためです。
ガードレールは Bedrock アップストリームのみをカバーします。upstreams に別のプロバイダーをリストする場合、ゲートウェイはガードレールなしでそのプロバイダーにリクエストを送信します。ただし、そのプロバイダーが mantle の場合は起動を拒否します。
本体に amazon-bedrock-guardrailConfig などの amazon-bedrock-* フィールドを含む /v1/messages リクエストが、guardrail が設定された Bedrock アップストリームに到達すると、ゲートウェイはそれを転送せずに 400 で応答します。
Bedrock アップストリームで assume_role を設定すると、ゲートウェイは独自の AWS アイデンティティを、指定したロールに対して sts:AssumeRole を呼び出すためだけに使用します。このロールはゲートウェイとは別の AWS アカウントにあってもかまいません。そのアップストリームからのすべての Bedrock リクエストは、STS が返す 1 時間有効の認証情報で署名されるため、長期アクセスキーがアカウント間を行き来することはありません。
Claude Code v2.1.281 以降を実行しているゲートウェイが必要です。以前のゲートウェイはキーを見つけたときに起動を拒否します。
assume_role ブロックは 3 つのキーを取ります:
ロールの信頼ポリシーはゲートウェイ独自のプリンシパル(IRSA または ECS タスクロールなど)に名前を付けます。そのプリンシパルはロールに対する
sts:AssumeRole が必要で、自身の Bedrock 権限は不要です。external_id を設定しない場合は Condition を削除します。
- STS が拒否または到達不可の場合、ゲートウェイはアップストリーム独自の認証情報でリクエストを送信しません。STS エラーを確認すべき点とともにログに記録してから、リストした次のアップストリームを試みます。アップストリームエラーメッセージは、どのアップストリームも成功しない場合にクライアントが受け取るものをカバーしています。
assume_roleのない後のアップストリームはそれ独自の認証情報でリクエストを処理するため、それが望む動作である場合のみリストしてください。 - ゲートウェイはリージョンの STS エンドポイント
sts.<region>.amazonaws.comを呼び出すため、ネットワークはそれに到達できる必要があります。FIPS エンドポイントの場合、AWS 設定ファイルのuse_fips_endpointではなく、ゲートウェイの環境でAWS_USE_FIPS_ENDPOINT=trueを設定します。 assume_roleはprovider: bedrockにのみ適用され、SigV4 ソース認証情報が必要です。ゲートウェイはaws_bearer_tokenと一緒に設定されている場合、起動を拒否します。- ゲートウェイが許可するすべての開発者はこのアップストリームを使用できます。
managedはどの開発者がどのモデルを使用できるかを制御します。ロールを通じて提供されるモデルが別のアカウントからも提供されるのを防ぐには、upstream_modelマップにこのアップストリームの名前のみを持つカスタム id をそのモデルに与えます。そのような id の場合、ゲートウェイは他のすべてのアップストリームをスキップするため、リクエストも、中断されたリクエストのトークンカウントも、別のアカウントにフェイルオーバーすることはありません。組み込みモデル名へのリクエストは引き続きこのアップストリームに到達する可能性があり、ゲートウェイはそれを同じロールで署名します。このアカウントでもそれらのモデルを提供する場合を除き、このアップストリームを最後にリストしてください。
assume_role に session_name: email を追加すると、ゲートウェイは開発者ごとに 1 時間に 1 回 sts:AssumeRole を呼び出し、セッション名をその開発者のメールに設定し、返された認証情報でリクエストに署名するため、各開発者のリクエストは独自の引き受けたロールセッションの下で AWS に到達します。ロールはゲートウェイ独自のアカウントにあってもかまいません。
Claude Code v2.1.281 以降を実行しているゲートウェイが必要です。AWS でのコスト属性は IAM ロールと AWS 請求がセッションを表示する場所をカバーしています。
session_name は、どの検証済みクレームが AWS RoleSessionName になるかを選択します:email または sub。ゲートウェイは ASCII 文字、数字、および _+,.@- 以外の任意の文字を UTF-8 バイトごとに =XX 16 進数として書き込み、64 文字より長い結果をプレフィックスとハッシュに短縮するため、各開発者のセッション名は有効で一意のままです。トークンがクレームを欠いている開発者からのリクエストはこのアップストリームを通じて送信されず、オペレーターログは sub に切り替えるか oidc.email_claim を設定するよう指示します。
アクティブな開発者 1 人あたり、ゲートウェイレプリカごとに 1 時間に 1 回の STS 呼び出しが発生します。同時に発生した最初のリクエストは 1 回の呼び出しを共有します。
ゲートウェイはこのロールで独自の呼び出しも 1 つ行います。支出制限を正確に保つための、クライアントが放棄したリクエストのトークンカウントです。そのカウントとその1 トークンフォールバックリクエストは共有の claude-apps-gateway セッションで署名されるため、AWS はフォールバックを開発者ではなく claude-apps-gateway に帰属させます。
厳密な per-developer 属性の場合、リストするすべての Bedrock アップストリームで assume_role を session_name とともに設定します。それがないアップストリームは、処理するリクエストに独自の認証情報で署名します。
Amazon Bedrock Mantle エンドポイント
mantle プロバイダーは、推論を Amazon Bedrock の Mantle エンドポイントに送信します。ゲートウェイサーバーで Claude Code v2.1.283 以降が必要です。それより前のゲートウェイリリースはブート時にこれを拒否するため、追加する前にすべてのレプリカをアップグレードしてください。
以下の例では Mantle を最初に置き、その後ろに Amazon Bedrock アップストリームを置いて、models フィールドに含まれないすべてのモデルを提供させます:
mantle アップストリーム固有のフィールドを示しています。
アップストリームの AWS アイデンティティに、推論とトークンカウント用の Mantle 独自の IAM アクションを付与します。これらは Mantle エンドポイントを使用するに記載されています。
ゲートウェイが認識しない Mantle モデル ID の場合は、最上位の
models: ブロックに、upstream_model がこのアップストリームの名前をその ID にマップするエントリを追加します。次に、そのエントリの id をこのアップストリームの models フィールドにも追加します。
bedrock アップストリームの guardrail と assume_role の設定は、Mantle が処理するリクエストには適用されません:
guardrail:ゲートウェイは Mantle に送信するリクエストに Bedrock ガードレールを適用しないため、いずれかのbedrockアップストリームがguardrailを設定している状態でmantleアップストリームがリストされていると、起動を拒否します。assume_role:mantleアップストリームはassume_roleを受け付けません。Mantle が処理するリクエストはmantleアップストリーム自身のauth認証情報で送信され、開発者ごとに帰属されません。
Claude Platform on AWS
Claude Platform on AWS は、aws-external-anthropic.<region>.api.aws で AWS インフラストラクチャ上のファーストパーティ Anthropic API を提供します。ファーストパーティのモデル ID を使用し、anthropic-beta ヘッダーを送信されたとおりに尊重し、count_tokens を提供するため、Bedrock 固有の変換は適用されません。anthropicAws プロバイダーには Claude Code v2.1.198 以降が必要です。以前のゲートウェイリリースはブート時にそれを拒否します。
同じプラットフォームのクライアント側デプロイについては、Claude Code on Claude Platform on AWS を参照してください。ゲートウェイ側のアップストリーム:
aws-external-anthropic で SigV4 リクエストに署名するため、Bedrock スコープの IAM ロールではそれを認可できません。auth.api_key の API キーは、SigV4 認証情報も設定されている場合に優先されます。空の auth ブロックは AWS SDK のデフォルト認証情報チェーンを使用します。これは Amazon Bedrock アップストリームが使用するのと同じチェーンです。
プラットフォームはファーストパーティのモデル ID を解決するため、組み込みカタログは
models: ブロックなしでそれにルーティングします。models: リストをキュレートする場合、エントリのキーを anthropicAws: とし、ファーストパーティの ID を指定します。
Google Cloud Agent Platform
同等のクライアント側セットアップについては、Claude Code on Google Cloud を参照してください。ゲートウェイ側のアップストリーム:auth ブロックは Application Default Credentials を使用します:GOOGLE_APPLICATION_CREDENTIALS、GCE メタデータ、または GKE Workload Identity。サービスアカウント JSON キーファイルはサポートされていますが、推奨されません。Workload Identity を使用するか、GCE または Cloud Run インスタンスにサービスアカウントをアタッチします。
リージョンエンドポイントの代わりに Google Cloud の Agent Platform のグローバルエンドポイントを使用するには、region: global を設定します。Google が各リクエストを利用可能なリージョンにルーティングするため、リージョンごとのモデル可用性を追跡する必要がありません。特定のリージョンを設定すると、すべてのリクエストがそのリージョンに固定されます。
Microsoft Foundry
クライアント側の Microsoft Foundry デプロイについては、Claude Code on Microsoft Foundry を参照してください。ゲートウェイ側のアップストリーム:use_azure_ad: true は DefaultAzureCredential を通じて解決します:AKS、ACI、または App Service 上の Managed Identity、Azure CLI、または環境認証情報。API キーは機能しますが、プロジェクト全体に適用され、自動的にローテーションしません。Microsoft Foundry のエンドポイントは resource: から導出されます。Azure Government などのソブリンクラウドの場合、オプションの base_url を設定して上書きします。
アップストリームリクエストの静的ヘッダー
ゲートウェイが 1 つのアップストリームに送信するリクエストに固定ヘッダーを追加するには、そのアップストリームでheaders: を設定します。プロバイダーの前段で実行するプロキシがヘッダーでトラフィックをルーティングまたは帰属させる場合に使用します。
headers: にはゲートウェイサーバーで Claude Code v2.1.277 以降が必要です。以前のゲートウェイはキーを見つけたときに起動を拒否します。すべてのレプリカをアップグレードしてからキーを追加し、以前のバージョンにロールバックする前にキーを削除します。
ヘッダーは base_url が名前を付けるサーバー、または base_url が設定されていない場合はプロバイダー独自のエンドポイントに送られます。プロキシがそれらを削除しない限り、プロバイダーもそれらを受け取ります。
この例は、upstream-proxy.internal.example.com のプロキシを通じて provider: vertex アップストリームに到達します。プロキシが読み取る x-source ヘッダーを設定し、PROXY_TOKEN 環境変数からのトークンを x-proxy-token として送信します:
true、または false を引用符で囲んで、YAML がそれをテキストとして読むようにします。
シークレットを設定ファイルから外すには、シークレット展開を使用して、${VAR} で環境変数から、または ${file:/path} でファイルから値を読み込みます。空の値に解決する ${VAR} はゲートウェイの起動を停止します。
headers: はすべてのプロバイダーで機能し、各アップストリームは自身のヘッダーのみを送信します。
ゲートウェイがアップストリームに送信するすべてのリクエストがそれらを含むわけではありません:
AWS SigV4 でリクエストに署名する Amazon Bedrock または Claude Platform on AWS アップストリームでは、これらのヘッダーは署名の一部であるため、プロキシはそれらを変更せずに通す必要があります。
ゲートウェイが予約する名前を使用すると、ゲートウェイは起動を拒否し、起動エラーにそのヘッダーの名前が表示されます。予約名には以下が含まれます:
authorizationとx-api-keyhost、content-type、およびuser-agentanthropic-、x-goog-、x-amz-、またはx-amzn-で始まる任意の名前
複数のアップストリーム
同じプロバイダーは異なるname: で複数回表示できます。これは異なるリージョン、異なるアカウント(異なる認証情報チェーン経由)、プロビジョニングされたスループット対オンデマンド、およびクロスプロバイダーフォールバックをカバーします。
ゲートウェイはアップストリームを順に試みます。5xx、429、401、403、404、タイムアウト、および欠落エンドポイント(501)がフェイルオーバーします。他の 4xx はフェイルオーバーしません。
429 はアップストリームごとの容量であるため、プロビジョニングされたスループット(PT)の枯渇はオンデマンドにフェイルオーバーします。アップストリームで forward_user_identity: true を設定する場合、開発者のメールを含むリクエストへの 429 は代わりにユーザーごとの拒否となり、フェイルオーバーしません。
すべてのリクエストは最初のアップストリームで開始されます。リクエストは、それより前のすべてのアップストリームが失敗したか、要求されたモデルを提供しない場合のみ、後のアップストリームに到達します。
ゲートウェイは失敗したアップストリームの記録を保たないため、アップストリームがダウンしている間、それに到達するすべてのリクエストはそれを試み、失敗するのを待ってから先に進みます。
Anthropic API アップストリームの場合、timeouts.upstream_ttfb_ms がダウンしたアップストリームでの待機を制限します。その設定は他のプロバイダーには適用されず、ゲートウェイはアップストリームが応答を開始するまで最大 1 時間待機します。
404 はアップストリームごとのモデル可用性であるため、モデルを有効にしていないアップストリームは、それを提供する後のアップストリームをブロックしません。要求されたモデルを解決できないアップストリームはネットワークラウンドトリップなしでスキップされます。
この例は、プロビジョニングされたスループットの Amazon Bedrock 割り当てを最初にルーティングし、オンデマンドと 2 番目のアカウントにオーバーフローし、最後に Anthropic API にフォールバックします:
クラウドプロバイダー間、または直接 Anthropic API へのフェイルオーバーは、リクエストに適用される契約、地理、およびその他の条件を変更します。
CLI は、どのアップストリームが特定のリクエストを処理するかに関わらず、ゲートウェイに同じ機能ゲーティングを適用するため、フェイルオーバーによってアップストリームが拒否する本体フィールドが送信されることはありません。
オプションセクション
admin
オプション。/v1/organizations/spend_limits を有効にします。これは Anthropic のパブリック Admin API をミラーリングし、/v1/messages でデベロッパーごとの支出強制を行います。キャップの設定と強制方法については 支出制限 を参照してください。このセクションでは、この機能をオンにしてチューニングする gateway.yaml キーについて説明します。
enforcement
enforcement ブロックは、ストアが利用できない場合に支出制限チェックがどのように動作するかを制御します。
pricing
pricing ブロックは、支出メーターに USD リスト価格の代わりに請求する内容を指示するため、キャップと /effective は契約レートを反映します。金額は USD のままで、請求書ではなく見積もりです。2 つの前提条件があります:
- ゲートウェイサーバー上の Claude Code v2.1.227 以降。以前のバージョンはブート時に不明なキーを拒否します。
admin:ブロック、または v2.1.268 以降では、少なくとも 1 つのポリシーを持つmanaged:ブロック。pricingが設定されていて、どちらのブロックもない場合、それを読むものがないため、ゲートウェイは起動を拒否します。
メーターが上書き行をどのようにマッチングするか:
- 行は、
upstream(upstreams[].name)がmodelに対して処理するリクエストのリスト価格を置き換えます。これには、より高い fast mode レートも含まれるため、fast リクエストと標準リクエストは同じ 4 つのレートでメーターされます。 claude-sonnet-4-6などの組み込み ID(models[].idと同様にマッチング)は、メーターがそのモデルとして価格設定するすべての日付付き形式、地域の Amazon Bedrock 形式、または Google Cloud の Agent Platform 形式をカバーします。エイリアスや推論プロファイル ARN などの他の文字列は、クライアントが送信した ID または上流に送信された文字列と大文字小文字を区別せずにマッチングします。- 行が重複する場合、メーターは最初の行ではなく最も具体的な行を選択します:
modelが上流に送信された正確なモデル文字列である行、次にクライアントが送信した正確な ID とマッチングする行、次に組み込みモデルを指定する行。 - 不明な上流名はブート失敗を引き起こし、1 つの上流に対して同じモデルを指定する 2 つの行も同様です(1 つの組み込みモデルの 2 つの表記を含む)。ゲートウェイはブート時に、リクエスト可能なモデルが使用できない行について警告します。
- Web 検索リクエストは $0.01 のリスト価格のままです。乗数はそれらにも適用されます。
価格をマークアップする
ゲートウェイサーバー上の v2.1.271 以降では、multiplier を 1 より上、最大 10 まで設定して、内部チャージバックレートなど、プロバイダーが請求する以上にメーターできます。この例は、すべてのリクエストを価格の 120% でメーターします:
admin: ブロックを使用すると、マークアップは支出制限にも適用されます。メーターは価格の 120% をカウントするため、デベロッパーはキャップに早く到達します。ゲートウェイはブート時に、そのことを示す警告をログに記録します。
乗数は、上流プロバイダーがリクエストに請求する内容を変更しません。
ゲートウェイが サインイン済みクライアントにレートを送信 する場合、デベロッパーがマークアップを確認するには Claude Code v2.1.271 以降が必要です。以前のクライアントは 1 より上の multiplier を無視し、それなしでコストを表示します。
v2.1.271 より前のゲートウェイサーバーは、multiplier を 1 より上に設定した場合、起動を拒否します。
サインイン済みクライアントにレートを送信する
ゲートウェイサーバー上の v2.1.268 以降では、ゲートウェイはpricing からのレートを、提供する managed ポリシーに modelPricing 管理設定としても入れます。ポリシーにマッチするデベロッパーは、/usage、ステータスライン、OpenTelemetry で、各モデル ID を処理する最初の上流の pricing レートを確認できます。ポリシーにマッチしないデベロッパーは管理設定を受け取らないため、その数字はリスト価格のままです。クライアントは Claude Code v2.1.242 以降で設定を適用します。
- ゲートウェイが追加するもの:ポリシーの
cliブロックが既にmodelPricingを設定していない限り、ゲートウェイはmultiplierと、クライアントがリクエストできるすべてのモデル ID について、その ID を処理する最初の上流の上書き行を追加します。フェイルオーバー上流のみが請求するレートはゲートウェイに留まります。 - 1 つのポリシーをオプトアウトする:そのポリシーの
cliブロックでmodelPricingを{}に設定すると、そのデベロッパーはリスト価格のままです。 - ポリシー独自のレートを保持する:
cliブロックが独自のmultiplierまたはoverridesでmodelPricingを設定するポリシーは、そのmodelPricing全体を保持し、ゲートウェイはそれに独自のレートを追加しません。
models
models ブロックはオプションの管理者キュレーション済みモデルリストで、/v1/models で提供され、上流ごとにモデル ID を変換するために使用されます。これは、米国以外の Amazon Bedrock リージョン、Amazon Bedrock プロビジョニング済みスループット ARN、および Microsoft Foundry のデプロイ名に必須です。
upstream_model の各キーは、設定された上流の name と一致する必要があります。デフォルトはプロバイダー名です。キーが上流と一致しない場合、ブート失敗を引き起こすため、使用しないプロバイダーの行は省略してください。
managed
managed ブロックは、IdP グループまたはメールドメインをキーとしたロールベースのアクセスポリシーを定義します。ポリシーは順番に評価され、最初のマッチが選択され、match: {} キャッチオール基盤にマージされます。これらは GET /managed/settings でユーザーごとに ETag/304 キャッシング付きで提供されます。
match: {} キャッチオール(慣例的に最後にリストされる)は基盤層として扱われます。他のすべてのポリシーは、設定しないキーをキャッチオールから継承するため、ロールごとのエントリは組織のデフォルトと異なる内容のみをリストすれば済みます。マージルールはキータイプに依存します:
- 許可リスト:
availableModelsとpermissions.allow。特定のポリシーのリストは基盤のリストを完全に置き換えます。 - 拒否リストとフック配列:
permissions.deny、permissions.ask、disabledMcpjsonServers、deniedMcpServers、blockedMarketplaces、およびすべてのhooksイベントタイプ配列。これらは基盤とポリシーの和集合を取るため、組織全体の拒否または監査フックがロールごとの上書きで誤って削除されることはありません。 - レコード型キー:
env、modelOverrides、skillOverrides。これらは浅くマージされるため、ロールごとのenvブロックは設定するキーを上書きし、残りを基盤から継承します。
availableModels は /v1/messages でサーバー側でも強制されるため、拒否されたモデルはクライアントが送信する内容に関わらず 400 を返します。空のリストはすべてのモデルを拒否します。このチェックは、デベロッパーがモデルを選択する前にセッションが開始するモデルにも適用されるため、ポリシーが許可するモデルでセッションを開始 してください。
ゲートウェイはリクエストを中継する前に model 値自体を検証するため、不正な形式の値は上流に到達しません。2 つの場合に 400 でリクエストを拒否します:
- 値が欠落しているか空の場合、ゲートウェイはメッセージ
model is requiredでリクエストを拒否します。このチェックには Claude Code v2.1.228 以降を実行しているゲートウェイが必要です。 - 値が存在しているが文字列ではない場合、ゲートウェイはメッセージ
model must be a stringでリクエストを拒否します。Claude Code v2.1.221 以降を実行しているゲートウェイが必要です。
認証されたユーザーがどのポリシーにもマッチしない場合、ゲートウェイのデフォルトが適用されます。これはカタログ内のすべてのモデルが利用でき、管理設定がないことを意味します。確実にデフォルトポリシーを適用したい場合は、最後に
match: {} キャッチオールを追加してください。
ゲートウェイは独自のユーザーディレクトリを保持しません。ユーザーの IdP トークンから各リクエストを認可し、トークンの
groups クレームからグループメンバーシップを読み取り、それに対してポリシーを評価します。列挙するロスターはなく、事前作成するアカウントもなく、したがって SCIM エンドポイントもありません。SCIM が同期する先がないためです。ユーザーとグループのライフサイクル管理は、信頼できる情報源である IdP のネイティブ SCIM プロビジョニングまたは専用のアイデンティティガバナンスプラットフォームで実行してください。そこで管理されるメンバーシップとプロビジョニング解除は、トークンを通じてゲートウェイに自動的に反映されます。Claude アカウント自体の SCIM プロビジョニングが必要な場合、それは Claude for Enterprise の機能です。2 つの伝播タイミングがあります:- ポリシーの内容:ポリシーを編集して再デプロイすると、接続された Claude Code クライアントの次の管理設定ポーリング時(1 時間以内)に反映されます。ただし 次の起動時にのみ適用される変更 は除きます。
- グループメンバーシップ:ユーザーのグループメンバーシップを変更すると、どのポリシーがそのユーザーにマッチするかが変わります。これは次のセッション再発行時、つまり次のサイレントリフレッシュ時に有効になり、
session.ttl_hoursが上限となります。
ポリシーが許可するモデルでセッションを開始する
availableModels に Claude Code のデフォルトモデルが含まれていない場合、デベロッパーが /model などでリストにあるモデルを選択するまで、セッションは 400 レスポンスを受け取ります。ゲートウェイセッションでは、デフォルトは opus エイリアスが解決される Opus モデルであり、availableModels だけではこれは変わりません。
これを解決するには、同じ cli ブロックで enforceAvailableModels: true を設定し、リストに含まれるエントリの種類を確認します:
sonnetなどのエイリアス、またはclaude-sonnet-4-6などの組み込み ID:セッションはそれらのモデルのいずれかで開始し、/modelの Default オプションはそのモデルに解決されます- リストにエイリアスも組み込み ID もない場合:セッションは引き続き組み込みのデフォルトで開始する可能性があるため、そのポリシーの
cliブロックでmodelもリスト内の ID のいずれかに設定してください
models で定義された 1 つのカスタム ID をリストし、その ID でセッションを開始します:
ゲートウェイをブート時に停止させる matcher 値
ブート時に、ゲートウェイはすべてのポリシーのmatch ブロックと admin_groups リストをチェックします。以下の値のいずれかがあると、ゲートウェイはそのフィールドを示すエラーで停止します:
- 空の
groupsリスト groupsまたはadmin_groupsの空のエントリ- 空の
email_domain @、空白、またはコンマを含むemail_domain。ゲートウェイはこのチェックの前に値をトリミングし、先頭の@を 1 つ削除します。example.comのように、ドメインのみを 1 つ記述してください。
- 空の
email_domain:ゲートウェイはドメインチェックをスキップしたため、空のemail_domainを持ちgroupsリストのないポリシーはすべての認証されたユーザーにマッチしました - 空の
groupsリスト:ポリシーは誰にもマッチしませんでした @、空白、またはコンマを含むemail_domain:ポリシーは誰にもマッチしませんでしたgroupsまたはadmin_groupsの空のエントリ:そのユーザーの IdPgroupsクレームにも空のエントリが含まれている場合にのみ、エントリはユーザーにマッチしました。admin_groupsでは、そのマッチにより管理者アクセスが付与されました。admin_groupsリストに空のエントリが一度も含まれていなかった場合、この方法で管理者アクセスを得た人はいません。
cli と code のどちらを選ぶか
.env ファイルの読み取りを拒否するルールなど、ポリシーの Claude Code の設定は、cli または code キーの下のブロックに記述します。code が推奨されるキーで、cli は従来のキーです。どちらのキーも同じ内容を受け付けます。キーによって、設定が適用される場所が決まります。
cli: ターミナル、VS Code と JetBrains の拡張機能、Agent SDK。cliの下では、Claude Desktop の Code タブには 派生した設定 が適用されるため、Read(./.env)のようなスコープ付きルールはそこでのユーザーの操作を止めません。code: 同じ場所に加え、Claude Desktop の Code タブもカバーできます。
cli を使用するファイルは従来どおり動作し、desktop キーを持つポリシーで cli を検出したゲートウェイは、起動時に警告を出しますが起動は続行します。設定が Code タブにも適用されるように、code に切り替えてください。
切り替える前に、Code タブで code 設定を適用する をお読みください。設定がそこで適用されるには、ポリシーに desktop キーが必要で、ユーザーのマシンでのセットアップも必要です。また、Claude Desktop では Web 検索がオフになります。
次のポリシーは、拒否ルールを code の下に置き、空の desktop キーを持っています。
serve_to_desktop の行をすべて削除してください。説明で cli ブロックに言及している箇所では、code ブロックを使用してください。
cli に何を入れるか
各 code または cli の値は、完全な Claude Code の managed-settings.json ドキュメントであり、MDM や /etc/claude-code/managed-settings.json でデプロイするものと同じスキーマを、ここでは YAML で表現したものです。CLI は配信されたドキュメントを、ユーザー設定やプロジェクト設定より上位の管理レベルで、サーバー管理設定の代わりに適用します。そのため、policyHelper や wslInheritsWindowsSettings など、OS レベルのポリシーソースに限定された 設定は無視されます。
ゲートウェイはブート時に各ドキュメントを CLI の設定スキーマに対して検証するため、認識されないトップレベルキーがあるとブートが失敗し、違反するすべてのキーを示すエラーが表示されます。スキーマの意図的にオープンな部分は引き続き任意の値を受け入れます。新しいクライアントが、ゲートウェイのスキーマが認識しないエントリを認識する可能性があるためです。これらのオープンキーには env、pluginConfigs、permissions の下にネストされたキーが含まれます。
検証はゲートウェイのインストール済みバージョンにバンドルされたスキーマを使用するため、新しい Claude Code リリースで導入されたトップレベル設定キーを管理設定に入れるには、まずゲートウェイをアップグレードする必要があります。新しいポリシーはロールアウトする前に 1 つのクライアントでスモークテストしてください。
完全なキーリファレンスは Claude Code 設定 にあります。オペレーターが最初に使うことの多いキー:
これらの設定はネットワーク経由で届くため、CLI は以下の設定を適用する前に、各デベロッパーにセキュリティ承認ダイアログを表示します:
hooks- プロキシやベース URL の変数など、デベロッパーの承認が必要な
env変数 apiKeyHelperやstatusLineなどのシェル実行設定- サンドボックスバイナリ設定
sandbox.bwrapPath、sandbox.socatPath、sandbox.ripgrep sandbox.network.tlsTerminateやプロキシポート設定など、トラフィックをインターセプトしたり、認証情報を注入したり、分離を弱めたりするサンドボックス設定。セキュリティ承認ダイアログ にすべてがリストされています。
env 変数の一部をデベロッパーに承認ダイアログを表示せずに適用します。その他の配信変数は、有効になる前にデベロッパーの承認が必要な場合があります。空でないプロキシ、ベース URL、または OTEL_EXPORTER_OTLP_ENDPOINT の値は常に承認が必要です。配信変数に承認が必要な場合、ダイアログにはその変数名が表示されます。
詳細は 環境変数と承認ダイアログ を参照してください。配信値によって承認が必要かどうかが決まる 4 つのプライバシートグルについても記載されています。v2.1.218 より前では、Claude Code がデベロッパーに確認せずに適用する変数が少なかったため、より多くの配信変数でダイアログが表示されていました。
ゲートウェイの テレメトリ 設定は OTEL_EXPORTER_OTLP_ENDPOINT をプッシュするため、telemetry.forward_to を設定すると各インタラクティブクライアントでダイアログが表示されます。このダイアログは、侵害されたゲートウェイや悪意のあるゲートウェイからデベロッパーのマシンを保護するものであり、デベロッパーから組織を保護するものではありません。
claude -p、Agent SDK セッション、Claude Desktop の Code タブのセッションなどの非インタラクティブ実行では、ダイアログを表示できません。その実行に限りプッシュされた設定を適用し、承認済みとして記録しないため、開発者の次のインタラクティブセッションでは引き続きダイアログが表示されます。
デベロッパーが拒否した場合、Claude Code はポリシーを適用せずにそのセッションを終了します。そのため、新しいフックやダイアログが表示される env 変数を広範なポリシーにプッシュすると、マッチするすべてのデベロッパーのインタラクティブセッションでダイアログが表示されます。実行中のインタラクティブセッションでは次の 1 時間ごとのポーリング時に表示され、それ以外の場合はデベロッパーの次のインタラクティブ起動時に表示されます。
cli キーは以前のリリースでは settings という名前で、ゲートウェイは引き続きその表記をエイリアスとして受け付けます。新しいデプロイでは code を使用してください。
ターミナルセッションのコンテキストウィンドウ
/login でサインインしたターミナルセッションは、Opus 4.7 以降、Sonnet 5 以降、および Fable モデルで 1M のコンテキストウィンドウを使用します。モデル ID に [1m] サフィックスは不要で、セッションは約 967K トークンで圧縮されます。デベロッパーのマシン上の Claude Code v2.1.287 より前では、Claude Code はモデル ID が [1m] で終わらない限り、Opus と Fable モデルのウィンドウを 200K として扱っていました。
代わりにターミナルセッションを 200K の境界で圧縮させるには、ポリシーの env で 自動圧縮ウィンドウ を設定します:
[1m] で終わるモデル ID を含むすべてのモデルに適用されます。
代わりに 1M コンテキストをオフにするには、同じ env ブロックで CLAUDE_CODE_DISABLE_1M_CONTEXT: "1" を設定します。すると Claude Code はすべてのモデルのウィンドウを 200K として扱います。インタラクティブセッションでは、この変数が有効になる前に、各デベロッパーが 承認ダイアログ でこれを承認します。
ポリシー内の MCP サーバー
ポリシーがマッチする Claude Code クライアントに MCP サーバーを提供するには、そのポリシーのcli ブロックで managedMcpServers を設定します。ゲートウェイサーバーとクライアントの両方で Claude Code v2.1.259 以降が必要です。
ゲートウェイはブート時に Claude Code がクライアントで適用するのと同じルール で各エントリをチェックし、エントリがチェックに失敗した場合は起動を拒否してそのエントリを示します。
gateway.yaml に ${VAR} 参照を記述した場合、ゲートウェイはエントリチェックを実行する前に、ブート時に シークレット展開 を通じて自身の環境から解決します。そのため、マッチするすべてのクライアントはリテラル値を受け取り、それを読むことができます。提供されるサーバーのヘッダーに関するガイダンス は展開後の値に適用されます。
ゲートウェイは cli ブロック内の .mcp.json 表記 mcpServers を拒否し、そのブートエラーでは使用すべきキーとして managedMcpServers を示します。v2.1.259 より前では、ゲートウェイは cli ブロック内のすべての MCP サーバー定義を拒否していました。
Claude Desktop オーバーレイ
組織が Claude Desktop もデプロイしている場合、同じゲートウェイが両方のクライアントに対応します。Claude Desktop の 管理設定 のbootstrapUrl を <listen.public_url>/user/bootstrap に向けてください。Claude Desktop はその URL から OAuth 発行者を導出し、このゲートウェイに対して同じデバイスコードサインインを実行し、レスポンスから設定を取得します。
ゲートウェイサーバー上の Claude Code v2.1.203 以降と、明示的なオプトインが必要です:ユーザーにマッチするポリシーが
desktop キーを持たない限り、/user/bootstrap は 404 を返します。空の desktop: {} でポリシーをオプトインでき、match: {} 基盤層の desktop キーはそれを継承するすべてのポリシーをオプトインします。監査ログは各リクエストを desktop_bootstrap.serve または desktop_bootstrap.denied として記録します。desktop を完全に省略してください。その場合、ゲートウェイはすべてのユーザーに対して /user/bootstrap から 404 を返します。
ゲートウェイは、ブートストラップレスポンスの大部分を、一致したポリシーの cli または code ブロックと、トップレベルのゲートウェイ設定から導出します。
-
availableModelsからのモデルリスト。各モデルの 1M コンテキストオプションについては Claude Desktop の拡張コンテキスト を参照してください -
ツール名のみの
permissions.denyエントリからの無効化されたツール。ポリシーのdesktopブロックでdisabledBuiltinToolsを設定した場合、ゲートウェイは指定した値と導出されたリストの和集合を提供します。そのため、この方法でさらにツールを無効化できますが、permissions.denyで無効化したツールを再度有効化することはできません -
sandbox.network.allowedDomainsからの出力許可リスト。ポリシーのdesktopブロックでcoworkEgressAllowedHostsを設定した場合、ゲートウェイは導出されたリストの代わりにその値を使用します -
ゲートウェイ自体を指す OTLP エンドポイントと、サインインしたユーザーのアイデンティティ属性。ゲートウェイはそのエンドポイントで受け取ったエクスポートを
forward_toの宛先にリレーします。telemetry.forward_toとlisten.public_urlの両方を設定した場合に、エンドポイントと属性が含まれます。 Claude Desktop はすべてのシグナルを 1 つのエンコーディングでエクスポートします:http/protobuf、またはポリシーのenvでOTEL_EXPORTER_OTLP_PROTOCOLまたはそのシグナルごとのバリアントのいずれかをhttp/jsonに設定した場合はhttp/jsonです。ゲートウェイサーバー上の Claude Code v2.1.261 より前では、レスポンスは常にhttp/jsonを設定していたため、protobuf のみを受け入れるコレクターは Claude Desktop のエクスポートを拒否していました
desktop ブロックで disabledBuiltinTools、coworkEgressAllowedHosts、または Claude Desktop 独自の managedMcpServers 設定を設定するには、ゲートウェイサーバー上の Claude Code v2.1.232 以降が必要です。Claude Desktop の managedMcpServers はオブジェクトではなく配列値を取ります。
ゲートウェイは、hooks や Bash(npm *) のようなスコープ付き権限ルールなど、Claude Desktop に相当するものがないキーをブートストラップレスポンスから省略します。
ポリシーが code キーの下に持つ Claude Code 設定は、次のすべてが成り立つ場合に Claude Desktop の Code タブで適用されます。
- ポリシーに
desktopキーもあること(空のdesktop: {}でもかまいません) - Claude Desktop がバージョン 2.9939.2 以降であること
- マシン上の Claude Code 管理設定が このゲートウェイを指定している こと
- そのマシンが、プライベートネットワーク上で HTTPS 経由でゲートウェイに到達できること
cli を code に名前変更する前に、それらのマシンに クライアント側の管理設定 をデプロイしてください。最初の 2 つの条件が成り立ち、最後の 2 つのいずれかが成り立たない場合、ポリシーに一致するユーザーには次のいずれかの結果になります。
- HTTPS 経由で、Claude Desktop に Claude Code v2.1.296 以降がバンドルされている場合: Code タブは開始されず、ユーザーのプロンプトへの応答でその理由が示されます
- HTTPS 経由で、Claude Desktop にそれより前のバージョンがバンドルされている場合: Code タブは
code設定なしで開始され、セッション内ではそのことは何も示されません - プレーン HTTP 経由の場合: Claude Desktop にどのバージョンがバンドルされていても、Code タブは
code設定なしで開始されます
/managed/settings に独自の 404 で応答する場合も、4 つの条件をすべて満たすマシンであっても、Code タブは code 設定なしで開始されます。
desktop キーを持つポリシーで、設定を含む code ブロックがあると、Cowork、Chat、Code タブで WebSearch ツールがオフになります。MCP サーバーについては、managedMcpServers が適用される場所 を参照してください。
Claude Desktop の設定を直接指定するには、cli と並べてオプションの desktop ブロックを追加します。Claude Desktop の 管理設定リファレンス にある設定をフラットなキー名で記述してください。bootstrapUrl など、Claude Desktop が MDM またはローカルファイルからのみ読み取るキーは省略してください。ゲートウェイはブート時にそれらを拒否します。
この例では、eng-contractors グループに対して、その cli 設定と並べて 3 つの Claude Desktop キーを設定します:
desktop ブロックを Claude Desktop 自体が使用する設定スキーマに対して検証するため、間違いは接続されたすべてのデスクトップに届くのではなく、ゲートウェイ起動時にキーを示すエラーとして表面化します。ブロックに以下が含まれる場合、ゲートウェイはブート時に失敗します:
- 不明なキー
- 空の値やネストされたエントリ内のサブキーのスペルミスなど、Claude Desktop が拒否するか黙って破棄する値を持つ認識済みのキー。v2.1.260 より前では、ゲートウェイは
managedMcpServersまたはorgPluginSettingsエントリのネストされたオブジェクト内のスペルミスのあるフィールドを、ブート時に失敗させずに黙って破棄していました。 - ゲートウェイ自身が計算するキー:推論接続、モデルリスト、OTLP リレー。これらは
upstreams、models、telemetryセクションのforward_toで設定してください。 - 現在のキーのレガシーエイリアス。ブートエラーでは、ゲートウェイは記述すべき正規のキーを示します。
transport のない managedMcpServers エントリなど、非推奨の値やエントリ形式を使用した場合、ゲートウェイは起動し、代替を示す警告をログに記録します。
v2.1.232 より前では、ゲートウェイは chatTabEnabled や disableAutoUpdates など 11 個の機能ゲートキーの固定リストを受け入れ、その他のすべてのキーをブート時に拒否していました。v2.1.227 より前では、ゲートウェイは chatTabEnabled と chatAdvancedFileAnalysisEnabled もブート時に拒否していました。
ゲートウェイは cli ブロックと同様に、インストール済みバージョンにバンドルされたスキーマに対して desktop ブロックを検証します。新しい Claude Desktop リリースで導入された設定を配信するには、まずゲートウェイをアップグレードしてください。例えば、userPluginMarketplacesEnabled と userPluginUploadsEnabled には、ゲートウェイサーバー上の Claude Code v2.1.260 以降と、メンバーのマシン上の Claude Desktop 1.37937.0 以降が必要です。
blockReadsOutsideWorkingDirectories、disableBypassPermissionsMode、configRecheckIntervalMinutes、sshClientPath には、ゲートウェイサーバー上の Claude Code v2.1.281 以降が必要です。microsoftAuthBroker の required 値と、Microsoft 365 managedMcpServers エントリの continuousAccessEvaluation フィールドも同様です。required 値より前の Claude Desktop リリースはそれを disabled として読み取るため、すべてのメンバーの Claude Desktop がサポートしてから required を設定してください。Claude Desktop の 管理設定リファレンス には、各キーを最初に読み取るリリースがリストされています。
ポリシーの desktop ブロックで orgPluginSettings を設定した場合、ゲートウェイは Claude Desktop 1.15200.0 以降が読み取る配列形式で提供します。古いデスクトップは配列を無視し、プラグインツールポリシーを強制しないため、それに依存する前にメンバーを 1.15200.0 以降に更新してください。
ゲートウェイは、ポリシーの cli ブロックを基盤から補完するのと同じ方法で、ポリシーの desktop ブロックが設定していないキーを match: {} キャッチオールの desktop ブロックから補完します。基盤とロールポリシーの両方で disabledBuiltinTools または builtinToolPolicy を設定した場合、ゲートウェイは基盤の制限を維持します:
disabledBuiltinTools:ゲートウェイは基盤のリストとポリシーのリストの和集合を使用しますbuiltinToolPolicy:基盤でツールをallow以外の値に設定した場合、ロールポリシーで同じツールにallowを設定しても、ゲートウェイはその値を維持します
banner などのネストされたオブジェクトを丸ごと置き換えるため、ロールポリシーで banner.text を設定すると、ゲートウェイは基盤の banner.backgroundColor を破棄します。
変更したポリシーでゲートウェイを再デプロイした後、Claude Desktop はほとんどの設定を次回の起動時にのみ適用します:
- 閉じている場合:Claude Desktop は起動時にブートストラップレスポンスを取得するため、変更は次回の起動から適用されます
- 開いている場合:Claude Desktop はデフォルトで 10 分ごとにレスポンスの変更を確認し、一部の設定は再起動なしで適用します。
skillCreationEnabledなどのその他の設定については、ユーザーのサイドバーに Relaunch Claude Desktop カードが表示され、アプリを再起動するまで以前の設定が維持されます。デフォルトでは 24 時間後に、Claude Desktop は再起動ダイアログを表示し、2 分間操作がないと自動的に再起動します
desktop ブロックで relaunchEnforcementHours を設定します。ゲートウェイサーバー上の Claude Code v2.1.260 以降と、メンバーのマシン上の Claude Desktop 1.40609.0 以降が必要です。0 にすると、Claude Desktop が変更を検出するとすぐにダイアログが表示されます。
Claude Desktop の拡張コンテキスト
ゲートウェイから Claude Desktop に提供している場合、そのモデルピッカーは、1M のコンテキストウィンドウで実行できるリスト内の各モデルについて 1M コンテキストオプションを提供します。これには Claude Opus 4.6 以降、Claude Sonnet 4.6 以降、および Fable モデルが含まれます。このオプションはモデルの[1m] バリアントであり、拡張コンテキスト で説明されています。ゲートウェイサーバー上の Claude Code v2.1.284 以降が必要です。
次の場合、models エントリには 1M オプションが表示されません:
- エントリを処理できる上流が、1M をサポートしないモデルにエントリをマッピングしている場合。ゲートウェイがフェイルオーバー時にのみ到達する上流も含みます
idもupstream_modelの値も Claude モデルを指定していない場合。例えば、アプリケーション推論プロファイル ARN にルーティングされるカスタムエイリアスなど
- ユーザーを 1M オプションで開始する:ポリシーの
desktopブロックでmodelPrefer1mContext: trueを設定します。まだモデルを選択していないユーザーは、リストの最初のモデルに 1M オプションがある場合、1M オプションで開始します。既にモデルを選択したユーザーはその選択を維持します。 - オプションを手動で提供する:ゲートウェイサーバーが v2.1.284 より古いバージョンを実行している場合や、エントリが Claude モデルを指定していない場合に使用します。
modelsにモデルを 2 回リストします。1 回はプレーンな ID で、もう 1 回は[1m]を付加して、どちらも同じupstream_modelマップを指定します。Claude Desktop はこのペアを 1M オプション付きの 1 つのモデルとして表示します。ゲートウェイは[1m]エントリをチェックせずに提供するため、上流が 1M で処理するモデルに対してのみ追加してください。
cli キーの下の env ブロックで CLAUDE_CODE_DISABLE_1M_CONTEXT: "1" を設定します。id が [1m] で終わるエントリもリストしていた場合、ゲートウェイは引き続きそれを提供するため、そのエントリも削除してください。
この変数は、ポリシーがマッチするデベロッパーのターミナルセッションにも届きます。そこで何が変わるかについては、拡張コンテキスト を参照してください。
他の管理ソースとの優先順位
デバイスに MDM で配信されたポリシーやローカルのmanaged-settings.json もある場合、ゲートウェイで配信された設定が最優先になります。管理設定ページの 管理層内の優先順位 には、ローカルソースが適用される場合と、サンドボックスロックキー、forceRemoteSettingsRefresh、変数ごとの env マージなど、どのソースを選択したかに関わらず Claude Code がすべての管理ソースから読み取るキー が記載されています。MDM プロファイルまたは管理設定ファイルで設定された policyHelper は、ゲートウェイが設定を配信しない場合にのみ実行されます。そのエントリには、その出力が何を置き換えるかが記載されています。
Claude Desktop などの埋め込みホストは、SDK の managedSettings オプションを通じてポリシーを提供できます。埋め込みホストからの親設定 には Claude Code がそれを適用する場合が、親設定を制限する には allowManaged*Only ロックがなくても適用される許可方向の設定がリストされています。
ゲートウェイポリシーは、非インタラクティブな claude -p 実行や Agent SDK によって生成されたセッションを含め、マシン上のすべての Claude Code 呼び出しに適用されます。起動時にゲートウェイに到達できない場合、サインイン済みセッションはポリシーなしで実行されるのではなく、エラーで終了します。
telemetry
CLI はメトリクス、ログ、および有効な場合はトレースをゲートウェイに送信し、ゲートウェイはそれらをそのまま各設定済みの宛先にリレーします。エクスポートは HTTP 上の OpenTelemetry Protocol(OTLP)を使用します。リレーをスキップしてセッションからコレクターに直接エクスポートするには、ポリシーでコレクターを指定 します。CLI が出力するメトリクスとイベントについては 使用状況の監視 を参照してください。
/login でサインインしたセッションでは、CLI は各エクスポートに、ゲートウェイが発行した JWT から読み取った認証済みユーザーの ID、つまり user.id、user.email、user.groups 属性を付与します。そのため、開発者側の設定なしで、開発者ごとのコストと使用量の帰属が機能します。開発者がサインインする前に Claude Code がログに記録したイベントには、この ID は含まれません。開発者のグループが変更されたときにどの属性がそれに追従するかについては、セッション中のグループの変更 を参照してください。
ゲートウェイでサインインした Claude Desktop と Cowork のセッションは、テレメトリに enduser.id とともに user.email と user.groups を付与するため、user.email または user.groups に対する 1 つのクエリでターミナル、Desktop、Cowork の使用状況をカバーできます。user.groups はコンマ区切りの IdP グループリストです。
Desktop と Cowork のテレメトリには enduser.sub も含まれます。これはアイデンティティプロバイダーがユーザーに対して発行する sub クレームであり、ユーザーのメールが変わっても同じままです。ターミナルセッションは同じ値を user.id として付与するため、enduser.sub をターミナルの user.id とマッチングするクエリで、1 人のユーザーのターミナル、Desktop、Cowork の使用状況をまとめてカバーできます。Desktop と Cowork のエクスポートでは、user.id はサブジェクトではなく匿名の識別子です。
Claude Code からのすべての OpenTelemetry データと同様に、これらの属性は組織が設定した宛先にのみ送信され、Anthropic には送信されません。
ユーザーのグループリストがパーセントエンコード後に 255 文字を超える場合、またはグループ名にコンマや等号が含まれる場合、ゲートウェイは切り詰めるのではなく、そのユーザーの Desktop と Cowork のテレメトリから user.groups を除外します。そのユーザーのターミナルセッションには引き続き完全なリストが含まれます。
サブジェクトがパーセントエンコード後に 255 文字を超える場合、またはスペース、印字可能 ASCII 以外の文字、あるいは , ; = \ " % のいずれかを含む場合、ゲートウェイは enduser.sub を除外します。そのユーザーの Desktop と Cowork のテレメトリには他の属性が残ります。
Desktop と Cowork のテレメトリに user.email と user.groups を付与するにはゲートウェイサーバー上の Claude Code v2.1.265 以降が、user.groups には各デベロッパーのマシン上の Claude Desktop 1.24012 以降が必要です。
enduser.sub には、ゲートウェイサーバー上の Claude Code v2.1.274 以降が必要です。
forward_to URL は https:// を使用する必要があります。ただし、ゲートウェイ自身のループバックインターフェイス上のコレクターについては 1 つの例外があります:
http://localhost:<port>は設定検証を通過しますが、ゲートウェイの環境でCLAUDE_GATEWAY_ALLOW_LOOPBACK=1を設定しない限り、SSRF ガード がすべてのエクスポートをECONNREFUSED_SSRFでブロックしますhttp://127.0.0.1:<port>またはhttp://[::1]:<port>は、その変数が設定されていない限りブートが失敗します
HTTPS_PROXY が設定されている場合、ゲートウェイはそのプロキシを通じてエクスポートを送信します。
内部コレクターに直接到達するには、ホスト名、または .internal.example.com のような先頭にドットを付けたドメインで NO_PROXY に追加します。これにはゲートウェイサーバー上の Claude Code v2.1.277 以降が必要です。ゲートウェイがプロキシなしでコレクターに到達できることを確認してください。先頭にドットのないエントリは、その下の名前ではなく、その正確な名前のみにマッチします。CIDR 範囲はマッチしません。
プロキシのみの出力 がオンの場合は、代わりにプロキシでコレクターを許可してください。NO_PROXY エントリがあるとプロキシのみの出力がオフのままになるためです。
テレメトリは CLI ではデフォルトでオフです。telemetry.forward_to と listen.public_url の両方を設定すると、ゲートウェイは /managed/settings を通じて 6 つの環境変数をプッシュし、接続されたクライアントのテレメトリをオンにします:
CLAUDE_CODE_ENABLE_TELEMETRY=1OTEL_METRICS_EXPORTER、OTEL_LOGS_EXPORTER、OTEL_TRACES_EXPORTER。少なくとも 1 つのforward_to宛先がそのシグナルを有効にしている場合はotlpに、そうでない場合はnoneに設定されますOTEL_EXPORTER_OTLP_ENDPOINT=<public_url>OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
OTEL_RESOURCE_ATTRIBUTES もプッシュします。
ゲートウェイサーバー上の Claude Code v2.1.265 より前では、ゲートウェイは、どの宛先もオプトインしていないシグナルも含め、3 つのエクスポーターセレクターすべてを otlp としてプッシュしていました。
プッシュされるエンドポイントはパブリック URL から構築されるため、メトリクスとログにはデベロッパーやポリシーからの OTEL 設定は不要です。
/login でサインインしたデベロッパーは、独自の OTEL 設定でエクスポートをリダイレクトできません:
- ローカルで設定された変数:Claude Code はプッシュされた変数を管理層で適用するため、それぞれがデベロッパーがローカルで設定した値を上書きします。
- ローカルで設定されたエンドポイント:OTLP/HTTP エクスポートが有効な場合、ゲートウェイがテレメトリ変数をプッシュしたかどうかに関わらず、CLI はローカルで設定されたエンドポイントを無視します。ポリシーが コレクターをエンドポイントとして指定 しない限り、エクスポートはゲートウェイに送られます。
forward_to 宛先がない場合、ゲートウェイはそれを受け入れて破棄します。デベロッパーが既に Claude Code のテレメトリをいずれかのコレクターにエクスポートしている場合は、サインイン後もそのコレクターがデータを受け取り続けるように、それを forward_to 宛先として追加し、ログやトレースをエクスポートしている場合はそれらも有効にしてください。代わりにリレーをスキップするには、ポリシーでコレクターを指定 します。
トレース には、各クライアントで CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1 も必要です。ゲートウェイはこれをプッシュしないため、管理ポリシーの env ブロックで設定してください。デベロッパーは、プッシュされたエンドポイントで既に表示される同じ セキュリティ承認ダイアログ でこれを承認します。
トレースしたいグループのポリシーでのみ 1 に設定してください。これを設定しないポリシーは、マージルール に従い、match: {} キャッチオールポリシーが値を設定していればその値を継承します。デベロッパーがローカルで変数を設定してもグループのクライアントからトレースが送信されないようにするには、そのグループのポリシーで 0 に設定してください。
protobuf と JSON の両方の OTLP エンコーディングがリレーされ、OpenTelemetry 互換の任意のバックエンドを宛先として使用できます。
独自のラベルを追加する
ゲートウェイでサインインしたセッションのテレメトリにservice.namespace や deployment.environment.name などの固定ラベルを付けるには、telemetry.resource_attributes を設定します。各ラベルは OpenTelemetry のリソース属性であり、すべての宛先が同じラベルを受け取ります。
セッションがラベルを受け取るのは、telemetry.forward_to と listen.public_url も設定している場合のみです。この例では 2 つのラベルを追加します:
- 名前には文字、数字、
.、_、-のみを使用する - 名前は予約されていない。大文字小文字を区別せずに比較した場合、予約名は
user.、enduser.、identity.で始まるすべての名前と、service.name、service.version、claude.deployment_mode、host.arch、os.type、os.version、wsl.versionです - 値は空でない印字可能 ASCII で、スペースと
, ; = \ " %のいずれも含まない - 値はゲートウェイがパーセントエンコード後にカウントして最大 255 文字。そのため
/、:、@はそれぞれ 3 文字としてカウントされます - 値はテキストであるため、数値、
true、falseは引用符で囲む
telemetry.resource_attributes を設定するには、ゲートウェイサーバー上の Claude Code v2.1.281 以降が必要です。以前のゲートウェイはキーを見つけると起動を拒否します。キーを追加する前にすべてのレプリカをアップグレードし、以前のバージョンにロールバックする前にキーを削除してください。
/login でサインインしたターミナルセッションは、他の テレメトリ変数 とともにプッシュされる OTEL_RESOURCE_ATTRIBUTES としてラベルを受け取ります。ポリシーの env ブロックで OTEL_RESOURCE_ATTRIBUTES を設定した場合、そのポリシーがマッチするターミナルセッションはラベルの代わりにその値を受け取ります。Claude Desktop は、user.email やその他のアイデンティティ属性とともにゲートウェイからラベルを受け取ります。
Claude Code は各ラベルをすべてのメトリクスデータポイントにもコピーするため、リソース属性をインデックス化しないバックエンドでもラベルでメトリクスをフィルタリングできます。このコピーをオフにするには、メトリクスのカーディナリティ制御 を参照してください。
セッション中のグループの変更
ターミナルセッションは、user.groups を OTLP リソースに付与し、さらに各メトリクスのデータポイントとイベントにも付与します。セッション中に開発者のグループが変更された場合、次のサイレントリフレッシュ以降の使用に関するデータポイントとイベントには新しいグループが含まれます。リソースは開発者が Claude Code を再起動するまで古いグループを保持するため、データポイントまたはイベント上の属性でグループ化してください。
OpenTelemetry Collector の Prometheus リモート書き込みエクスポーターで resource_to_telemetry_conversion をオンにすると、エクスポーターは各データポイントの user.groups をリソースのもので置き換えるため、すべてのデータポイントに古いグループが表示されます。データポイントの値を維持するには、そのエクスポーターの前にリソースから user.groups を削除してください。
次の OpenTelemetry Collector の resource プロセッサーは、それを列挙したパイプラインで属性を削除します。
processors に resource/drop-user-groups を追加すると、各系列は自身のデータポイントから user_groups ラベルを持つようになります。
コレクターに直接エクスポートする
/login でサインインしたセッションからリレーを経由せずにコレクターに直接テレメトリを送信するには、管理ポリシー の env ブロックで OTEL_EXPORTER_OTLP_ENDPOINT をコレクターの https:// ベース URL に設定します。Claude Code は https://otel-collector.example.com:4318 のように設定した URL に /v1/metrics、/v1/logs、または /v1/traces を付加し、各シグナルを OTLP/HTTP でそこにエクスポートします。各デベロッパーのマシン上の Claude Code v2.1.265 以降が必要です。以前のクライアントはリレー経由でエクスポートします。
コレクターへの認証には、同じ env ブロックで OTEL_EXPORTER_OTLP_HEADERS を設定します。セッションは、この方法で指定されたコレクターにデベロッパーのゲートウェイセッショントークンを送信することはありません。
ポリシーでこのエンドポイントを追加または変更すると、Claude Code はインタラクティブセッションで適用する前に、セキュリティ承認ダイアログ で各デベロッパーに承認を求めます。
Claude Code はシグナルを直接エクスポートする前にエンドポイントをチェックし、チェックに失敗した場合はそのシグナルをリレーに残します。チェックには次のものが含まれます:
- エンドポイントがゲートウェイ自体から来ていること。MDM プロファイルやローカルの
managed-settings.jsonで同じ変数を設定した場合、エクスポートはリレーに残ります。 - URL が
https://、またはループバックアドレスへのhttp://を使用していること - URL が
/v1/<signal>で終わるパスに解決され、クエリやフラグメントがないこと。Claude Code は汎用変数からこのパスを自身で構築します。OTEL_EXPORTER_OTLP_METRICS_ENDPOINTなどのシグナルごとの変数は記述どおりに使用するため、そこには完全なパスを含めてください。 - URL がゲートウェイ自身のホストではないこと。ゲートウェイ宛てのエンドポイントはリレーパスとそのセッショントークンを維持します。
- 管理者とデベロッパーのどちらも、いずれの設定ソースでも
otelHeadersHelperを設定していないこと。ヘルパーが設定されている場合、すべてのシグナルはリレーに残ります。
OTEL_*_EXPORTER セレクターで選択します。
エンドポイントだけではエクスポートはオンにならないため、ゲートウェイが既にプッシュしていない限り、エクスポートをオンにする変数も設定してください:
- ゲートウェイが既に テレメトリ変数をプッシュ している場合、それらが有効化、セレクター、プロトコルをカバーし、明示的に指定したエンドポイントがプッシュされた
<public_url>値を上書きします。OTEL_*_EXPORTERセレクターを自分でotlpに設定するのは、どのforward_to宛先も有効にしていないシグナルについてのみです。 - プッシュしていない場合は、
CLAUDE_CODE_ENABLE_TELEMETRY=1、OTEL_*_EXPORTERセレクター、OTEL_EXPORTER_OTLP_PROTOCOL=http/protobufも設定してください。
宛先が失敗した場合
ゲートウェイはテレメトリのバッファリング、再試行、保存を行わないため、宛先に届かなかったエクスポートは後から配信されるのではなく破棄されます。各宛先は個別に成功または失敗し、エクスポート元のクライアントはどちらの場合も成功レスポンスを受け取るため、配信の失敗はゲートウェイのログにのみ表示されます。 宛先への配信が 5 回連続で失敗すると、ゲートウェイは配信が成功するまで、その宛先への転送を 30 秒ずつ一時停止し、各一時停止をログに記録します。エラーレスポンス、タイムアウト、接続エラーはいずれも配信失敗としてカウントされます。ただし、400、413、415、422、431 は除きます。これらは、コレクターがそのエクスポートのペイロードを不正な形式または大きすぎるとして拒否したことを意味します。
拒否されたペイロードは失敗カウントを進めることもリセットすることもありません:ゲートウェイはその宛先への転送を続け、宛先の最初の拒否とその後 100 回ごとに、宛先とステータスを示す警告をログに記録します。
HTTP チューニング
4 つのオプションのトップレベルブロックaccess_control、limits、timeouts、rate_limits で HTTP サーフェスをチューニングします。デフォルトはほとんどのデプロイに適しています。
デフォルトのように両方の
access_control リストを空のままにすると、ゲートウェイはすべてのクライアントアドレスにサービスを提供するため、ゲートウェイに到達できるユーザーを制限するのはネットワークのみになります。ゲートウェイはデベロッパーのマシンでコマンドを実行する 管理設定 をプッシュできるため、これは重要です。
allow_cidrs が空の間、ゲートウェイはリクエストへの応答方法を変えずに、2 か所で警告します:
- ブート時:運用ログの警告で、プライベート範囲
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、fc00::/7と、デベロッパーが接続元とするその他の内部範囲のみを許可することを推奨します。ローカル開発のように、ゲートウェイをループバックアドレスにバインドし、trusted_proxiesもpublic_urlも設定していない場合、この警告は表示されません。 - 実行時:これらのプライベート範囲外のアドレスから初めてリクエストが届いたとき、ゲートウェイは警告をログに記録し、クライアント IP を含む
access.public_client監査イベント を発行します。どちらもプロセスごとに 1 回発生します。リンクローカルアドレス169.254.0.0/16とfe80::/10はパブリックとしてカウントされません。ゲートウェイはこのチェックの実行前に/healthzと/readyzに応答するため、パブリック範囲からのヘルスプローブではトリガーされません。
listen.trusted_proxies にリストされていない場合、ゲートウェイにはリレーのアドレス(通常はプライベート)が見えるため、実行時の警告もプライベートの許可リストも、それを経由してリレーされたトラフィックを検出できません。
そのようなフロントエンドの背後では、まず listen.trusted_proxies を設定してゲートウェイが実際のクライアントアドレスを見られるようにし、いずれにしてもゲートウェイとその前段にあるすべてのものをパブリックインターネットから到達できないようにしてください。
load_test_mode
load_test_mode ブロックを使用すると、モデルプロバイダーを呼び出さずにゲートウェイをロードテストできます。このモードがオンの間、ゲートウェイは各プロバイダーリクエストを通常どおり構築して署名しますが、送信せずに破棄し、通常のレスポンスパスを通じて定型の返信をストリーミングで返します。返信は、定型であることを示す文で始まるフィラーテキストです。
ゲートウェイサーバー上の Claude Code v2.1.282 以降が必要です。以前のゲートウェイはキーを見つけると起動を拒否します。ブロックを追加する前にすべてのレプリカをアップグレードし、ロールバックする前にブロックを削除してください。
以下の例は、デフォルト値(約 10 秒かけてストリーミングされる約 750 トークンのテキストの返信)でモードをオンにします:
このモードでのロードテストは、ゲートウェイ、Postgres、およびゲートウェイの前段にあるすべてのものをカバーします。プロバイダーの制限、速度、ネットワークパスはカバーしません。
プロバイダーにはモデルリクエストが送信されないため、レプリカのリクエストあたりの CPU は見積もりであり、プロバイダーへのトラフィックも暗号化する本番環境より低く表示されます。レプリカ数は、実際のプロバイダーに対する小規模なパイロットで確認してください。v2.1.283 より前では、見積もりはさらに大幅に低く表示されます。
モードがオンの間、リクエストに最大 7 桁の整数を含む
x-load-test-user ヘッダーを付けることができます。ゲートウェイは各数値を別々のデベロッパーとしてカウントし、リクエストに付随したトークンのデベロッパーのメールとグループを使用します。
ロードテスト用のデプロイには専用の空のデータベースを用意してください。いずれかのデベロッパーが既に支出しているデータベースに対してモードをオンにすると、ゲートウェイは起動を拒否するためです。
完全な例
この完全なリファレンス設定は、すべてのコアセクションを実行します。HTTP チューニングブロックはデフォルト値を保持します。これをコピーして、不要な部分を削除し、値を入力してください。クイックスタートの設定は、これの最小限のバージョンです。gateway.yaml
クライアント側で管理される設定
上記のすべてはゲートウェイサーバーを設定します。開発者マシンはゲートウェイに別途ポイントし、各デバイスで Claude Code の管理設定を通じて設定します。ゲートウェイはログインキー自体をプッシュできません。これらのキーがクライアントにゲートウェイの場所を伝えるためです。 CLI の場合、OS ごとのmanaged-settings.json でこれらのキーを設定します。2 つのログインキーは各開発者の /login をゲートウェイにルーティングします。
parentSettingsBehavior: "merge" は Claude Desktop の出力許可リストの配信を埋め込み Claude Code セッションで機能させ続けます。Claude Desktop セッションにポリシーを配信するはメカニズムと opt-in が配置される場所を説明しています。
開発者がクラウドプロバイダー変数または独自の ANTHROPIC_BASE_URL でゲートウェイをバイパスするのを防ぐには、同じファイルに "allowedProviders": ["gateway"] を追加します。Claude Code はその後、マシン上でクラウドゲートウェイ用に設定されていないすべてのセッションを拒否し、forceLoginGatewayUrl が指定するゲートウェイ、またはファイルの env ブロックが ANTHROPIC_BASE_URL として設定する URL を持つゲートウェイのみを認めます。claude gateway はこのリストを設定するマシンでの実行を拒否するため、ゲートウェイホストではこのキーをオフのままにしてください。設定リファレンスの allowedProviders エントリを参照してください。Claude Code v2.1.285 以降が必要です。
managed-settings.json ファイルを各デバイスにデプロイします。通常は MDM プラットフォーム経由です。ファイルパスはプラットフォームによって異なります。各メカニズムがポリシーを保存する場所を参照してください。
デフォルトでは、Windows のレジストリポリシーまたは macOS のマネージドプリファレンス plist は、上記の例外キーとクロスソースチェックを除き、managed-settings.json ファイルとマージするのではなく置き換えます。このスニペットの 3 つのキーはすべて最優先ソースルールに従うため、Group Policy または設定プロファイルを通じてポリシーを配信するフリートは、代わりにそのメカニズムにすべての 3 つを配置する必要があります。
Claude Desktop の場合、Claude Desktop 独自のマネージド設定で bootstrapUrl キーを <listen.public_url>/user/bootstrap に設定します。サインインフロー及びグループごとのポリシーは、ポリシーが desktop キーでサーバー側で opt-in した後、CLI のものと一致します。opt-in がない場合、/user/bootstrap は 404 を返します。Claude Desktop オーバーレイでサーバー側の半分を参照してください。
Claude Code は forceLoginGatewayUrl、gatewayInternalNetworks、および forceLoginMethod の "gateway" 値をマシン上のマネージドソースから認識します。managed-settings.json、macOS plist または Windows HKLM レジストリ、またはポリシーヘルパーです。ゲートウェイペイロードでこれらを設定しても、ゲートウェイのサインインは設定されません。開発者自身の ~/.claude/settings.json については、ユーザー設定でゲートウェイ URL を設定するを参照してください。
forceLoginMethod と forceLoginOrgUUID をペイロードから除外してください。Claude Code はスタートアップ認証情報チェックのためにペイロードから両方のキーを読み込みます。そのため、Anthropic が発行した認証情報をマシンに保持している開発者は、サインイン後でも管理者ポリシーがクラウドゲートウェイサインインを必要とするの下で説明されているスタートアップ終了を取得します。
関連
- Claude apps gateway 概要:クイックスタートと開発者接続
- デプロイメントガイド:IdP セットアップ、コンテナイメージ、Kubernetes と Cloud Run、運用
- 支出制限:開発者ごとのキャップと Admin API