[2025/1/15 までに対応必須] Cloud Run へのコンテナイメージを利用したデプロイについては権限追加が必要になります
Cloud Run の仕様変更
2024/11/26 に Cloud Run の利用ユーザ宛てに [Action Required] Ensure read access on container images deployed to Cloud Run
というタイトルで Cloud Run の仕様変更とユーザ側での対応についてメール通知されましたので解説します。
メールの原文は以下です。
Starting January 15, 2025, Cloud Run will begin explicitly verifying that users or service accounts creating or updating Cloud Run resources have the permission to access deployed container image(s).
We have provided additional information below to guide you through this change.
What you need to know
Currently, the Cloud Run Admin and Cloud Run Developer IAM roles implicitly give permission to deploy container images from Artifact Registry repositories in the same project.
However, starting January 15, 2025, users or service accounts creating or updating a Cloud Run resource will need explicit permission to access deployed container images.
What you need to do
Before January 15, 2025, after creating or updating your Cloud Run resources, use this link to look for "User does not have access to image" errors in audit logs.
If you see an error in audit logs after deploying, action is required:
Ensure that the principal (user or service account) creating or updating Cloud Run resources has the Artifact Registry Reader (roles/artifactregistry.reader) IAM role on the project or container repository containing the container image to be deployed. Refer to our Artifact Registry documentation for detailed instructions.
No action is required in the following cases:
- The person deploying to Cloud Run is a Project Owner or Editor.
- The person deploying to Cloud Run can already pull images from Artifact Registry in this project.
- You are deploying functions or sources to Cloud Run.
- You are using Cloud Functions for Firebase or Firebase App Hosting.
- You are deploying continuously using a Cloud Build Trigger in the same project.
- The Cloud Run audit logs do not contain any error after deploying.
変更内容
現在、Cloud Run 管理者roles/run.admin
や Cloud Run デベロッパーroles/run.developer
の IAM ロールを付与したユーザやサービスアカウントで Cloud Run をデプロイする際、Cloud Run と同じプロジェクトの Artifact Registry のコンテナイメージであれば特別な権限を付与せずともイメージの参照が可能でした。
しかし、2025/1/15より、同一プロジェクトの Artifact Registry からコンテナイメージを参照して Cloud Run をデプロイする際 Artifact Registry 読み取り roles/artifactregistry.reader
の権限が必要なようです。
影響範囲
以下の条件を満たしたときデプロイが失敗します。
-
Artifact Registry Docker リポジトリに push しているコンテナイメージから Cloud Run をデプロイする (Artifact Registry と Cloud Run が同一プロジェクトであっても)
-
Artifact Registry 読み取り
roles/artifactregistry.reader
の権限が無いユーザやサービスアカウントで Cloud Run のデプロイ(作成または更新)を実行する
既にデプロイ済の Cloud Run には影響ありません。
ただし、2025/1/15 以降のリリース作業時にはデプロイが失敗してしまうことになりますので今のうちに対処をしておきましょう。
対策
2025/1/15 までに、Cloud Run のデプロイを実行するユーザ または サービスアカウントに Artifact Registry 読み取り roles/artifactregistry.reader
を付与します。
現状の動作を見てみる
現在 2024/11/29 時点では同一プロジェクト上に Artifact Registry と Cloud Run が構成される場合、デプロイは成功しますがエラーログが確認できます。以下より動作を見ていきます。
Artifact Registry の Docker リポジトリに Cloud Run にデプロイするコンテナを用意しました。
Cloud Run 管理者 roles/run.admin
と サービスアカウントユーザー roles/iam.serviceAccountUser
の IAM ロールのみを付与したユーザで Artifact Registry のコンテナイメージから 同一プロジェクト上で Cloud Run をデプロイしてみます。
Cloud Shell より以下を実行します。
export PROJECT_ID=$(gcloud config get-value project)
gcloud run deploy my-cloud-run-app \
--image asia-northeast1-docker.pkg.dev/${PROJECT_ID}/docker-repo/my-cloud-run-app:latest \
--region asia-northeast1
Allow unauthenticated invocations to [my-cloud-run-app] (y/N)? y
Deploying container to Cloud Run service [my-cloud-run-app] in project [da-test-437400] region [asia-northeast1]
OK Deploying new service... Done.
OK Creating Revision...
OK Routing traffic...
OK Setting IAM Policy...
Done.
Service [my-cloud-run-app] revision [my-cloud-run-app-00001-wtl] has been deployed and is serving 100 percent of traffic.
Service URL: https://my-cloud-run-app-891566352225.asia-northeast1.run.app
問題なくデプロイできました。
しかし、Cloud Logging のログエクスプローラーから以下クエリでログを検索してみるとエラーが確認できます。
resource.type = "cloud_run_revision"
severity=ERROR
"User does not have access to image"
検索結果のログよりステータスを抜粋すると以下のメッセージが確認できます。
status: {
code: 403
message: "Cloud Run API check failed. Requests will be rejected after January 2025 hard enforcement deadline. User does not have access to image asia-northeast1-docker.pkg.dev/<PROJECT_ID>/docker-repo/my-cloud-run-app:latest"
}
現時点でデプロイは成功しましたが、上記ログの記載にもあるように 2025/1/15 以降はリクエストが失敗することとなります。
今度はユーザに Artifact Registry 読み取り roles/artifactregistry.reader
の IAM ロールを付与してみます。
新たに別の Cloud Run をデプロイします。
gcloud run deploy my-cloud-run-app-2 \
--image asia-northeast1-docker.pkg.dev/${PROJECT_ID}/docker-repo/my-cloud-run-app:latest \
--region asia-northeast1
先ほどと同様にログを検索してみましたが、エラーログは出力されていないようでした。こちらの手順が正しい実行方法であることがわかります。
おわりに
2025/1/15 以降の Cloud Run のデプロイに影響がありますので、仕様変更の対策は即時進めていただくことをお勧めします。