Cloud Run での IAP の有効化

このページでは、Identity-Aware Proxy(IAP)を使用して Cloud Run サービスを保護する方法について説明します。

既知の制限事項

  • HTTP/2 が有効な Cloud Run サービスでは、IAP で保護されると、リクエスト時にリダイレクトの無限ループが発生します。この動作は想定されておらず、将来的には対処される予定です。現時点では、この動作を回避するため、サービスが IAP の背後にある場合は、HTTP/2 構成(デフォルト設定)を無効にすることをおすすめします。

  • 内部ロードバランサを含む Cloud Run には、BeyondCorp Enterprise サブスクリプションが必要です。

  • IAP は、X-Serverless-Authorization ヘッダーを使用して Cloud Run の認証を行います。Cloud Run は、署名を削除した後、このヘッダーをサービスに渡します。サービスが IAM 認証を必要とする別の Cloud Run サービスにリクエストを転送するように設計されている場合は、まずこのヘッダーを削除するようにサービスを更新します。

  • IAP は Cloud CDN との互換性はありません。

始める前に

Cloud Run で IAP を有効にするには、次のものが必要です。

IAP は、Google が管理する OAuth クライアントを使用してユーザーを認証します。組織内のユーザーのみが IAP 対応アプリケーションにアクセスできます。組織外のユーザーにアクセスを許可するには、外部アプリケーション用に IAP を有効にするをご覧ください。

IAP の有効化

コンソール

Google Cloud コンソールを使用して IAP を有効にする場合、Google が管理する OAuth クライアントは使用できません。

プロジェクトの OAuth 同意画面をまだ構成していない場合は、画面を構成するように指示されます。OAuth 同意画面を構成する方法については、OAuth 同意画面の設定をご覧ください。

IAP アクセス権の設定

  1. [Identity-Aware Proxy] ページに移動します。
  2. IAP で保護するプロジェクトを選択します。
  3. [アプリケーション] で、メンバーを追加するロードバランサ バックエンド サービスの横にあるチェックボックスをオンにします。
  4. 右側のパネルで [メンバーを追加] をクリックします。
  5. [メンバーの追加] ダイアログで、プロジェクトに対する IAP で保護されたウェブアプリ ユーザーの役割を持つグループ、または個人のアカウントを入力します。メンバーにすることができるアカウントの種類は以下のとおりです。

    • Google アカウント: user@gmail.com - これは、user@google.com やその他のワークスペース ドメインなどの Google Workspace のアカウントでもかまいません。
    • Google グループ: admins@googlegroups.com
    • サービス アカウント: server@example.gserviceaccount.com
    • Google Workspace ドメイン: example.com
  6. [役割] のプルダウン リストから [Cloud IAP] > [IAP で保護されたウェブアプリ ユーザー] を選択します。

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

IAP の有効化

  1. IAP ページの [アプリケーション] で、アクセスを制限するロードバランサのバックエンド サービスを見つけます。リソースの IAP を有効にするには、[IAP] 切り替えボタンをクリックします。IAP を有効にするには:
    • ロードバランサのフロントエンドの構成内では、少なくとも 1 つのプロトコルは HTTPS でなければなりません。ロードバランサの設定をご覧ください。
    • compute.backendServices.updateclientauthconfig.clients.createclientauthconfig.clients.getWithSecret 権限が必要です。上記の権限は、プロジェクト編集者などの役割によって付与されます。詳細については、IAP で保護されたリソースへのアクセスを管理するをご覧ください。
  2. 表示された [IAP の有効化] ウィンドウで [有効にする] をクリックし、IAP でリソースを保護することを確認します。IAP が有効になった後は、ロードバランサへのすべての接続でログイン認証情報が必要になります。プロジェクトで IAP で保護されたウェブアプリ ユーザーの役割を持つアカウントにのみアクセスが許可されます。
  3. IAM によるアクセス制御の手順に沿って、IAP がトラフィックを Cloud Run バックエンド サービスに送信することを承認します。

    • プリンシパル: service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com
    • ロール: Cloud Run 起動元

gcloud

  1. まだ作成していない場合は、次のコマンドを実行してサービス アカウントを作成します。以前にサービス アカウントを作成している場合、コマンドを実行しても重複するサービス アカウントは作成されません。
    gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
  2. 次のコマンドを実行して、前の手順で作成したサービス アカウントに起動元権限を付与します。
    gcloud run services add-iam-policy-binding [SERVICE-NAME] \
    --member='serviceAccount:service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com'  \
    --role='roles/run.invoker'
    
  3. ロードバランサのバックエンド サービスがグローバルかリージョンかに応じて、グローバル スコープまたはリージョン スコープのコマンドを実行して IAP を有効にします。前のステップの OAuth クライアント ID とシークレットを使用します。

    グローバル スコープ

    gcloud compute backend-services update BACKEND_SERVICE_NAME --global --iap=enabled
    

    リージョン スコープ

    gcloud compute backend-services update BACKEND_SERVICE_NAME --region REGION_NAME --iap=enabled
    
    以下を置き換えます。

    • BACKEND_SERVICE_NAME: バックエンド サービスの名前。
    • REGION_NAME: IAP を有効にするリージョン。

IAP を有効にすると、Google Cloud CLI で Identity and Access Management のロール roles/iap.httpsResourceAccessor を使用して IAP アクセス ポリシーを操作できます。詳細については、ロールと権限の管理をご覧ください。

アクセスを制限する Cloud Run の構成

内部クライアントと外部ロードバランサにのみアクセスを許可するように Cloud Run サービスを構成できます。これにより、公共のインターネットからのすべての直接リクエストがブロックされます。

Cloud Run の上り(内向き)の制限の手順に沿って、Cloud Run サービスの上り(内向き)設定を Internal Load Balancing と Cloud Load Balancing に構成します。

エラーのトラブルシューティング

 The IAP service account is not provisioned 

このエラーが表示された場合は、gcloud CLI を使用して Cloud Run サービスで IAP を有効にしようとしています。gcloud CLI による IAP の設定には、次のコマンドを使用してプロジェクトの IAP サービス アカウントをプロビジョニングする追加のステップが含まれます。 gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]

 Your client does not have permission to get URL from this server 
  • IAP は、IAP サービス アカウントの権限を使用して、Cloud Run サービスを呼び出します。Cloud Run 起動元権限が次のサービス アカウントに付与されていることを確認します。 service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com

  • 上記のサービス アカウントに Cloud Run 起動元権限を付与しても問題が解決しない場合は、Cloud Run サービスを再デプロイします。

次のステップ

Terraform を使用して Cloud Run の IAP を設定する場合は、Terraform のコードサンプルをご覧ください。