メインコンテンツへスキップ
このページでは、Google Cloud で Claude apps gateway を実行する 1 つの方法を説明します。この設定は、サポートされている本番環境デプロイメントではなく、カスタマー管理インフラストラクチャの実装例です。各部分がどのように組み合わさるかを確認してから、自分の環境に適応させてください。プラットフォーム非依存の要件については、デプロイメントガイドを参照してください。
この例では、Google Cloud の Agent Platform をモデルアップストリームとして使用し、Cloud Run または GKE をコンピュートに使用して、Google Cloud に Claude apps gateway をプロビジョニングします。Google Workspace は例の ID プロバイダー(IdP)ですが、OpenID Connect(OIDC)準拠の任意の IdP が機能します。oidc ブロックのみが変わります。IdP ごとの詳細については、ID プロバイダーのセットアップを参照してください。

構築内容

Google Cloud 上の Claude apps gateway の図:Claude Code クライアントは HTTPS 経由でゲートウェイ(Cloud Run または GKE)に接続し、ゲートウェイは VPC 内でプライベート IP Cloud SQL データベースと並行して実行され、セッション状態を保存します。ゲートウェイは OIDC 経由で Google Workspace に対してユーザーをサインインさせ、Secret Manager から設定とシークレットを読み取り、モデルリクエストを Agent Platform に転送し、デプロイ時に Artifact Registry からイメージをプルします。
リファレンス設定は以下をプロビジョニングします:
  • ゲートウェイコンテナを実行する 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 上の Internal Application Load Balancer、または GKE 上のクラス gce-internal の内部 GKE Ingress(HTTPS 用)

前提条件

  • 課金が有効になっている GCP プロジェクトと、上記のリソースを作成する権限
  • gcloud auth login で認証された gcloud CLI、およびローカルにインストールされた 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

Service account を作成して IAM を付与する

ゲートウェイは Agent Platform を呼び出す権限を持つ専用 service account として実行されます。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 がないようにします。これは constraints/sql.restrictPublicIp が適用されているプロジェクトも満たします:
Cloud Run または GKE ランタイムは、この VPC 上にあるか、この VPC にルーティングされている必要があります。
5

gateway.yaml を書き込む

upstreams ブロックは auth: {} で Agent Platform を指すため、ゲートウェイはランタイム service account からの Application Default Credentials 経由で認証します。すべてのフィールドについては、設定リファレンスを参照してください。2 つの listen フィールドはゲートウェイの前にあるものに依存します:
  • public_url:Cloud Run または GKE Ingress の背後で必須。ゲートウェイは IdP redirect_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 を使用してドメイン全体の委任を持つ service account を使用して各ユーザーのグループを検索します。これなしで、代わりに email_domain で一致させます。
6

Secret Manager にシークレットを保存する

4 つのシークレットを作成し、claude-gateway service account に roles/secretmanager.secretAccessor を付与します:シークレットがコンテナに到達する方法はトラックによって異なります:
  • GKE では Secret Manager CSI ドライバー経由で /secrets にマウントされ、gateway.yaml${file:/secrets/...} を参照します。
  • Cloud Run では複数のシークレットを 1 つのディレクトリにマウントできないため、gateway.yaml はファイルとしてマウントされ、他の 3 つは環境変数として注入されるため、gateway.yaml は代わりに ${GATEWAY_JWT_SECRET}${OIDC_CLIENT_SECRET}、および ${GATEWAY_POSTGRES_URL} を参照します。
7

デプロイする

以下のコマンドは内部ロードバランサーの背後で本番環境用にデプロイします。
Direct VPC egress(--network--subnet、および --vpc-egress=private-ranges-only 経由)により、サービスは Cloud SQL プライベート IP に直接到達できます。Agent Platform エンドポイントおよび accounts.google.com への公開エグレスは VPC を通さずにインターネットに直接移動するため、Cloud NAT は不要です。invoker IAM チェックはオープンまたは無効にする必要があります。ゲートウェイは独自の OIDC を実行し、そのクライアントは GCP トークンを持たないため、Cloud Run の invoker チェックは認証されていないリクエストを許可する必要があります。ゲートウェイの OIDC サインインは、コンテナに到達すると allowed_email_domains でゲートウェイがどのドメインがサインインできるかを制御して、リクエストを認証します。2 つのフラグが認証されていないリクエストを許可します:
  • --no-invoker-iam-check:管理する allUsers バインディングなしでチェックを無効にし、Domain Restricted Sharing の下で機能します
  • --allow-unauthenticatedallUsersrun.invoker ロールを付与します。組織が --no-invoker-iam-check を許可しない場合はこれを使用します
