claude-apps-gateway-deploy.md +28 −26
6 6
7> IdP にゲートウェイを登録し、コンテナをビルドして Kubernetes または Cloud Run にデプロイし、ヘルスチェック、シークレットローテーション、アップグレード、セキュリティを運用します。7> IdP にゲートウェイを登録し、コンテナをビルドして Kubernetes または Cloud Run にデプロイし、ヘルスチェック、シークレットローテーション、アップグレード、セキュリティを運用します。
8 8
99このページでは、[Claude apps gateway](/ja/claude-apps-gateway) の運用側について説明します。ID プロバイダー(IdP)で OAuth クライアントを登録し、ゲートウェイをコンテナとしてデプロイし、日々運用します。ゲートウェイが起動時に読み込む `gateway.yaml` ファイルのすべてのオプションについては、[設定リファレンス](/ja/claude-apps-gateway-config) を参照してください。このページでは、[Claude apps gateway](/docs/ja/claude-apps-gateway) の運用側について説明します。ID プロバイダー(IdP)で OAuth クライアントを登録し、ゲートウェイをコンテナとしてデプロイし、日々運用します。ゲートウェイが起動時に読み込む `gateway.yaml` ファイルのすべてのオプションについては、[設定リファレンス](/docs/ja/claude-apps-gateway-config) を参照してください。
10 10
11本番環境のデプロイメントは順序立てた 4 つのステップに従い、以下のセクションがそれに対応しています。最初の 2 つは選択を行う場所です。後の 2 つは、実行中に参照するリファレンス資料です。11本番環境のデプロイメントは順序立てた 4 つのステップに従い、以下のセクションがそれに対応しています。最初の 2 つは選択を行う場所です。後の 2 つは、実行中に参照するリファレンス資料です。
12 12
31 31
32任意の OIDC 準拠 IdP が機能します:Okta、Microsoft Entra ID、Google Workspace、Keycloak、Dex、PingFederate など。IdP は 3 つの要件を満たす必要があります:32任意の OIDC 準拠 IdP が機能します:Okta、Microsoft Entra ID、Google Workspace、Keycloak、Dex、PingFederate など。IdP は 3 つの要件を満たす必要があります:
33 33
3434* `/.well-known/openid-configuration` を提供します。本番環境では HTTPS 経由です。ゲートウェイは [`http://` issuer](/ja/claude-apps-gateway-config#oidc) を受け入れ、ループバック issuer は追加で `CLAUDE_GATEWAY_ALLOW_LOOPBACK=1` が必要です* `/.well-known/openid-configuration` を提供します。本番環境では HTTPS 経由です。ゲートウェイは [`http://` issuer](/docs/ja/claude-apps-gateway-config#oidc) を受け入れ、ループバック issuer は追加で `CLAUDE_GATEWAY_ALLOW_LOOPBACK=1` が必要です
35* 認可コードフローをサポートします。PKCE(Proof Key for Code Exchange)はデフォルトで有効です。サポートしない IdP の場合は `oidc.use_pkce: false` で無効にします35* 認可コードフローをサポートします。PKCE(Proof Key for Code Exchange)はデフォルトで有効です。サポートしない IdP の場合は `oidc.use_pkce: false` で無効にします
36* id\_token で `email` と必要に応じて `groups` を返すか、`oidc.userinfo_fallback: true` で userinfo エンドポイントから提供します36* id\_token で `email` と必要に応じて `groups` を返すか、`oidc.userinfo_fallback: true` で userinfo エンドポイントから提供します
37 37
41 41
42* **Okta**:`https://example.okta.com` の org 認可サーバーは、`email` と `groups` を省略した薄い id\_token を返すため、issuer として使用する場合は常に `oidc.userinfo_fallback: true` を設定します。`https://example.okta.com/oauth2/default` などのカスタム認可サーバーは、id\_token に `email` と必要に応じて `groups` を含め、直接発行し、フォールバックは不要です。Okta は `oidc.scopes` で `groups` スコープがリクエストされ、アプリのグループクレームフィルターが許可する場合にのみ `groups` を発行します。`userinfo_fallback` は IdP がリクエストされなかったクレームを埋めることはできません。42* **Okta**:`https://example.okta.com` の org 認可サーバーは、`email` と `groups` を省略した薄い id\_token を返すため、issuer として使用する場合は常に `oidc.userinfo_fallback: true` を設定します。`https://example.okta.com/oauth2/default` などのカスタム認可サーバーは、id\_token に `email` と必要に応じて `groups` を含め、直接発行し、フォールバックは不要です。Okta は `oidc.scopes` で `groups` スコープがリクエストされ、アプリのグループクレームフィルターが許可する場合にのみ `groups` を発行します。`userinfo_fallback` は IdP がリクエストされなかったクレームを埋めることはできません。
43* **Microsoft Entra ID**:`issuer` = `https://login.microsoftonline.com/<tenant-id>/v2.0`。Entra はグループ名ではなくグループオブジェクト ID を発行するため、`managed.policies.match.groups` で GUID を使用するか、人間が読める名前のためにアプリロールを使用します。テナントが `groups` の代わりに `roles` の下でロールを発行する場合は、`oidc.groups_claim: roles` を設定します。43* **Microsoft Entra ID**:`issuer` = `https://login.microsoftonline.com/<tenant-id>/v2.0`。Entra はグループ名ではなくグループオブジェクト ID を発行するため、`managed.policies.match.groups` で GUID を使用するか、人間が読める名前のためにアプリロールを使用します。テナントが `groups` の代わりに `roles` の下でロールを発行する場合は、`oidc.groups_claim: roles` を設定します。
4444* **Google Workspace**:`issuer` = `https://accounts.google.com`。Google の id\_token はグループを含みません。Google を IdP として、グループベースの `allowed_groups` または `managed.policies` を使用するには、[`oidc.google_groups`](/ja/claude-apps-gateway-config#oidc) を設定します。これは、ドメイン全体の委任を持つサービスアカウントを使用して Admin SDK Directory API を通じて各ユーザーのグループを検索します。これなしで、メンバーシップゲーティングに `oidc.allowed_email_domains` を使用し、ポリシー割り当てに `managed.policies.match.email_domain` を使用します。Google は標準の `offline_access` スコープも無視します。リフレッシュトークンの場合は、`oidc.scopes: [openid, profile, email]` と `oidc.extra_auth_params: { access_type: offline, prompt: consent }` を設定します。* **Google Workspace**:`issuer` = `https://accounts.google.com`。Google の id\_token はグループを含みません。Google を IdP として、グループベースの `allowed_groups` または `managed.policies` を使用するには、[`oidc.google_groups`](/docs/ja/claude-apps-gateway-config#oidc) を設定します。これは、ドメイン全体の委任を持つサービスアカウントを使用して Admin SDK Directory API を通じて各ユーザーのグループを検索します。これなしで、メンバーシップゲーティングに `oidc.allowed_email_domains` を使用し、ポリシー割り当てに `managed.policies.match.email_domain` を使用します。Google は標準の `offline_access` スコープも無視します。リフレッシュトークンの場合は、`oidc.scopes: [openid, profile, email]` と `oidc.extra_auth_params: { access_type: offline, prompt: consent }` を設定します。
45 45
46上記で説明されていない ID プロバイダーのサポートについては、[トラブルシューティング](#troubleshooting) を参照してください。46上記で説明されていない ID プロバイダーのサポートについては、[トラブルシューティング](#troubleshooting) を参照してください。
47 47
48<Warning>48<Warning>
49 リフレッシュトークンにより、ゲートウェイは開発者のセッションをサイレントに更新でき、開発者をブラウザに戻す必要がありません。また、IdP がユーザーを無効にすると、次のリフレッシュが失敗し、セッションは `ttl_hours` 内に終了するため、プロビジョニング解除を駆動します。ゲートウェイはデフォルトでリフレッシュトークンを取得するために `offline_access` をリクエストします。IdP がオフラインアクセスに明示的な同意を必要とする場合は、OAuth クライアントを設定してそれを許可します。49 リフレッシュトークンにより、ゲートウェイは開発者のセッションをサイレントに更新でき、開発者をブラウザに戻す必要がありません。また、IdP がユーザーを無効にすると、次のリフレッシュが失敗し、セッションは `ttl_hours` 内に終了するため、プロビジョニング解除を駆動します。ゲートウェイはデフォルトでリフレッシュトークンを取得するために `offline_access` をリクエストします。IdP がオフラインアクセスに明示的な同意を必要とする場合は、OAuth クライアントを設定してそれを許可します。
50 50
5151 IdP がリフレッシュトークンをまったく発行できない場合、ゲートウェイは引き続き機能しますが、サイレント更新がないため、開発者はセッションの有効期限が切れるとブラウザログインを再実行します。これが 1 時間ごとに発生するのを防ぐには、[`session.ttl_hours`](/ja/claude-apps-gateway-config#session) を `8` または `12` に上げます。トレードオフはプロビジョニング解除の遅延です。リフレッシュトークンなしでは、無効にされたユーザーはより長い TTL が経過するまでアクセスを保持します。 IdP がリフレッシュトークンをまったく発行できない場合、ゲートウェイは引き続き機能しますが、サイレント更新がないため、開発者はセッションの有効期限が切れるとブラウザログインを再実行します。これが 1 時間ごとに発生するのを防ぐには、[`session.ttl_hours`](/docs/ja/claude-apps-gateway-config#session) を `8` または `12` に上げます。トレードオフはプロビジョニング解除の遅延です。リフレッシュトークンなしでは、無効にされたユーザーはより長い TTL が経過するまでアクセスを保持します。
52</Warning>52</Warning>
53 53
54<h2 id="deployment">54<h2 id="deployment">
62デプロイメントを実行する場所を超えて形作るいくつかの決定があります:62デプロイメントを実行する場所を超えて形作るいくつかの決定があります:
63 63
64* **コスト**:ゲートウェイの個別ライセンスまたはシートごとの料金はありません。これは `claude` バイナリの一部です。既存のクラウドまたは Anthropic コミットメントを通じて推論に対して支払い、コンテナのコンピュートとテレメトリコレクターを支払います。64* **コスト**:ゲートウェイの個別ライセンスまたはシートごとの料金はありません。これは `claude` バイナリの一部です。既存のクラウドまたは Anthropic コミットメントを通じて推論に対して支払い、コンテナのコンピュートとテレメトリコレクターを支払います。
6565* **バイパス**:ゲートウェイは、モデルへの唯一のルートがそれを通過することを強制しません。独自の認証情報を持つ開発者は引き続きプロバイダーを直接呼び出すことができるため、そのパスを閉じることはネットワークポリシーの決定です。例えば、`api.anthropic.com` へのエグレスをゲートウェイ以外からブロックします。そのエグレスをブロックすると、各開発者のマシンから `api.anthropic.com` を呼び出す [WebFetch ドメインセーフティチェック](/ja/data-usage#webfetch-domain-safety-check) も破壊されます。管理ポリシーで `skipWebFetchPreflight: true` を設定して無効にします。* **バイパス**:ゲートウェイは、モデルへの唯一のルートがそれを通過することを強制しません。独自の認証情報を持つ開発者は引き続きプロバイダーを直接呼び出すことができるため、そのパスを閉じることはネットワークポリシーの決定です。例えば、`api.anthropic.com` へのエグレスをゲートウェイ以外からブロックします。そのエグレスをブロックすると、各開発者のマシンから `api.anthropic.com` を呼び出す [WebFetch ドメインセーフティチェック](/docs/ja/data-usage#webfetch-domain-safety-check) も破壊されます。管理ポリシーで `skipWebFetchPreflight: true` を設定して無効にします。
66* **複数ゲートウェイ**:各ゲートウェイは独自の設定を持つ個別のデプロイメントです。CLI はゲートウェイホスト名ごとに信頼フィンガープリントと認証情報を保存するため、異なるチームは競合なしに異なるゲートウェイに接続できます。複数の OIDC issuer を提供するには、個別のインスタンスを実行します。66* **複数ゲートウェイ**:各ゲートウェイは独自の設定を持つ個別のデプロイメントです。CLI はゲートウェイホスト名ごとに信頼フィンガープリントと認証情報を保存するため、異なるチームは競合なしに異なるゲートウェイに接続できます。複数の OIDC issuer を提供するには、個別のインスタンスを実行します。
67* **サーバーレス**:Cloud Run は機能します。`min-instances: 1` を設定して、コールド OIDC ディスカバリーを回避します。Lambda と Cloud Functions は機能しません。ゲートウェイは長時間実行 HTTP サーバーであるためです。67* **サーバーレス**:Cloud Run は機能します。`min-instances: 1` を設定して、コールド OIDC ディスカバリーを回避します。Lambda と Cloud Functions は機能しません。ゲートウェイは長時間実行 HTTP サーバーであるためです。
68 68
6969ここのすべての本番トポロジーは、L7 プロキシ(Ingress、Cloud Run のフロントエンド、ALB など)をプレーン HTTP レプリカの前に配置します。[`listen.trusted_proxies`](/ja/claude-apps-gateway-config#listen) をプロキシのソース範囲に設定して、ゲートウェイが `X-Forwarded-For` からクライアント IP を読み込みます。ゲートウェイは TCP ピアが信頼されている場合にのみヘッダーを尊重します。[Google Cloud の実装例](/ja/claude-apps-gateway-on-gcp) はトポロジーごとに具体的な値を持っています。信頼されたプロキシなしでは、すべてのリクエストはプロキシの IP から来ているように見え、IP ごとのレート制限を 1 つの共有バケットに折りたたみ、監査イベントにプロキシの IP を記録します。ここのすべての本番トポロジーは、L7 プロキシ(Ingress、Cloud Run のフロントエンド、ALB など)をプレーン HTTP レプリカの前に配置します。[`listen.trusted_proxies`](/docs/ja/claude-apps-gateway-config#listen) をプロキシのソース範囲に設定して、ゲートウェイが `X-Forwarded-For` からクライアント IP を読み込みます。ゲートウェイは TCP ピアが信頼されている場合にのみヘッダーを尊重します。[Google Cloud の実装例](/docs/ja/claude-apps-gateway-on-gcp) はトポロジーごとに具体的な値を持っています。信頼されたプロキシなしでは、すべてのリクエストはプロキシの IP から来ているように見え、IP ごとのレート制限を 1 つの共有バケットに折りたたみ、監査イベントにプロキシの IP を記録します。
70 70
71<h3 id="container-image">71<h3 id="container-image">
72 コンテナイメージ72 コンテナイメージ
74 74
75標準 Claude Code リリースのネイティブ `claude` バイナリの周りに独自のイメージをビルドします:75標準 Claude Code リリースのネイティブ `claude` バイナリの周りに独自のイメージをビルドします:
76 76
77771. ピン留めされたリリースからイメージアーキテクチャの Linux ビルドをダウンロードします。ダウンロード URL については、[特定のバージョンをインストールする](/ja/setup#install-a-specific-version) を参照してください。1. ピン留めされたリリースからイメージアーキテクチャの Linux ビルドをダウンロードします。ダウンロード URL については、[特定のバージョンをインストールする](/docs/ja/setup#install-a-specific-version) を参照してください。
78782. [バイナリの整合性とコード署名](/ja/setup#binary-integrity-and-code-signing) で説明されているように、リリースの GPG 署名付き `manifest.json` に対して検証します。2. [バイナリの整合性とコード署名](/docs/ja/setup#binary-integrity-and-code-signing) で説明されているように、リリースの GPG 署名付き `manifest.json` に対して検証します。
793. ビルドコンテキストにコピーします。793. ビルドコンテキストにコピーします。
80 80
81ビルドがリリースホストに到達できない場合は、リリースを内部レジストリにミラーリングし、フロートが実行するバージョンをピン留めします。81ビルドがリリースホストに到達できない場合は、リリースを内部レジストリにミラーリングし、フロートが実行するバージョンをピン留めします。
82 82
83バイナリを超えて、イメージは以下が必要です:83バイナリを超えて、イメージは以下が必要です:
84 84
8585* **glibc ベースのイメージ**:glibc ビルドの唯一の動的依存関係は glibc ライブラリです。Musl ベースのイメージは `linux-x64-musl` または `linux-arm64-musl` ビルドと追加パッケージが必要です。[Alpine Linux セットアップ](/ja/setup#alpine-linux-and-musl-based-distributions) を参照してください。* **glibc ベースのイメージ**:glibc ビルドの唯一の動的依存関係は glibc ライブラリです。Musl ベースのイメージは `linux-x64-musl` または `linux-arm64-musl` ビルドと追加パッケージが必要です。[Alpine Linux セットアップ](/docs/ja/setup#alpine-linux-and-musl-based-distributions) を参照してください。
86* **書き込み可能な状態ディレクトリ**:ゲートウェイは任意のユーザーとして実行されますが、最小限のイメージには書き込み可能なホームがありません。`CLAUDE_CONFIG_DIR` を `/tmp/.claude` などの書き込み可能なパスに設定します。86* **書き込み可能な状態ディレクトリ**:ゲートウェイは任意のユーザーとして実行されますが、最小限のイメージには書き込み可能なホームがありません。`CLAUDE_CONFIG_DIR` を `/tmp/.claude` などの書き込み可能なパスに設定します。
87* **コンテナコマンド**:`claude gateway --config /etc/claude/gateway.yaml`。設定ファイルは読み取り専用でマウントされ、シークレットは環境変数として提供されます。ゲートウェイは `listen.port` でリッスンします。デフォルトは `8080` です。87* **コンテナコマンド**:`claude gateway --config /etc/claude/gateway.yaml`。設定ファイルは読み取り専用でマウントされ、シークレットは環境変数として提供されます。ゲートウェイは `listen.port` でリッスンします。デフォルトは `8080` です。
88 88
99<Note>99<Note>
100 **ワークロードアイデンティティ**100 **ワークロードアイデンティティ**
101 101
102102 静的キーよりもプラットフォームのワークロードアイデンティティを優先します:EKS 上の Bedrock の場合は IRSA、GKE 上の Agent Platform の場合は Workload Identity、AKS 上の Foundry の場合はワークロードアイデンティティ。上流ブロックで `auth: {}` を設定するか、Foundry の場合は `use_azure_ad: true` を設定し、ゲートウェイはそのプロバイダーのデフォルト認証情報チェーンを通じてポッドのアイデンティティを取得します。GKE 上の Bedrock 上流など、クロスクラウドペアリングの場合は、上流の `auth` ブロックで明示的な認証情報を設定します。[`upstreams` リファレンス](/ja/claude-apps-gateway-config#upstreams) にはプラットフォームごとのセットアップ詳細があります。 静的キーよりもプラットフォームのワークロードアイデンティティを優先します:EKS 上の Bedrock の場合は IRSA、GKE 上の Agent Platform の場合は Workload Identity、AKS 上の Foundry の場合はワークロードアイデンティティ。上流ブロックで `auth: {}` を設定するか、Foundry の場合は `use_azure_ad: true` を設定し、ゲートウェイはそのプロバイダーのデフォルト認証情報チェーンを通じてポッドのアイデンティティを取得します。GKE 上の Bedrock 上流など、クロスクラウドペアリングの場合は、上流の `auth` ブロックで明示的な認証情報を設定します。[`upstreams` リファレンス](/docs/ja/claude-apps-gateway-config#upstreams) にはプラットフォームごとのセットアップ詳細があります。
103</Note>103</Note>
104 104
105<h3 id="cloud-run">105<h3 id="cloud-run">
109サービスを以下のように設定します:109サービスを以下のように設定します:
110 110
111* `listen.port` をデフォルトの `8080` のままにします。これは Cloud Run のデフォルト `PORT` と一致するか、`port: ${PORT}` を設定します111* `listen.port` をデフォルトの `8080` のままにします。これは Cloud Run のデフォルト `PORT` と一致するか、`port: ${PORT}` を設定します
112112* `public_url` を外部到達可能なオリジンに設定します。本番環境では、これは通常、内部ロードバランサーのホスト名です。`/login` は [パブリックアドレスを拒否](/ja/claude-apps-gateway#prerequisites) し、`*.run.app` URL はそれに解決するため、Cloud Run URL だけは `curl` またはブラウザスモークテストにのみ機能します。例外は、`*.run.app` が Private Service Connect と Cloud DNS プライベートゾーンを通じてプライベートに解決するネットワークです。そのトポロジーでは、Cloud Run URL は有効な `public_url` です。[Google Cloud の実装例](/ja/claude-apps-gateway-on-gcp#deploy-the-gateway) は両方をカバーしています。* `public_url` を外部到達可能なオリジンに設定します。本番環境では、これは通常、内部ロードバランサーのホスト名です。`/login` は [パブリックアドレスを拒否](/docs/ja/claude-apps-gateway#prerequisites) し、`*.run.app` URL はそれに解決するため、Cloud Run URL だけは `curl` またはブラウザスモークテストにのみ機能します。例外は、`*.run.app` が Private Service Connect と Cloud DNS プライベートゾーンを通じてプライベートに解決するネットワークです。そのトポロジーでは、Cloud Run URL は有効な `public_url` です。[Google Cloud の実装例](/docs/ja/claude-apps-gateway-on-gcp#deploy-the-gateway) は両方をカバーしています。
113* シークレットボリュームとして設定をマウントします113* シークレットボリュームとして設定をマウントします
114* `min-instances: 1` を設定して、最初のリクエストでコールド OIDC ディスカバリーを回避します114* `min-instances: 1` を設定して、最初のリクエストでコールド OIDC ディスカバリーを回避します
115 115
116<Note>116<Note>
117117 Google Cloud での完全な実装例(Cloud Run または GKE、Cloud SQL、Secret Manager をカバー)については、[Google Cloud にデプロイする](/ja/claude-apps-gateway-on-gcp) を参照してください。 Google Cloud での完全な実装例(Cloud Run または GKE、Cloud SQL、Secret Manager をカバー)については、[Google Cloud にデプロイする](/docs/ja/claude-apps-gateway-on-gcp) を参照してください。
118</Note>118</Note>
119 119
120<h3 id="push-the-gateway-url-to-developer-machines">120<h3 id="push-the-gateway-url-to-developer-machines">
121 ゲートウェイ URL を開発者マシンにプッシュする121 ゲートウェイ URL を開発者マシンにプッシュする
122</h3>122</h3>
123 123
124124ゲートウェイがサービスを提供したら、MDM を通じて、または OS ごとの `managed-settings.json` を直接書き込むことで、管理設定を通じて各開発者のマシンに `forceLoginMethod` と `forceLoginGatewayUrl` をプッシュします。これなしでは、`/login` はゲートウェイオプションなしで標準アカウントピッカーを表示します。ファイルパスについては、[クライアント側の管理設定](/ja/claude-apps-gateway-config#client-side-managed-settings) を参照してください。ゲートウェイがサービスを提供したら、MDM を通じて、または OS ごとの `managed-settings.json` を直接書き込むことで、管理設定を通じて各開発者のマシンに `forceLoginMethod` と `forceLoginGatewayUrl` をプッシュします。これなしでは、`/login` はゲートウェイオプションなしで標準アカウントピッカーを表示します。ファイルパスについては、[クライアント側の管理設定](/docs/ja/claude-apps-gateway-config#client-side-managed-settings) を参照してください。
125 125
126<h2 id="operations">126<h2 id="operations">
127 運用127 運用
160 160
161* **既存セッション**:ベアラートークンは JWT シークレットでローカルに検証され、セッション更新はストアに触れず、ゲートウェイプロセスは引き続き推論を提供できます161* **既存セッション**:ベアラートークンは JWT シークレットでローカルに検証され、セッション更新はストアに触れず、ゲートウェイプロセスは引き続き推論を提供できます
162* **新しいサインイン**:Postgres が回復するまで失敗します。デバイスフローとそのレート制限カウンターは Postgres に存在するため162* **新しいサインイン**:Postgres が回復するまで失敗します。デバイスフローとそのレート制限カウンターは Postgres に存在するため
163163* **[支出制限の実装](/ja/claude-apps-gateway-spend-limits#postgres-availability)**:デフォルトでは障害中に失敗してオープンになるため、推論は引き続き流れます。ブロックするのを好む場合は、失敗を閉じるようにフリップします* **[支出制限の実装](/docs/ja/claude-apps-gateway-spend-limits#postgres-availability)**:デフォルトでは障害中に失敗してオープンになるため、推論は引き続き流れます。ブロックするのを好む場合は、失敗を閉じるようにフリップします
164* **Readiness**:`/readyz` は障害中に not-ready を報告するため、readiness でトラフィックをゲートするオーケストレーターはすべてのレプリカを一度にローテーションから削除します。そのトポロジーでは、ゲートウェイが引き続き提供できる推論を含むすべてのトラフィックは、Postgres が回復するまでロードバランサーで失敗します。`/healthz` の liveness プローブは引き続き合格するため、レプリカは再起動されません。ストア障害を通じてサインイン済みの開発者が機能し続けるようにしたい場合は、readiness プローブを `/healthz` に指定します。コストは新しいサインインが引き続き ready を報告するレプリカに対して失敗することです。164* **Readiness**:`/readyz` は障害中に not-ready を報告するため、readiness でトラフィックをゲートするオーケストレーターはすべてのレプリカを一度にローテーションから削除します。そのトポロジーでは、ゲートウェイが引き続き提供できる推論を含むすべてのトラフィックは、Postgres が回復するまでロードバランサーで失敗します。`/healthz` の liveness プローブは引き続き合格するため、レプリカは再起動されません。ストア障害を通じてサインイン済みの開発者が機能し続けるようにしたい場合は、readiness プローブを `/healthz` に指定します。コストは新しいサインインが引き続き ready を報告するレプリカに対して失敗することです。
165 165
166IdP がダウンした場合、既存セッションは `ttl_hours` まで機能し、新しいログインと更新は失敗します。IdP が頻繁なメンテナンスウィンドウを持つ場合は、より長い `ttl_hours` を設定します。166IdP がダウンした場合、既存セッションは `ttl_hours` まで機能し、新しいログインと更新は失敗します。IdP が頻繁なメンテナンスウィンドウを持つ場合は、より長い `ttl_hours` を設定します。
191| `admin_audit` | Admin API ミューテーショントレイル | `admin.audit_retention_days`、デフォルト 365 |191| `admin_audit` | Admin API ミューテーショントレイル | `admin.audit_retention_days`、デフォルト 365 |
192| `principal_emails` | 各プリンシパルの最後に見たメール、表示名、IdP グループ。PII を含みます。 | `admin.identity_retention_days` 最後のアクティビティ以来、デフォルト 90 |192| `principal_emails` | 各プリンシパルの最後に見たメール、表示名、IdP グループ。PII を含みます。 | `admin.identity_retention_days` 最後のアクティビティ以来、デフォルト 90 |
193 193
19419430 秒ループは TTL を超えた `kv` 行を期限切れにし、1 時間のスイープは支出テーブルの保持ウィンドウを実装するため、何も無制限に成長しません。[支出制限](/ja/claude-apps-gateway-spend-limits) が設定されていない場合、`kv` のみが書き込まれます。セキュリティポリシーがアプリケーションロールからの DDL を禁止する場合は、これらのテーブルと `_migrations` を管理ロールで事前作成し、各テーブルに `SELECT, INSERT, UPDATE, DELETE` をアプリロールに付与します。30 秒ループは TTL を超えた `kv` 行を期限切れにし、1 時間のスイープは支出テーブルの保持ウィンドウを実装するため、何も無制限に成長しません。[支出制限](/docs/ja/claude-apps-gateway-spend-limits) が設定されていない場合、`kv` のみが書き込まれます。セキュリティポリシーがアプリケーションロールからの DDL を禁止する場合は、これらのテーブルと `_migrations` を管理ロールで事前作成し、各テーブルに `SELECT, INSERT, UPDATE, DELETE` をアプリロールに付与します。
195 195
196支出制限が使用されている場合、失われたデータベースは失われた支出追跡とキャップを意味し、開発者の再ログインだけではないため、定期的なバックアップを実行します。保持を待つのではなく、出発した開発者を直ちに削除するには、`DELETE FROM principal_emails WHERE principal = '<sub>'` を直接実行します。これはメール、名前、グループを保持する唯一のテーブルを削除します。`spend` と `admin_audit` 行は疑似匿名 OIDC `sub` のみを参照します。196支出制限が使用されている場合、失われたデータベースは失われた支出追跡とキャップを意味し、開発者の再ログインだけではないため、定期的なバックアップを実行します。保持を待つのではなく、出発した開発者を直ちに削除するには、`DELETE FROM principal_emails WHERE principal = '<sub>'` を直接実行します。これはメール、名前、グループを保持する唯一のテーブルを削除します。`spend` と `admin_audit` 行は疑似匿名 OIDC `sub` のみを参照します。
197 197
218| データ | パス | ゲートウェイによって Anthropic に送信 |218| データ | パス | ゲートウェイによって Anthropic に送信 |
219| ------------------------------------------------------------------------------- | ----------------------------------------------------- | --------------------------- |219| ------------------------------------------------------------------------------- | ----------------------------------------------------- | --------------------------- |
220| 推論(プロンプト、完了) | CLI → ゲートウェイ → 上流 | Anthropic API が設定された上流の場合のみ |220| 推論(プロンプト、完了) | CLI → ゲートウェイ → 上流 | Anthropic API が設定された上流の場合のみ |
221221| テレメトリ(OTLP メトリクス、プラス [オプトイン ログとトレース](/ja/claude-apps-gateway-config#telemetry)) | CLI → ゲートウェイ → コレクター | なし || テレメトリ(OTLP メトリクス、プラス [オプトイン ログとトレース](/docs/ja/claude-apps-gateway-config#telemetry)) | CLI → ゲートウェイ → コレクター | なし |
222| アイデンティティ(メール、グループ、sub) | IdP → ゲートウェイ → JWT → CLI。CLI はそれを OTLP エクスポートにスタンプします | なし |222| アイデンティティ(メール、グループ、sub) | IdP → ゲートウェイ → JWT → CLI。CLI はそれを OTLP エクスポートにスタンプします | なし |
223| 管理設定 | ゲートウェイ YAML → CLI | なし |223| 管理設定 | ゲートウェイ YAML → CLI | なし |
224| 監査ログ | ゲートウェイ stderr → アグリゲーター | なし |224| 監査ログ | ゲートウェイ stderr → アグリゲーター | なし |
237 237
2382 つの脅威は、インフラストラクチャを保護するためのものであるため、スコープ外です:2382 つの脅威は、インフラストラクチャを保護するためのものであるため、スコープ外です:
239 239
240240* **侵害されたゲートウェイホスト**:ホストは上流認証情報を保持し、[管理設定](/ja/claude-apps-gateway-config#managed) をすべての接続された開発者に配布するため、ゲートウェイの設定の制御は MDM の制御に匹敵します。CLI の 1 回限りの承認ダイアログはシェル対応設定のサイレント変更を制限しますが、ホストセキュリティに置き換わりません。* **侵害されたゲートウェイホスト**:ホストは上流認証情報を保持し、[管理設定](/docs/ja/claude-apps-gateway-config#managed) をすべての接続された開発者に配布するため、ゲートウェイの設定の制御は MDM の制御に匹敵します。CLI の 1 回限りの承認ダイアログはシェル対応設定のサイレント変更を制限しますが、ホストセキュリティに置き換わりません。
241* **悪意のある OIDC プロバイダー**:プロバイダーはゲートウェイが信頼する id\_token に署名するため、任意のアイデンティティを主張できます。IdP の検証と保護はあなたの責任です。241* **悪意のある OIDC プロバイダー**:プロバイダーはゲートウェイが信頼する id\_token に署名するため、任意のアイデンティティを主張できます。IdP の検証と保護はあなたの責任です。
242 242
243<h3 id="user-code-brute-force-resistance">243<h3 id="user-code-brute-force-resistance">
246 246
247開発者が `/device` 検証ページに入力する `user_code` は、20 文字のアルファベットから引き出された 8 文字です。これは 20⁸ または約 2.56×10¹⁰ の組み合わせを生成し、10 分後に期限切れになります。247開発者が `/device` 検証ページに入力する `user_code` は、20 文字のアルファベットから引き出された 8 文字です。これは 20⁸ または約 2.56×10¹⁰ の組み合わせを生成し、10 分後に期限切れになります。
248 248
249249ゲートウェイは [`rate_limits`](/ja/claude-apps-gateway-config#http-tuning) を通じて設定可能なデバイスグラントエンドポイントに IP ごとのレート制限を適用します。多くの開発者が単一の共有企業 NAT アドレスからサインインする場合は、制限を上げます。制限はサインインフローにのみ適用され、推論には適用されません。ゲートウェイは [`rate_limits`](/docs/ja/claude-apps-gateway-config#http-tuning) を通じて設定可能なデバイスグラントエンドポイントに IP ごとのレート制限を適用します。多くの開発者が単一の共有企業 NAT アドレスからサインインする場合は、制限を上げます。制限はサインインフローにのみ適用され、推論には適用されません。
250 250
251<h3 id="compliance-posture">251<h3 id="compliance-posture">
252 コンプライアンス体制252 コンプライアンス体制
255* **データレジデンシー**:ゲートウェイ自体のデータプレーンは、Anthropic API が設定された上流の場合を除き、Anthropic に何も送信しません。その場合、既存のデータ処理契約が推論パスに適用されます。テレメトリ、監査、アイデンティティ、設定は設定した宛先にのみ行きます。255* **データレジデンシー**:ゲートウェイ自体のデータプレーンは、Anthropic API が設定された上流の場合を除き、Anthropic に何も送信しません。その場合、既存のデータ処理契約が推論パスに適用されます。テレメトリ、監査、アイデンティティ、設定は設定した宛先にのみ行きます。
256* **ホストプロセストラフィック**:ホストプロセスは Claude Code CLI です。スタートアップ分析と更新チェックを Anthropic に送信できます。厳密なエグレスデプロイメントの場合は、ゲートウェイのコンテナ環境で `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1` を設定します。256* **ホストプロセストラフィック**:ホストプロセスは Claude Code CLI です。スタートアップ分析と更新チェックを Anthropic に送信できます。厳密なエグレスデプロイメントの場合は、ゲートウェイのコンテナ環境で `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1` を設定します。
257* **クライアント分析**:CLI はゲートウェイにサインインしている間、独自の使用分析を無効にし、エラー報告はサードパーティ API サーフェスでデフォルトでオフです。257* **クライアント分析**:CLI はゲートウェイにサインインしている間、独自の使用分析を無効にし、エラー報告はサードパーティ API サーフェスでデフォルトでオフです。
258258* **クライアントマシン**:開発者の CLI は、`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1` と `skipWebFetchPreflight: true` が設定されていない限り、WebFetch ホスト名チェックとバージョンチェックを Anthropic に送信し続けます。[データ使用](/ja/data-usage) を参照してください。* **クライアントマシン**:開発者の CLI は、`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1` と `skipWebFetchPreflight: true` が設定されていない限り、WebFetch ホスト名チェックとバージョンチェックを Anthropic に送信し続けます。[データ使用](/docs/ja/data-usage) を参照してください。
259* **サーベイ評価**:ゲートウェイ認証情報は Anthropic バウンド評価シンクを無効にするため、評価は Anthropic に送信されません。259* **サーベイ評価**:ゲートウェイ認証情報は Anthropic バウンド評価シンクを無効にするため、評価は Anthropic に送信されません。
260* **トランスクリプト共有**:サーベイのトランスクリプト共有プロンプトで「はい」を選択すると、Anthropic にアップロードする代わりに `~/.claude/feedback-bundles/` の下にローカルファイルを書き込みます。260* **トランスクリプト共有**:サーベイのトランスクリプト共有プロンプトで「はい」を選択すると、Anthropic にアップロードする代わりに `~/.claude/feedback-bundles/` の下にローカルファイルを書き込みます。
261* **クライアント更新**:更新チェックはゲートウェイトラフィックとは別です。独自の配布を通じてバージョンをピン留めし、ラップトップがリリースをフェッチしてはいけない場合は `DISABLE_UPDATES` を設定します。`DISABLE_AUTOUPDATER` はバックグラウンド更新のみを停止し、`claude update` は引き続き機能します。261* **クライアント更新**:更新チェックはゲートウェイトラフィックとは別です。独自の配布を通じてバージョンをピン留めし、ラップトップがリリースをフェッチしてはいけない場合は `DISABLE_UPDATES` を設定します。`DISABLE_AUTOUPDATER` はバックグラウンド更新のみを停止し、`claude update` は引き続き機能します。
262* **TLS**:本番環境で `public_url` を HTTPS 経由で提供します。ゲートウェイ自体のリスナー経由で `listen.tls` を使用するか、プレーン HTTP レプリカの前の TLS 終了 ingress から `listen.public_url` を設定します。ゲートウェイはプレーン HTTP を拒否しません。IdP は本番環境で HTTPS を提供する必要があり、Postgres は `?sslmode=require` をサポートします。ingress で `Strict-Transport-Security` を設定します。262* **TLS**:本番環境で `public_url` を HTTPS 経由で提供します。ゲートウェイ自体のリスナー経由で `listen.tls` を使用するか、プレーン HTTP レプリカの前の TLS 終了 ingress から `listen.public_url` を設定します。ゲートウェイはプレーン HTTP を拒否しません。IdP は本番環境で HTTPS を提供する必要があり、Postgres は `?sslmode=require` をサポートします。ingress で `Strict-Transport-Security` を設定します。
263263* **脆弱性開示**:[セキュリティ問題の報告](/ja/security#reporting-security-issues) に従います* **脆弱性開示**:[セキュリティ問題の報告](/docs/ja/security#reporting-security-issues) に従います
264 264
265<h2 id="troubleshooting">265<h2 id="troubleshooting">
266 トラブルシューティング266 トラブルシューティング
272* **ログイン問題**:開発者は `claude --debug-file ./claude-debug.txt` を実行し、再現し、そのファイルとゲートウェイの同じウィンドウの監査ログを送信します272* **ログイン問題**:開発者は `claude --debug-file ./claude-debug.txt` を実行し、再現し、そのファイルとゲートウェイの同じウィンドウの監査ログを送信します
273* **推論問題**:リクエストされたモデル、設定された上流、リクエストのゲートウェイ監査ログ。どの上流がそれを提供したか、応答ステータスを記録します273* **推論問題**:リクエストされたモデル、設定された上流、リクエストのゲートウェイ監査ログ。どの上流がそれを提供したか、応答ステータスを記録します
274 274
275ゲートウェイの stderr には監査イベントストリームが含まれ、監査ログには開発者の ID が記録され、デバッグファイルには開発者のマシンからの hook と MCP サーバーの出力が記録されます。公開 issue に投稿する前に、これらを確認して秘密情報を削除してください。
276
275| 症状 | 原因 | 修正 |277| 症状 | 原因 | 修正 |
276| ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |278| ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
277279| 開発者の `/login` は標準アカウントピッカーを表示し、**Cloud gateway** 画面ではなく | 管理設定で `forceLoginMethod` または `forceLoginGatewayUrl` が設定されていない | [管理設定ファイル](/ja/claude-apps-gateway#set-the-gateway-url) をデバイスにデプロイします。`/login` はそこからゲートウェイ URL を読み込みます || 開発者の `/login` は標準アカウントピッカーを表示し、**Cloud gateway** 画面ではなく | 管理設定で `forceLoginMethod` または `forceLoginGatewayUrl` が設定されていない | [管理設定ファイル](/docs/ja/claude-apps-gateway#set-the-gateway-url) をデバイスにデプロイします。`/login` はそこからゲートウェイ URL を読み込みます |
278| スタートアップは `Gateway login is configured in managed settings, but this Claude Code build does not include Cloud gateway support.` を表示 | インストールされた Claude Code ビルドはゲートウェイサポートより前 | 開発者に Claude Code を Cloud gateway サポートを含むリリースに更新させます |280| スタートアップは `Gateway login is configured in managed settings, but this Claude Code build does not include Cloud gateway support.` を表示 | インストールされた Claude Code ビルドはゲートウェイサポートより前 | 開発者に Claude Code を Cloud gateway サポートを含むリリースに更新させます |
279281| CLI `/login`:`Gateway hosts must be on your organization's private network; <host> resolves to the public (or unrecognized) address <ip>` | ゲートウェイホスト名は少なくとも 1 つのパブリック IP アドレスに解決されます。Claude Code は各解決されたアドレスをチェックし、すべてがプライベートであることを要求します。一般的な原因は、1 つのファミリーがパブリックアドレスに解決するデュアルスタック名です。AWS 内部デュアルスタックロードバランサーを含み、パブリック範囲 AAAA アドレスを返します。Anthropic が運用するパブリックゲートウェイエンドポイントはチェックから除外され、`/login` は `https://` 経由でそれらを受け入れます。v2.1.206 より前では、`/login` は他のパブリックアドレスと同様にそれらを拒否しました | ゲートウェイ名が開発者マシンでプライベートアドレスのみに解決されるようにします。デュアルスタック名の場合は、パブリック範囲レコードをドロップするか、個別の内部専用 DNS 名を提供します。[プライベートネットワーク前提条件](/ja/claude-apps-gateway#prerequisites) を参照してください。 || CLI `/login`:`Gateway hosts must be on your organization's private network; <host> resolves to the public (or unrecognized) address <ip>` | ゲートウェイホスト名は少なくとも 1 つのパブリック IP アドレスに解決されます。Claude Code は各解決されたアドレスをチェックし、すべてがプライベートであることを要求します。一般的な原因は、1 つのファミリーがパブリックアドレスに解決するデュアルスタック名です。AWS 内部デュアルスタックロードバランサーを含み、パブリック範囲 AAAA アドレスを返します。Anthropic が運用するパブリックゲートウェイエンドポイントはチェックから除外され、`/login` は `https://` 経由でそれらを受け入れます。v2.1.206 より前では、`/login` は他のパブリックアドレスと同様にそれらを拒否しました | ゲートウェイ名が開発者マシンでプライベートアドレスのみに解決されるようにします。デュアルスタック名の場合は、パブリック範囲レコードをドロップするか、個別の内部専用 DNS 名を提供します。[プライベートネットワーク前提条件](/docs/ja/claude-apps-gateway#prerequisites) を参照してください。 |
280| CLI `/login`:`Gateway login requires a direct connection and does not support connecting through an HTTP proxy` | `HTTPS_PROXY` または `HTTP_PROXY` がゲートウェイホストに適用され、プロキシのホスト名がパブリックアドレスに解決されます。ホスト名がプライベートアドレスのみに解決するプロキシは許可され、このエラーをトリガーしません | ゲートウェイホストを開発者のマシンの `NO_PROXY` に追加して、接続が直接になるようにするか、ホスト名がプライベートアドレスに解決するプロキシを使用します |282| CLI `/login`:`Gateway login requires a direct connection and does not support connecting through an HTTP proxy` | `HTTPS_PROXY` または `HTTP_PROXY` がゲートウェイホストに適用され、プロキシのホスト名がパブリックアドレスに解決されます。ホスト名がプライベートアドレスのみに解決するプロキシは許可され、このエラーをトリガーしません | ゲートウェイホストを開発者のマシンの `NO_PROXY` に追加して、接続が直接になるようにするか、ホスト名がプライベートアドレスに解決するプロキシを使用します |
281| CLI `/login`:`Could not resolve gateway host <host>` | マシンはゲートウェイの内部 DNS 名を解決できません。通常、企業ネットワークにないため | 開発者にネットワークまたは VPN に接続させ、`/login` を再試行します |283| CLI `/login`:`Could not resolve gateway host <host>` | マシンはゲートウェイの内部 DNS 名を解決できません。通常、企業ネットワークにないため | 開発者にネットワークまたは VPN に接続させ、`/login` を再試行します |
282| ブートは `store.postgres_url` という名前の設定検証エラーで終了 | Postgres が設定されていません。ゲートウェイは Postgres が必要です | `store.postgres_url` を設定します。ローカル開発の場合は、使い捨てコンテナを使用します:`docker run --rm -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres`。 |284| ブートは `store.postgres_url` という名前の設定検証エラーで終了 | Postgres が設定されていません。ゲートウェイは Postgres が必要です | `store.postgres_url` を設定します。ローカル開発の場合は、使い捨てコンテナを使用します:`docker run --rm -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres`。 |
283285| ブートは終了:`requires the native binary` | Node の代わりにネイティブバイナリの下で実行 | [スタンドアロンインストール方法](/ja/setup) の 1 つで Claude Code をインストールします || ブートは終了:`requires the native binary` | Node の代わりにネイティブバイナリの下で実行 | [スタンドアロンインストール方法](/docs/ja/setup) の 1 つで Claude Code をインストールします |
284| ブートは `config.load` の後の OIDC ディスカバリーエラーで終了 | `oidc.issuer` に到達不可、または TLS チェーンが信頼されていない | issuer がポッドから到達可能で `/.well-known/openid-configuration` を提供することを確認します。プライベート PKI の場合は `ca_cert_pem` を設定します。 |286| ブートは `config.load` の後の OIDC ディスカバリーエラーで終了 | `oidc.issuer` に到達不可、または TLS チェーンが信頼されていない | issuer がポッドから到達可能で `/.well-known/openid-configuration` を提供することを確認します。プライベート PKI の場合は `ca_cert_pem` を設定します。 |
285| ブートは Postgres パーミッションエラーで終了 | アプリロールに `CREATE TABLE` がない | 管理ロールでスキーマを事前作成し、アプリロールに DML を付与するか、新しいマイグレーションを適用するブートのために DDL を一時的に付与します |287| ブートは Postgres パーミッションエラーで終了 | アプリロールに `CREATE TABLE` がない | 管理ロールでスキーマを事前作成し、アプリロールに DML を付与するか、新しいマイグレーションを適用するブートのために DDL を一時的に付与します |
286| `/oauth/callback` は「Sign-in could not be completed」を表示 | メールドメインが拒否されました。id\_token 検証が失敗しました。または `email_verified` が明示的に `false` です。ゲートウェイは常にオーバーライドなしで拒否します | `allowed_email_domains` を確認し、IdP が検証済み `email` クレームを返すことを確認します。`email_verified: false` の場合は、IdP 側の検証を修正します。IdP がメールを別のクレーム名の下で発行する場合は、`oidc.email_claim` を設定します。 |288| `/oauth/callback` は「Sign-in could not be completed」を表示 | メールドメインが拒否されました。id\_token 検証が失敗しました。または `email_verified` が明示的に `false` です。ゲートウェイは常にオーバーライドなしで拒否します | `allowed_email_domains` を確認し、IdP が検証済み `email` クレームを返すことを確認します。`email_verified: false` の場合は、IdP 側の検証を修正します。IdP がメールを別のクレーム名の下で発行する場合は、`oidc.email_claim` を設定します。 |
293| サインインは IdP で完了しますが、コールバックは失敗します。Chrome で CSP エラーまたは Safari で「this sign-in link has expired」 | IdP は `response_mode=form_post` を通じてコードを返しました。これは `/oauth/callback` にクロスオリジン POST を通じて自動送信します。Chrome はそれを厳密な CSP の下でブロックします。Safari は送信を許可しますが、コールバックはクエリ文字列のみを読み込みます。 | IdP が `response_mode=query` を尊重することを確認します。ゲートウェイは明示的にリクエストするため、コールバックはプレーンリダイレクトです |295| サインインは IdP で完了しますが、コールバックは失敗します。Chrome で CSP エラーまたは Safari で「this sign-in link has expired」 | IdP は `response_mode=form_post` を通じてコードを返しました。これは `/oauth/callback` にクロスオリジン POST を通じて自動送信します。Chrome はそれを厳密な CSP の下でブロックします。Safari は送信を許可しますが、コールバックはクエリ文字列のみを読み込みます。 | IdP が `response_mode=query` を尊重することを確認します。ゲートウェイは明示的にリクエストするため、コールバックはプレーンリダイレクトです |
294| ログインはローカルで機能しますが、ALB の背後で失敗します | `public_url` が設定されていないため、IdP は内部 `http://` オリジンを `redirect_uri` として取得します | `listen.public_url` を外部 `https://` オリジンに設定します |296| ログインはローカルで機能しますが、ALB の背後で失敗します | `public_url` が設定されていないため、IdP は内部 `http://` オリジンを `redirect_uri` として取得します | `listen.public_url` を外部 `https://` オリジンに設定します |
295| 開発者は信頼プロンプトを繰り返し見ます | TLS 証明書はレプリカごと、またはリクエストごとにローテーションしています | ingress で安定した証明書を使用するか、TLS を 1 回終了し、レプリカをプレーン HTTP で内部で実行します |297| 開発者は信頼プロンプトを繰り返し見ます | TLS 証明書はレプリカごと、またはリクエストごとにローテーションしています | ingress で安定した証明書を使用するか、TLS を 1 回終了し、レプリカをプレーン HTTP で内部で実行します |
296298| CLI `/login`:「Could not verify the gateway's TLS certificate」または `SELF_SIGNED_CERT_IN_CHAIN` | ゲートウェイの TLS チェーンは、CLI ホストの信頼ストアにないプライベート CA によって署名されています | Claude Code はデフォルトでネイティブバイナリで OS 信頼ストアを読み込み、Node 22.15 以降で読み込みます。[`CLAUDE_CODE_CERT_STORE`](/ja/network-config#ca-certificate-store) はこの動作を制御します。CA が OS 信頼ストアにインストールされている場合は、開発者が現在のランタイムにいることを確認します。そうでない場合は、起動する前に `NODE_EXTRA_CA_CERTS` を CA 証明書 PEM に設定します。最初の接続フィンガープリントプロンプトは引き続き適用されます。 || CLI `/login`:「Could not verify the gateway's TLS certificate」または `SELF_SIGNED_CERT_IN_CHAIN` | ゲートウェイの TLS チェーンは、CLI ホストの信頼ストアにないプライベート CA によって署名されています | Claude Code はデフォルトでネイティブバイナリで OS 信頼ストアを読み込み、Node 22.15 以降で読み込みます。[`CLAUDE_CODE_CERT_STORE`](/docs/ja/network-config#ca-certificate-store) はこの動作を制御します。CA が OS 信頼ストアにインストールされている場合は、開発者が現在のランタイムにいることを確認します。そうでない場合は、起動する前に `NODE_EXTRA_CA_CERTS` を CA 証明書 PEM に設定します。最初の接続フィンガープリントプロンプトは引き続き適用されます。 |
297 299
298<h2 id="related">300<h2 id="related">
299 関連301 関連
300</h2>302</h2>
301 303
302304* [Claude apps gateway の概要](/ja/claude-apps-gateway):クイックスタートと開発者接続* [Claude apps gateway の概要](/docs/ja/claude-apps-gateway):クイックスタートと開発者接続
303305* [設定リファレンス](/ja/claude-apps-gateway-config):すべての `gateway.yaml` オプション* [設定リファレンス](/docs/ja/claude-apps-gateway-config):すべての `gateway.yaml` オプション