
はじめに
Google Cloud の Cloud Run で動かすアプリケーションへのアクセスを制限したいときに Identity-Aware Proxy (IAP) が使える.IAP を使うとアプリケーション側のコードを変更せずに Google アカウント認証を設定できる.
2026年3月のリリースで Cloud Run と Identity-Aware Proxy (IAP) を直接統合できるようになって使いやすくなった👏 アプリケーションロードバランサが不要になるぞ!
さっそく Terraform で試してみる \( 'ω')/
環境
- Terraform 1.15.6
- hashicorp/google 7.37.0
前提
詳細な手順は以下のドキュメントに書いてある.アクセス制限をする対象として3種類載っていて,よく使うのは Google Workspace の組織に限定するような仕組みだけど,今回は個人の Google アカウント1つに限定してアクセス制限をするような仕組みで構築する.あくまで検証として!
- Inside the organization(組織内)
- Outside the organization(組織外)
- No organization(組織なし)
事前準備として Google Cloud プロジェクトで OAuth 同意画面の設定と OAuth 2.0 クライアントを発行しておく.「承認済みのリダイレクト URI」はドキュメントを参考に https://iap.googleapis.com/v1/oauth/clientIds/CLIENT_ID:handleRedirect というフォーマットにする.
Cloud Run
Cloud Run の実装はシンプルで google_cloud_run_v2_service に iap_enabled = true を追加すれば OK👌コンテナは何でもよくて cloud-run-hello を使っている.
resource "google_service_account" "cloud_run_iap" { account_id = "cloud-run-iap-sa" display_name = "Cloud Run IAP Service Account" } resource "google_cloud_run_v2_service" "iap" { name = "sandbox-iap" location = "asia-northeast1" ingress = "INGRESS_TRAFFIC_ALL" iap_enabled = true template { service_account = google_service_account.cloud_run_iap.email containers { image = "us-docker.pkg.dev/cloudrun/container/hello" ports { container_port = 8080 } } } }
Identity and Access Management (IAM)
まずは google_cloud_run_v2_service_iam_member を使って IAP サービスエージェントに roles/run.invoker を割り当てる.サービスアカウントはドキュメントに serviceAccount:service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com と書いてあった.
さらに google_iap_web_cloud_run_service_iam_member を使って IAP 経由で Cloud Run にアクセスする個人の Google アカウントに対して roles/iap.httpsResourceAccessor を割り当てる.
data "google_project" "current" {} resource "google_cloud_run_v2_service_iam_member" "iap_invoker" { name = google_cloud_run_v2_service.iap.name location = google_cloud_run_v2_service.iap.location role = "roles/run.invoker" member = "serviceAccount:service-${data.google_project.current.number}@gcp-sa-iap.iam.gserviceaccount.com" } resource "google_iap_web_cloud_run_service_iam_member" "user" { project = data.google_project.current.project_id location = google_cloud_run_v2_service.iap.location cloud_run_service_name = google_cloud_run_v2_service.iap.name role = "roles/iap.httpsResourceAccessor" member = "user:y.yoshida22@gmail.com" }
IAP 側でカスタム OAuth を設定する
最後に IAP 側で「カスタム OAuth(特定の制御、ブランディング、外部ユーザー用)」を選択して「カスタム クライアント ID とシークレット」を設定すれば OK👌
動作確認
Cloud Run の URL にアクセスすると Google のログイン画面にリダイレクトされた.

個人の Google アカウントでログインすると期待通りにアプリケーションにアクセスできた❗️

また検証用で契約している Google Workspace の Google アカウントでログインすると今度は You don't have access というエラーになって同じく期待通りだった \( 'ω')/

まとめ
Cloud Run と Identity-Aware Proxy (IAP) を直接統合できるようになって便利👏 最近よく Cloud Run + Identity-Aware Proxy (IAP) という組み合わせを聞く気がする.
特に最近は Vibe Coding の普及もあって社内で使うアプリケーションを気軽に実装できるようになったけど,安全に社内に共有するにはどうしたら良いんだろう!?という相談が増えていると思う.今回紹介した Cloud Run + Identity-Aware Proxy (IAP) も使えるし,他にも AWS で Application Load Balancer (ALB) + Google Workspace や Cloudflare Access + Google Workspace も使える.
多くの選択肢を試しておきたいなーと思う💪