このページでは、Cloud Run から Identity-Aware Proxy を有効にし、IAP にルーティングして認証することで、Cloud Run サービスに送信されるトラフィックを保護する方法について説明します。Cloud Run から IAP を有効にすると、デフォルトの run.app
URL やロードバランサなど、すべての上り(内向き)パスからワンクリックでトラフィックをルーティングできます。
既知の制限事項
- プロジェクトが組織内に存在している必要があります。
- ID が同じ組織内のものである必要があります。
- ロードバランサと Cloud Run サービスの両方で IAP を構成することはできません。
- IAP が有効になっている場合、Pub/Sub などの一部の統合が機能しなくなることがあります。
始める前に
Cloud Run から IAP を有効にする
IAP は Cloud Run から有効にできます。
同じ Cloud Run サービスで IAP と IAM の両方を使用する場合は、次の条件に注意してください。
IAP チェックと IAM チェックの両方が実行されます。
IAP チェックが最初に行われ、IAP 構成に基づいてリクエストが承認またはブロックされます。
リクエストが IAP チェックに合格すると、IAP は独自のサービス アカウントを使用して Cloud Run の IAM チェックを認証します。
IAP チェックが最初に行われるため、Pub/Sub などの一部のサービスが正しく認証されない場合があります。
Google Cloud コンソール、Google Cloud CLI、または Terraform を使用して、Cloud Run から IAP を有効にします。
コンソール
Cloud Run から IAP を有効にするには:
Google Cloud コンソールで、[Cloud Run] ページに移動します。
デプロイ先の新しいサービスを構成する場合は、[コンテナをデプロイ] > [サービス] を選択します。既存のサービスを構成してデプロイする場合は、サービスをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。
新しいサービスを構成する場合は、必要に応じて最初のサービス設定のページに記入してから、[Identity-Aware Proxy(IAP)による高度な認証] を選択します。
既存のサービスを構成してデプロイする場合は、サービスをクリックし、[Identity-Aware Proxy(IAP)による高度な認証] を選択します。
[ポリシーを編集] をクリックして、コンテキストアウェア アクセス ポリシーを作成します。
1 つ以上のプリンシパルと、必要に応じて、各プリンシパルがアプリケーションにアクセスするために満たす必要があるアクセスレベルを追加します。
[保存] をクリックします。
[保存] をクリックします。
gcloud
Cloud Run から直接 IAP を有効にするには、アプリのデプロイ時に --iap
フラグを追加します。
次のいずれかのコマンドを使用して Cloud Run サービスをデプロイします。
新しいサービスの場合:
gcloud beta run deploy SERVICE_NAME \ --region=REGION \ --image=IMAGE_URL \ --no-allow-unauthenticated \ --iap
既存のサービスの場合:
gcloud beta run services update SERVICE_NAME \ --region=REGION \ --iap
次のように置き換えます。
- SERVICE_NAME: Cloud Run サービスの名前。
- REGION: Cloud Run リージョンの名前。例:
europe-west1
- IMAGE_URL は、コンテナ イメージへの参照(
us-docker.pkg.dev/cloudrun/container/hello:latest
など)に置き換えます。Artifact Registry を使用する場合は、リポジトリ REPO_NAME がすでに作成されている必要があります。URL の形式はLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
です。
サービスが IAP を有効にして構成されていることを確認するには、次のコマンドを実行します。
gcloud beta run services describe SERVICE_NAME
出力に次の文字列が含まれている必要があります。
Iap Enabled: true
これで、構成された Cloud Run サービスに送信されるすべてのトラフィックが、コンテナに渡される前に、認証のため IAP にルーティングされます。
Terraform
Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。
IAM ポリシーを追加して、IAP サービス エージェントに Cloud Run 起動元(roles/run.invoker
)を付与します。詳細については、IAP で保護されたリソースへのアクセスを管理するをご覧ください。
Terraform 構成の
google_cloud_run_v2_service_iam_policy
リソースに次の内容を追加します。data "google_cloud_run_v2_service_iam_policy" "policy" { project = google_cloud_run_v2_service.default.project location = google_cloud_run_v2_service.default.location name = google_cloud_run_v2_service.default.name }
Terraform 構成の
google_cloud_run_v2_service
リソースに次の内容を追加します。resource "google_cloud_run_v2_service" "default" { provider = google-beta name = "cloudrun-iap-service" location = "europe-west1" ingress = "INGRESS_TRAFFIC_ALL" launch_stage = "BETA" iap_enabled = true template { containers { image = "us-docker.pkg.dev/cloudrun/container/hello" } } }
Cloud Run から IAP を無効にする
IAP を無効にするには、 Google Cloud コンソールまたは Google Cloud CLI を使用します。
コンソール
Cloud Run から IAP を無効にするには:
Google Cloud コンソールで、[Cloud Run] ページに移動します。
変更する既存のサービスをクリックします。
[セキュリティ] をクリックし、[Identity-Aware Proxy(IAP)による高度な認証] をオフにします。
[保存] をクリックします。
gcloud
Cloud Run から直接 IAP 無効にするには、アプリのデプロイ時に --no-iap
フラグを追加します。
次のいずれかのコマンドを使用して Cloud Run サービスをデプロイします。
新しいサービスの場合:
gcloud beta run deploy SERVICE_NAME \ --region=REGION \ --image=IMAGE_URL \ --no-iap
既存のサービスの場合:
gcloud beta run services update SERVICE_NAME \ --region=REGION \ --no-iap
次のように置き換えます。
- SERVICE_NAME: Cloud Run サービスの名前。
- REGION: Cloud Run リージョンの名前。
- IMAGE_URL: コンテナ イメージへの参照(
us-docker.pkg.dev/cloudrun/container/hello:latest
など)。Artifact Registry を使用する場合は、リポジトリ REPO_NAME がすでに作成されている必要があります。URL の形式はLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
です。
サービスが IAP を有効にして構成されていないことを確認するには、次のコマンドを実行します。
gcloud beta run services describe SERVICE_NAME
出力に次の文字列が含まれているべきではありません。
Iap Enabled: true
これで、構成された Cloud Run サービスに送信されるすべてのトラフィックが、コンテナに渡される前に、認証のため IAP にルーティングされなくなります。
ユーザーまたはグループのアクセス権を管理する
デフォルトでは、IAP for Cloud Run は Google アカウントを使用した組織内の ID を使用します。Cloud Run サービスへのアクセス権を追加または削除するには、 Google Cloud コンソールまたは Google Cloud CLI を使用します。
コンソール
アクセス権を追加または削除するには:
Google Cloud コンソールで、[Cloud Run] ページに移動します。
変更する既存のサービスをクリックし、[セキュリティ] をクリックします。
[IAP] で [ポリシーを編集] をクリックします。
アクセス権を追加するには、プリンシパルと、必要に応じて追加するアクセスレベルを入力します。
既存のプリンシパルからアクセス権を削除するには、[アクセスレベル] の横にある [ポリシーを削除] アイコンをクリックします。
[保存] をクリックします。
gcloud
組織内の個々のユーザーまたはグループに対する Cloud Run サービスへのアクセス権を追加または削除するには、次のいずれかのコマンドを実行します。
アクセス権を追加する場合:
gcloud beta iap web add-iam-policy-binding \ --member=user:USER_EMAIL \ --role=roles/iap.httpsResourceAccessor \ --region=REGION \ --resource-type=cloud-run \ --service=SERVICE_NAME
アクセス権を削除する場合:
gcloud beta iap web remove-iam-policy-binding \ --member=user:USER_EMAIL \ --role=roles/iap.httpsResourceAccessor \ --region=REGION \ --resource-type=cloud-run \ --service=SERVICE_NAME
アクセス権を確認する場合:
gcloud beta iap web get-iam-policy \ --region=REGION \ --resource-type=cloud-run \ --service=SERVICE_NAME
次のように置き換えます。
- USER_EMAIL: ユーザーのメールアドレス。
- REGION: Cloud Run リージョンの名前。
- SERVICE_NAME: Cloud Run サービスの名前。
トラブルシューティング
サービス エージェントのエラーが原因で IAM エラーが発生する
新しいプロジェクトで IAP を初めて有効にすると、次のエラーが発生することがあります。
Setting IAM permissions failed
原因は、Cloud Run サービス エージェントのエラーです。この問題を解決するには、もう一度 IAP を有効にするか、IAM ポリシーを手動で設定する必要があります。
次のステップ
- バックエンド サービスまたはロードバランサの IAP を使用して IAP を有効にする方法については、IAP for Cloud Run の有効化をご覧ください。
- IAP for Cloud Run を有効にする際の問題については、エラーのトラブルシューティングをご覧ください。
- 外部 ID の有効化
- OAuth 構成の有効化
- IAP で保護されたリソースへのアクセスの管理
- 組織のポリシーを使用して IAP の有効化を制御する