Cloud Run 用に Identity-Aware Proxy を構成する

このページでは、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 を有効にするには:

  1. Google Cloud コンソールで、[Cloud Run] ページに移動します。

    Cloud Run に移動

  2. デプロイ先の新しいサービスを構成する場合は、[コンテナをデプロイ] > [サービス] を選択します。既存のサービスを構成してデプロイする場合は、サービスをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。

  3. 新しいサービスを構成する場合は、必要に応じて最初のサービス設定のページに記入してから、[Identity-Aware Proxy(IAP)による高度な認証] を選択します。

  4. 既存のサービスを構成してデプロイする場合は、サービスをクリックし、[Identity-Aware Proxy(IAP)による高度な認証] を選択します。

  5. [ポリシーを編集] をクリックして、コンテキストアウェア アクセス ポリシーを作成します。

    • 1 つ以上のプリンシパルと、必要に応じて、各プリンシパルがアプリケーションにアクセスするために満たす必要があるアクセスレベルを追加します。

    • [保存] をクリックします。

  6. [保存] をクリックします。

gcloud

Cloud Run から直接 IAP を有効にするには、アプリのデプロイ時に --iap フラグを追加します。

  1. 次のいずれかのコマンドを使用して 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 です。
  2. サービスが 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 で保護されたリソースへのアクセスを管理するをご覧ください。

  1. 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
    }
    
  2. 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 を無効にするには:

  1. Google Cloud コンソールで、[Cloud Run] ページに移動します。

    Cloud Run に移動

  2. 変更する既存のサービスをクリックします。

  3. [セキュリティ] をクリックし、[Identity-Aware Proxy(IAP)による高度な認証] をオフにします。

  4. [保存] をクリックします。

gcloud

Cloud Run から直接 IAP 無効にするには、アプリのデプロイ時に --no-iap フラグを追加します。

  1. 次のいずれかのコマンドを使用して 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 です。
  2. サービスが 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 を使用します。

コンソール

アクセス権を追加または削除するには:

  1. Google Cloud コンソールで、[Cloud Run] ページに移動します。

    Cloud Run に移動

  2. 変更する既存のサービスをクリックし、[セキュリティ] をクリックします。

  3. [IAP] で [ポリシーを編集] をクリックします。

  4. アクセス権を追加するには、プリンシパルと、必要に応じて追加するアクセスレベルを入力します。

  5. 既存のプリンシパルからアクセス権を削除するには、[アクセスレベル] の横にある [ポリシーを削除] アイコンをクリックします。

  6. [保存] をクリックします。

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 ポリシーを手動で設定する必要があります。

次のステップ