[アップデート] IAP for Cloud Run がプレビューでリリースされていたので触ってみた #GoogleCloudNext

[アップデート] IAP for Cloud Run がプレビューでリリースされていたので触ってみた #GoogleCloudNext

Cloud Load Balancing 不要で直接 IAP を構成できる機能が Cloud Run にリリースされたので検証してみました。
Clock Icon2025.04.09

はじめに

2025/4/9-11 の 3日間の日程で Google Cloud Next '25 がラスベガスで開催されています!
開催に先駆けて 4/7(GMT-7)に Identity-Aware Proxy(IAP) for Cloud Run がプレビューでリリース(Google Cloud Next でのリリースというわけではありませんが、、、)されていたので、早速触ってみました。

https://cloud.google.com/release-notes#April_07_2025

https://cloud.google.com/run/docs/securing/identity-aware-proxy-cloud-run

Identity-Aware Proxy(IAP) とは

Identity-Aware Proxy(IAP) とは、HTTPS によってアクセスするアプリケーションに対し、IAM(Identity & Access Management) によるアクセス制御を提供できるサービスです。

ユーザがインターネット経由で Cloud Run や Compute Engine にホストされるアプリケーションに対しアクセスする際、IAP 経由でアクセスすることで、IAM での認証と認可を経たユーザのみが対象のアプリケーションにアクセスすることができます。

iap

Cloud Run サービスに IAP を構成するためには Cloud Load Balancing を構成する必要がありますが、本プレビューリリースでは Cloud Run で直接 IAP を構成できるようになりました。

iap-for-cloud-run

やってみた

今回は 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 プレビュー] -> [ポリシーを編集] をクリックすることで確認できます。

cloud-run-iap1

[Principal 1] に権限付与したユーザが設定されていることが確認できます。なお、アクセスレベル(Access Context Manager)は今回設定していないため空になっています。

cloud-run-iap2

アクセス確認

権限を付与したユーザアカウントの Web ブラウザから Cloud Run サービスの URL にアクセスすると以下の画面となりました。

suecess.png (2196×1284)

権限を付与していないユーザアカウントで URL にアクセスすると以下のようになります。

Access Denied

おわりに

ロードバランサなしで IAP を構成できるため、簡単に Cloud Run へのアクセスに IAP を導入できました。

Access Context Manager で定義したアクセスレベルをアタッチすることにより、送信元 IP アドレスなどの制限をかけることも可能です。Cloud Run のアクセス制御の幅が広がるアップデートであったかと思います。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.