Cloud Runには大変お世話になっているのですが、IAPで認証を入れようとしてハマったのでメモ。

以下のように、gcloud run deployしてブラウザからアクセス。抜粋です。

internal-and-cloud-load-balancingとして、内部ネットワークとロードバランサーからのアクセスのみを許容し、さらに--no-allow-unauthenticatedで未認証のリクエストは許可しない形にした。

gcloud run deploy app-with-iap \
--image gcr.io/sample/app-with-iap:latest \
--region asia-northeast1 \
--platform managed \
--ingress internal-and-cloud-load-balancing \
--no-allow-unauthenticated

でもって、IAPを有効にしてデプロイしたんだけど 、IAPの認証を通過した後にCloud Runの実行のところで、Permission denied的なメッセージが出てしまった。

しばらく調べて見つけた答えは以下。

公式のドキュメントにもちゃんと書いてありましたw

以下、ドキュメントから抜粋です。

3.IAM によるアクセス制御の手順に沿って、IAP がトラフィックを Cloud Run バックエンド サービスに送信することを承認します。

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

Cloud Run 起動元というのはroles/run.invokerっていう権限ですね。

書いてあるとおりに、プロジェクトのサービスアカウントにCloud Run 起動元のロールを付与したらちゃんと通りました。

忘れてた。忘れてた。

この記事の環境情報

  • 2023年6月時点のGCP