--ingress 経由のイングレス制限は invoker チェックから独立した別のレイヤーです。サービスを企業ネットワークに制限するために設定したままにしておきます。デフォルトでは、Cloud Run *.run.app URL はパブリックアドレスに解決され、/login プライベートネットワークチェックがこれを拒否します。2 つのトポロジーは開発者にプライベートに解決可能なホスト名を提供し、Cloud Run はどちらもプロビジョニングしません:
  • Internal Application Load Balancer、上記のデプロイコマンドが想定するトポロジー:--ingress=internal-and-cloud-load-balancing でデプロイし、サービスの前に内部 Application Load Balancer をプロビジョニングして内部 DNS 名と証明書を使用し、listen.public_url をそのホスト名に設定します。
  • ロードバランサーなしの内部のみイングレス--ingress=internal でデプロイし、listen.public_url*.run.app URL(以下のリファレンスアセットのデフォルト)のままにします。*.run.app がプライベートに解決するには、ネットワークチームが既に Google API 用の Private Service Connect エンドポイント、*.run.app をそれに解決する Cloud DNS プライベートゾーン、およびそのエンドポイントへのオンプレミスルーティングを運用している必要があります。
Google の Cloud Run のプライベートネットワークガイドは、両方のオプションが必要とするインフラストラクチャをカバーしています。ゲートウェイがプライベートホスト名で提供されたら、サインインを確認します。それまで、Cloud Run のログからコンテナがブートしたことを確認します。最初のサインイン前に OAuth クライアントの認可リダイレクト URI を <public_url>/oauth/callback に更新します。public_url を変更した後に再デプロイします。ゲートウェイはその設定からのみパブリックオリジンをビルドし、X-Forwarded-Host および X-Forwarded-Proto を無視するためです。X-Forwarded-Forlisten.trusted_proxies が設定されている場合にのみクライアント IP に対して尊重されます。
8

ゲートウェイ URL を開発者マシンにプッシュする

ゲートウェイは実行されていますが、開発者は /login からゲートウェイ URL がマシンに配置されるまでそれに到達できません。MDM 経由で各デバイスにデプロイする管理設定ファイルforceLoginMethod および forceLoginGatewayUrl を設定します。開発者が手動で選択できるログインピッカーのゲートウェイオプションはありません。

Terraform リファレンス

リファレンスデプロイメントアセットはこのページの Cloud Run トラックを自動化します。設定とイメージアセットは両方のトラックに適用されます:
  • setup.sh:API の有効化から最初のデプロイまで、完全な Cloud Run パスを歩く冪等な gcloud プロビジョナー
  • terraform/:インフラストラクチャアズコードとしての同じデプロイメント。greenfield デプロイ用:Artifact Registry リポジトリを作成するための対象適用、次にイメージをビルドしてプッシュ、次に完全適用
  • gateway.yaml.example および distroless ランタイムイメージ用の Dockerfile
アーティファクトは Cloud Run イングレスをデフォルトで internal にするため、ロードバランサーは不要です。このページの本番環境の背後の ALB デプロイメントに一致させるには、INGRESS=internal-and-cloud-load-balancingsetup.sh を実行するか、Terraform 変数 ingressINGRESS_TRAFFIC_INTERNAL_LOAD_BALANCER に設定します。アーティファクトは invoker レイヤーもデフォルトで allUsers run.invoker 付与にするため、このページのウォークスルーの --no-invoker-iam-check ではなく逆です。どちらでも機能し、選択は組織のポリシー制約に依存します。 アセットは実装例として提供されており、サポートされている本番環境アーティファクトではありません。環境に合わせてレビューして適応させてください。

トラブルシューティング

ゲートウェイブートとログインエラーについては、プラットフォーム非依存のトラブルシューティングテーブルを参照してください。以下のエントリは Google Cloud に固有です。

次のステップ