G-gen の佐々木です。当記事では、Cloud Run のサービスに直接 Identity-Aware Proxy(IAP)を構成する方法について解説します。

前提知識
Cloud Run
Cloud Run とは、Google Cloud のマネージドなコンテナ実行環境でアプリケーションを実行することができる、サーバーレス コンテナコンピューティング サービスです。
Cloud Run には、Cloud Run services、Cloud Run jobs、Cloud Run functions(旧称 Cloud Functions)の3種類がありますが、当記事の内容は HTTP リクエストベースでアプリケーションを実行できる Cloud Run services および Cloud Run functions に関するものとなります。
Cloud Run の詳細については、以下の記事をご一読ください。
Identity-Aware Proxy(IAP)
Identity-Aware Proxy(以下、IAP)は、Web アプリケーションや、仮想マシンなどのクラウドリソースに対して、アプリケーションレベルの認証機能を提供するサービスです。
IAP を用いることで、Web アプリケーションや仮想マシンにアクセスできるユーザーを、IAP を利用できる IAM ロールがアタッチされた組織内の Google アカウントやグループに制限することができます。
Cloud Run を IAP でアクセス制御する方法
Cloud Run サービスにおいて、IAP を使ってアクセス制御する方法は、2つあります。
- ロードバランサを使用する方法
- Cloud Run サービスに IAP を直接構成する方法
当記事では、2つ目の「Cloud Run サービスに IAP を直接構成する方法」を紹介します。
ロードバランサを使用する方法
従来からある方法として、Cloud Run の前段にアプリケーションロードバランサを作成し、ロードバランサに対して IAP を構成することで、特定の Google アカウントを持つユーザーのみが、Cloud Run 上のアプリケーションにアクセスできるように設定できます。
ロードバランサを使用することで、サービスのエンドポイントとなるドメインを独自のものにすることができるほか、フルマネージドの WAF(Web Application Firewall)サービスである Cloud Armor を使用できるメリットがあります。
しかし、ロードバランサがあることで構成が複雑になったり、Google Cloud 利用料金が増加してしまうというデメリットがあります。

Cloud Run でロードバランサを使用して IAP を構成する方法については、以下の記事で解説しています。
概要
Cloud Run サービスに IAP を直接構成する方法では、ロードバランサを使用する場合と比べて、シンプルかつローコストで、IAP による認証を有効化することができます。
その代わり、サービスのエンドポイントとして独自ドメインを使用することができない点に注意が必要です。

なお、IAP を直接構成する方法は、当記事を執筆した2025年4月現在ではプレビュー段階です。
IAP 認証と IAM 認証の関係
「認証が必要」と設定された Cloud Run で IAP を直接構成する場合、IAP による認証と IAM による認証の両方が行われます。
エンドユーザーの認証は IAP 側で行われます。IAM で IAP で保護された Web アプリ ユーザー(roles/iap.httpsResourceAccessor)ロールを付与されたプリンシパルのみ、IAP が構成された Cloud Run サービスにアクセスすることができます。
IAP による認証が行われたあと、Cloud Run 側で IAM 認証が行われます。この認証では、IAP 自体が持っているサービスアカウント(service-<プロジェクト番号>@gcp-sa-iap.iam.gserviceaccount.com)が使用されるため、このサービスアカウントに対して Cloud Run サービス起動元(roles/run.servicesInvoker)などの IAM ロールを付与する必要があります。

制限事項
Cloud Run で IAP を直接構成する場合、以下の制限事項があります。
- IAP を構成する Cloud Run は組織内のプロジェクトに存在する必要がある
- IAP で認証するプリンシパルは組織内のものである必要がある
- ロードバランサと Cloud Run サービスの両方で IAP を構成することはできない
- IAP を有効化しているサービスでは、Pub/Sub 等のサービスとの統合が機能しなくなる可能性がある
手順
新規サービスの場合
gcloud CLI で新しい Cloud Run サービスをデプロイする際、--iap フラグを使用することで、サービスに対して IAP を構成することができます。
IAP の構成はプレビュー機能のため、gcloud beta コマンドを使用します。
# IAP を有効化したサービスを作成する $ gcloud beta run deploy <サービス名> \ --region=<サービスを作成するリージョン> \ --image=<コンテナイメージのパス> \ --no-allow-unauthenticated \ --iap
コンソールの場合、サービス作成画面の「構成」セクションに「Identity-Aware Proxy」の項目があります。

既存サービス
既存の Cloud Run サービスで IAP を有効化する場合、サービス作成時と同様に --iap フラグを使用します。
# 既存のサービスで IAP を有効化する $ gcloud beta run services update <サービス名> \ --region=<サービスが存在するリージョン> \ --iap
IAP を無効化する場合は、--no-iap フラグを使用することができます。
# 既存のサービスで IAP を無効化する $ gcloud beta run services update <サービス名> \ --region=<サービスが存在するリージョン> \ --no-iap
コンソールでは、サービス詳細画面の「セキュリティ」タブに IAP の設定項目があります。

Context-Aware Access の使用
IAP では、[ポリシーの編集] から、Context-Aware Access のアクセスレベルを設定できます。
これにより、エンドユーザーの IP アドレスやデバイス属性に基づいたアクセス制御を IAP に追加することができます。

佐々木 駿太 (記事一覧)
G-gen最北端、北海道在住のクラウドソリューション部エンジニア
2022年6月にG-genにジョイン。Google Cloud Partner Top Engineer 2025 Fellowに選出。好きなGoogle CloudプロダクトはCloud Run。
趣味はコーヒー、小説(SF、ミステリ)、カラオケなど。
Follow @sasashun0805