この Codelab について
1. はじめに
概要
この Codelab では、Cloud Run から Identity-Aware Proxy を有効にし、IAP にルーティングして認証することで、Cloud Run サービスに送信されるトラフィックを保護する方法について説明します。Cloud Run から IAP を有効にすると、デフォルトの run.app URL やロードバランサなど、すべての上り(内向き)パスからワンクリックでトラフィックをルーティングできます。
この Codelab では、hello コンテナ サービスをデプロイします。IAP を使用して許可リストに登録されたユーザーのみがサービスにアクセスできます。
その他の既知の制限については、Cloud Run での IAP のドキュメントをご覧ください。
学習内容
- Cloud Run でワンクリック IAP を有効にする方法
- IAP を介してユーザー ID に Cloud Run サービスへのアクセス権を付与する方法
2. 始める前に
API を有効にする
この Codelab の使用を開始する前に、次の API を有効にします。
gcloud services enable \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com \
iap.googleapis.com \
run.googleapis.com \
cloudresourcemanager.googleapis.com
3. 環境変数を作成する
この Codelab 全体で使用する環境変数を設定します。
export PROJECT_ID=<YOUR_PROJECT_ID>
export REGION=<YOUR_REGION>
export SERVICE_NAME=iap-example
export SERVICE_ACCOUNT_NAME=iap-example-sa
export PROJECT_NUMBER=$(gcloud projects describe "${PROJECT_ID}" --format="value(projectNumber)")
4. IAP を有効にしてサービスをデプロイする
次のコマンドを実行して、サービス アカウント(Cloud Run サービス ID として使用)を作成します。
gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME \
--display-name="IAP codelab CR identity"
IAP を有効にして hello コンテナ イメージをデプロイします。
gcloud beta run deploy ${SERVICE_NAME} \
--image=us-docker.pkg.dev/cloudrun/container/hello \
--region=${REGION} \
--service-account $SERVICE_ACCOUNT_NAME@${PROJECT_ID}.iam.gserviceaccount.com \
--no-allow-unauthenticated \
--iap
注: この時点でアプリケーションにアクセスしようとすると、You don't have access
エラーページが表示されます。次のステップでは、IAP を使用してユーザーにアクセス権を付与します。
5. IAP アクセス制御を構成する
IAP サービス エージェントを作成します。
gcloud beta services identity create --service=iap.googleapis.com --project=${PROJECT_ID}
IAP サービス アカウントに Cloud Run 起動元のロールを割り当てる
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-iap.iam.gserviceaccount.com" \
--role="roles/run.invoker"
IAP を介して特定のユーザーまたはグループを許可してユーザーにアクセス権を付与する
EMAIL_ADDRESS=<YOUR_EMAIL>
gcloud beta iap web add-iam-policy-binding \
--resource-type=cloud-run \
--service=${SERVICE_NAME} \
--region=${REGION} \
--member=user:${EMAIL_ADDRESS} \
--role=roles/iap.httpsResourceAccessor \
--condition=None
注: 必要に応じて、メンバー パラメータで group:your-group@example.com を使用することもできます。
6. アプリケーションをテストする
アプリへのアクセス権を確認する
サンプルの Cloud Run サービスの URL を取得します。
gcloud run services describe ${SERVICE_NAME} --region ${REGION} --format 'value(status.url)'
ブラウザで URL を開くと、[It's Running!コンテナ イメージが Cloud Run に正常にデプロイされました」
アプリへのアクセス権の削除を確認する
アプリへのアクセス権を削除するには、次のコマンドを実行します。
gcloud beta iap web remove-iam-policy-binding \
--resource-type=cloud-run \
--service=${SERVICE_NAME} \
--region=${REGION} \
--member=user:${EMAIL_ADDRESS} \
--role=roles/iap.httpsResourceAccessor
IAM ポリシーが反映されるまで数分待ちます。ブラウザで URL を開くと、You don't have access
エラー ページが表示されます。
7. お疲れさまでした
以上で、この Codelab は完了です。
Cloud Run IAP のドキュメントを確認することをおすすめします。
学習した内容
- Cloud Run で 1 クリック IAP を有効にする方法
- IAP を介してユーザー ID に Cloud Run サービスへのアクセス権を付与する方法
8. クリーンアップ
誤って課金されないようにするには、たとえば、Cloud Run サービスが無料 tier の Cloud Run 呼び出しの月間割り当てを超える回数を誤って呼び出された場合は、手順 6 で作成した Cloud Run サービス iap-example
を削除します。
Cloud Run サービスを削除するには、Cloud Run Cloud コンソール(https://console.cloud.google.com/run)に移動し、iap-example
サービスを削除します。
プロジェクト全体を削除するには、[リソースの管理] に移動し、プロジェクトを選択して [削除] を選択します。プロジェクトを削除する場合は、Cloud SDK でプロジェクトを変更する必要があります。gcloud projects list
を実行すると、使用可能なすべてのプロジェクトのリストが表示されます。