このページでは、Google Cloud で Claude apps gateway を実行する 1 つの方法を説明します。この設定は、サポートされている本番環境デプロイメントではなく、カスタマー管理インフラストラクチャの実装例です。各部分がどのように組み合わさるかを確認してから、自分の環境に適応させてください。プラットフォーム非依存の要件については、デプロイメントガイドを参照してください。
oidc ブロックのみが変わります。IdP ごとの詳細については、ID プロバイダーのセットアップを参照してください。
構築内容
- ゲートウェイコンテナを実行する Cloud Run サービスまたは GKE Deployment
- ゲートウェイイメージ用の Artifact Registry リポジトリ
- ゲートウェイのストア用のプライベート IP のみの Cloud SQL for PostgreSQL インスタンス
gateway.yaml、JWT 署名キー、OIDC クライアントシークレット、および Postgres URL 用の Secret Manager シークレットroles/aiplatform.userを持つ Service account、Cloud Run に直接アタッチされるか、GKE 上で Workload Identity 経由でバインドされます- Cloud Run 前の内部 Application Load Balancer(このチュートリアルではゲートウェイ用に設定しますが、作成しません)、または GKE 上のクラス
gce-internalの内部 GKE Ingress である HTTPS フロントエンド(お客様が提供)
前提条件
- 課金が有効になっている GCP プロジェクトと、上記のリソースを作成する権限
gcloud auth loginで認証されたgcloudCLI、およびローカルにインストールされた Docker- GKE トラック用:
kubectl、および以下のウォークスルーで作成された VPC 上の GKE クラスタ - Model Garden で必要な Claude モデルへのアクセス、それらを公開している地域内
- リダイレクト URI が
https://<gateway-host>/oauth/callbackの Google Workspace OAuth 2.0 ウェブアプリケーションクライアント。ID プロバイダーのセットアップを参照してください - ゲートウェイ用の TLS ホスト名。通常はロードバランサーを指すプライベート DNS 名
ゲートウェイをデプロイする
以下の手順は、gcloud コマンドを使用して完全なデプロイメントをプロビジョニングします。
1
API を有効にする
このチュートリアルで使用するサービス API を有効にします。必要な API はデプロイメント パスによって異なります。
computeとservicenetworking:プライベート IP Cloud SQL パスに必要run:Cloud Run のみcontainer:GKE のみ
2
サービス アカウントを作成して IAM を付与する
ゲートウェイは Google Cloud の Agent Platform を呼び出す権限を持つ専用サービス アカウントとして実行されます。VPC 経由で Cloud SQL に到達するパスワード ユーザーを使用するため、Cloud SQL IAM ロールは不要です。次に、Model Garden でプロジェクトの Claude モデルを有効にします。モデルは特定のリージョンに公開されるため、各モデル カードを確認してください。
3
イメージをビルドして Artifact Registry にプッシュする
コンテナ イメージ要件に従ってイメージをビルドし(
linux-x64 glibc バイナリを使用)、プッシュします。4
Cloud SQL for PostgreSQL をプロビジョニングする
Private Services Access 経由で VPC 上にインスタンスを作成して、パブリック IP を持たないようにします。これは Cloud Run または GKE ランタイムは、この VPC 上にあるか、この VPC にルーティングされている必要があります。
constraints/sql.restrictPublicIp が適用されているプロジェクトの要件も満たします。5
gateway.yaml を作成する
upstreams ブロックは Google Cloud の Agent Platform を auth: {} で指定するため、ゲートウェイはランタイム サービス アカウントからのアプリケーション デフォルト認証情報を使用して認証します。すべてのフィールドについては、設定リファレンスを参照してください。2 つの listen フィールドはゲートウェイの前面を説明します。public_url:外部https://オリジン。ループバック以外のバインドに必須です。listenリファレンスを参照してください。ゲートウェイは IdPredirect_uriと検出ドキュメントをこの値からのみビルドし、X-Forwarded-*ヘッダーからはビルドしません。trusted_proxies:フロント エンドのソース範囲。ゲートウェイは TCP ピアがこのリストにある場合にのみX-Forwarded-Forを受け入れ、信頼できるホップを超えてチェーンをウォークするため、IP ごとのサインイン レート制限と監査イベントはロード バランサーの IP ではなく開発者 IP を記録します。
trusted_proxies をフロント エンドに合わせて設定します。クラス gce の外部 GKE Ingress はリストされていません。これはパブリック転送ルール アドレスをプロビジョニングし、/login プライベート ネットワーク チェックがこれを拒否します。以下の例は、内部ロード バランサー イン フロント オブ Cloud Run の値を使用します。
gateway.yaml
Google id_tokens は
groups クレームを含みません。Google Workspace を IdP として managed.policiesでグループベースのポリシーを使用するには、oidc.google_groupsを設定します。これは Admin SDK Directory API を使用してドメイン全体の委任を持つサービス アカウントを通じて各ユーザーのグループを検索します。これがない場合は、代わりに email_domain で一致させてください。6
Secret Manager にシークレットを保存する
4 つのシークレットを作成し、
roles/secretmanager.secretAccessor を claude-gateway サービス アカウントに付与します。シークレットがコンテナに到達する方法はトラックによって異なります。
- GKE では Secret Manager CSI ドライバー経由でファイルとしてマウントされ、
gateway.yamlは${file:/secrets/...}を参照します。 - Cloud Run では複数のシークレットを 1 つのディレクトリにマウントできないため、
gateway.yamlはファイルとしてマウントされ、他の 3 つは環境変数として注入されるため、gateway.yamlは代わりに${GATEWAY_JWT_SECRET}、${OIDC_CLIENT_SECRET}、${GATEWAY_POSTGRES_URL}を参照します。
7
デプロイ
- Cloud Run
- GKE
以下のコマンドは内部ロード バランサーの背後で本番環境用にデプロイします。
--network、--subnet、--vpc-egress=private-ranges-only 経由の直接 VPC エグレスにより、サービスは Cloud SQL プライベート IP に直接到達できます。各インスタンスは最大 store.max_connections Postgres 接続を保持し、デフォルトは 5 です。最大インスタンス数 × store.max_connections を Cloud SQL ティアの接続制限以下に保ちます。リファレンス アセットは、この理由から db-g1-small ティアのインスタンスを 8 に制限しています。Google Cloud の Agent Platform エンドポイントと accounts.google.com へのパブリック エグレスは VPC を通さずにインターネットに直接移動するため、Cloud NAT は不要です。インボーカー IAM チェックは開いているか無効にする必要があります。ゲートウェイは独自の OIDC を実行し、そのクライアントは GCP トークンを持たないため、Cloud Run のインボーカー チェックは認証されていないリクエストを許可する必要があります。ゲートウェイの OIDC サインインはリクエストがコンテナに到達すると認証し、allowed_email_domains がサインインできるドメインをゲートします。2 つのフラグが認証されていないリクエストを許可します。--no-invoker-iam-check:管理するallUsersバインディングなしでチェックを無効にし、Domain Restricted Sharing の下で機能します--allow-unauthenticated:allUsersにrun.invokerロールを付与します。組織が--no-invoker-iam-checkを許可しない場合はこれを使用します
--ingress 経由のイングレス制限はインボーカー チェックから独立した別のレイヤーです。サービスを企業ネットワークに制限するために設定したままにしておきます。デフォルトでは Cloud Run *.run.app URL はパブリック アドレスに解決され、/login プライベート ネットワーク チェックがこれを拒否します。2 つのトポロジーが開発者にプライベートに解決可能なホスト名を提供し、Cloud Run はどちらもプロビジョニングしません。- 内部 Application Load Balancer、このページの
gateway.yamlが想定するトポロジー:内部 Application Load Balancer をサービスの前にプロビジョニングして、内部 DNS 名と証明書を使用し、listen.public_urlをそのホスト名に設定します。internalイングレス設定は既に内部 Application Load Balancer からのトラフィックを許可します。internal-and-cloud-load-balancingはさらに外部 Application Load Balancer を許可しますが、そのパブリック アドレスは/loginプライベート ネットワーク チェックが拒否するため、このページのトポロジーはそれを必要としません。 - ロード バランサーなしの内部専用イングレス:デプロイ コマンドをそのままにして、
listen.public_urlを*.run.appURL(以下のリファレンス アセットのデフォルト)のままにします。*.run.appがプライベートに解決するには、ネットワーク チームが既に Google API 用の Private Service Connect エンドポイント、*.run.appをそれに解決する Cloud DNS プライベート ゾーン、およびそのエンドポイントへのオンプレミス ルーティングを運用している必要があります。
<public_url>/oauth/callback に更新します。public_url を変更した後は再デプロイします。ゲートウェイはその設定からのみパブリック オリジンをビルドし、X-Forwarded-Host と X-Forwarded-Proto を無視するためです。X-Forwarded-For は listen.trusted_proxies が設定されている場合にのみクライアント IP に対して受け入れられます。8
ゲートウェイ URL を開発者マシンにプッシュする
ゲートウェイは実行されていますが、ゲートウェイ URL がマシンに配置されるまで、開発者は
/login からそれに到達できません。完全なマネージド設定スニペットを forceLoginMethod、forceLoginGatewayUrl、および parentSettingsBehavior: "merge" オプトインと共に、MDM 経由で各デバイスにデプロイします。開発者が手動で選択できるログイン ピッカーのゲートウェイ オプションはありません。Terraform リファレンス
リファレンスデプロイメントアセットはこのページの Cloud Run トラックを自動化します。設定とイメージアセットは両方のトラックに適用されます:setup.sh:API の有効化から最初のデプロイまで、完全な Cloud Run パスを歩む冪等なgcloudプロビジョナーterraform/:インフラストラクチャアズコードとしての同じデプロイメント。greenfield デプロイ用:Artifact Registry リポジトリを作成するための対象適用、次にイメージをビルドしてプッシュ、次に完全適用gateway.yaml.exampleおよび distroless ランタイムイメージ用のDockerfile
internal にするため、このページのデプロイコマンドに一致します。その設定は、サービスの前に内部 Application Load Balancer がある場合もない場合も機能し、アーティファクトはロードバランサーも作成しません。アーティファクトは invoker レイヤーもデフォルトで allUsers run.invoker 付与にするため、このページのウォークスルーの --no-invoker-iam-check ではなく逆です。どちらでも機能し、選択は組織のポリシー制約に依存します。
アセットは実装例として提供されており、サポートされている本番環境アーティファクトではありません。環境に合わせてレビューして適応させてください。
トラブルシューティング
ゲートウェイブートとログインエラーについては、プラットフォーム非依存のトラブルシューティングテーブルを参照してください。以下のエントリは Google Cloud に固有です。次のステップ
- 設定リファレンス:すべての
gateway.yamlオプション(managed.policiesおよびtelemetryを含む) - デプロイメントと運用:IdP セットアップ、ヘルスチェック、JWT シークレットローテーション、アップグレード、およびセキュリティモデル
- Claude apps gateway 概要:クイックスタートと開発者の接続