![[アップデート] IAP for Cloud Run がプレビューでリリースされていたので触ってみた #GoogleCloudNext](https://images.ctfassets.net/ct0aopd36mqt/mfvnpH15PsVPOaNIwYZ33/4e17c25441441bdd9f44672815983fd3/eyechatch_googlecloudnext25.png)
[アップデート] IAP for Cloud Run がプレビューでリリースされていたので触ってみた #GoogleCloudNext
はじめに
2025/4/9-11 の 3日間の日程で Google Cloud Next '25 がラスベガスで開催されています!
開催に先駆けて 4/7(GMT-7)に Identity-Aware Proxy(IAP) for Cloud Run がプレビューでリリース(Google Cloud Next でのリリースというわけではありませんが、、、)されていたので、早速触ってみました。
Identity-Aware Proxy(IAP) とは
Identity-Aware Proxy(IAP) とは、HTTPS によってアクセスするアプリケーションに対し、IAM(Identity & Access Management) によるアクセス制御を提供できるサービスです。
ユーザがインターネット経由で Cloud Run や Compute Engine にホストされるアプリケーションに対しアクセスする際、IAP 経由でアクセスすることで、IAM での認証と認可を経たユーザのみが対象のアプリケーションにアクセスすることができます。
Cloud Run サービスに IAP を構成するためには Cloud Load Balancing を構成する必要がありますが、本プレビューリリースでは Cloud Run で直接 IAP を構成できるようになりました。
やってみた
今回は Cloud Shell を利用し、サンプルイメージで Cloud Run サービスをデプロイして IAP の動作を確認してみたいと思います。本検証ではオーナー権限で実施しました。
API 有効化
Cloud Shell から以下コマンドを実行し、Cloud Run と IAP の API を有効化します。
gcloud services enable iap.googleapis.com run.googleapis.com
Cloud Run サービスを IAP 有効化してデプロイ
以下コマンドを実行し、IAP を有効化して Cloud Run サービスをデプロイします。
今回は IAP 動作の検証のみとするため --no-invoker-iam-check
を入力しました。
gcloud beta run deploy hello-iap \
--region=asia-northeast1 \
--image=us-docker.pkg.dev/cloudrun/container/hello:latest \
--no-invoker-iam-check \
--iap
なお、--invoker-iam-check
とすると IAP での認証フェーズのあとに IAM 認証フェーズに移るようです。
If you use both IAP and IAM on the same Cloud Run service, note the following conditions:
- Both the IAP and the IAM checks are performed.
- The IAP check happens first and accepts or blocks requests based on the IAP configuration.
- If the request passes the IAP check, IAP uses its own service account to authenticate to Cloud Run's IAM check.
- Because the IAP check happens first, some services, such as Pub/Sub, might not authenticate correctly to it.
Cloud Run の IAP 有効化を確認
以下コマンドで Cloud Run の IAP が有効化されているか確認できます。
gcloud beta run services describe hello-iap \
--region=asia-northeast1 \
--format=export
出力結果が以下のように run.googleapis.com/iap-enabled: 'true'
となっていれば IAP が有効化されています。
metadata:
annotations:
run.googleapis.com/iap-enabled: 'true'
プリンシパルに対する権限付与
IAP 経由で Cloud Run サービスにアクセスするプリンシパルに対し、IAM ロール IAP で保護されたウェブアプリ ユーザー(roles/iap.httpsResourceAccessor) を付与する必要があります。以下コマンドで権限付与します。
gcloud beta iap web add-iam-policy-binding \
--member=user:<User Email Address> \
--role=roles/iap.httpsResourceAccessor \
--region=asia-northeast1 \
--resource-type=cloud-run \
--service=hello-iap
なお、上記の設定は Cloud Console 上だと [Cloud Run] から対象のサービス名をクリックし、[セキュリティ]タブ -> [Identity-Aware Proxy プレビュー] -> [ポリシーを編集] をクリックすることで確認できます。
[Principal 1] に権限付与したユーザが設定されていることが確認できます。なお、アクセスレベル(Access Context Manager)は今回設定していないため空になっています。
アクセス確認
権限を付与したユーザアカウントの Web ブラウザから Cloud Run サービスの URL にアクセスすると以下の画面となりました。
権限を付与していないユーザアカウントで URL にアクセスすると以下のようになります。
おわりに
ロードバランサなしで IAP を構成できるため、簡単に Cloud Run へのアクセスに IAP を導入できました。
Access Context Manager で定義したアクセスレベルをアタッチすることにより、送信元 IP アドレスなどの制限をかけることも可能です。Cloud Run のアクセス制御の幅が広がるアップデートであったかと思います。