G-gen の武井です。Cloud Run をデプロイする際、従来アクセスできていた Artifact Registry への読み込みがエラーになる事象に遭遇しましたので、当記事ではその原因と対処方法について説明します。
事象
事象の概要
これまで問題なく実行できていた Cloud Run サービスへのデプロイが、何も構成変更を行っていないのにも関わらず、エラー終了しました。
Cloud Logging に記録されていたエラーログは以下の通りでした。
"message": "User must have permission to read the image, asia-northeast1-docker.pkg.dev/プロジェクト ID/リポジトリ名/イメージ名:latest.
Ensure that the provided container image URL is correct and that the above account has permission to access the image.
If you just enabled the Cloud Run API, the permissions might take a few minutes to propagate. Note that the image is from project [プロジェクト ID], which is not the same as this project [Cloud Run 側のプロジェクト ID].
Permission must be granted to the User from this project. See https://cloud.google.com/run/docs/deploying#other-projects\n Cause: 403 Forbidden\nGET https://asia-northeast1-docker.pkg.dev/v2/プロジェクト ID/リポジトリ名/イメージ名/manifests/latest
\n{\"errors\":[{\"code\":\"DENIED\",\"message\":\"Permission \\"artifactregistry.repositories.downloadArtifacts\\" denied on resource \\"projects/プロジェクト ID/locations/asia-northeast1/repositories/リポジトリ名\\" (or it may not exist)\"}]}\n"
当該環境では Cloud Run API が有効であり、リポジトリ名にも間違いのないことから、Cloud Run をデプロイするプリンシパル(サービスアカウント)に artifactregistry.repositories.downloadArtifacts
が不足していることが原因ではないかと推察されました。
環境構成
当エラーが発生した際の環境構成は以下の通りです。
GitHub Actions で Artifact Registry に Docker イメージをプッシュするところまでは成功しましたが、そのイメージを使って Cloud Run サービスをデプロイする際に、エラーが発生しました。
なお、GitHub Actions はサービスアカウントによる Workload Identity 連携を用いており、後述する権限を付与していました。
IAM ポリシー
当事象が発生した際の IAM ポリシーは、以下の通りでした。
# | プリンシパル | 事前定義 IAM ロール | ロール付与対象リソース |
---|---|---|---|
① | GitHub Actions 用サービスアカウント | Cloud Run デベロッパー(roles/run.developer ) |
Cloud Run をデプロイするプロジェクト |
② | Cloud Run サービスエージェント | Artifact Registry 読み取り(roles/artifactregistry.reader ) |
Artifact Registry があるプロジェクト |
インフラ管理用の GitHub Actions が使用するサービスアカウントについては、Cloud Run デベロッパー以外にも、各リソースを管理する上で必要最小限の事前定義 IAM ロールを付与していました。
また、Cloud Run と Artifact Registry が異なるプロジェクトにある場合は、Artifact Registry 読み取り権限を Cloud Run サービス エージェントに付与する必要があります。
原因
当事象の原因は、Cloud Run の事前定義 IAM ロールの仕様変更でした。Google 側で IAM ロールに関する仕様の変更があったため、従来は問題なく動作していたオペレーションが、エラーを起こすようになってしまったものです。
2024年11月25日、Google から管理者あてにメールの一斉配信があり、Cloud Run のデプロイに使用することができる事前定義の IAM ロール「Cloud Run 管理者(roles/run.admin
)」や「Cloud Run デベロッパー(roles/run.developer
)」に暗黙的に付与されていた Artifact Registory の読み取り権限が順次削除されることが発表されました。この変更は2025年1月15日(米国時間)以降、順次行われています。
この仕様変更により、イメージの参照・ダウンロードができなくなり、結果として Cloud Run のデプロイが失敗するようになりました。
仕様変更に関する詳細は、以下の記事で詳しく解説しています。
対処方法
今回の場合、GitHub Actions で用いるサービスアカウントに関連する IAM ポリシーを以下のように修正(①-2 を追加定義)することで、デプロイエラーを解消することができました。
# | プリンシパル | 事前定義 IAM ロール | ロール付与対象リソース |
---|---|---|---|
①-1 | GitHub Actions 用サービスアカウント | Cloud Run デベロッパー(roles/run.developer ) |
Cloud Run をデプロイするプロジェクト |
①-2 | GitHub Actions 用サービスアカウント | Artifact Registry 読み取り(roles/artifactregistry.reader ) |
Artifact Registry があるプロジェクト |
② | Cloud Run サービスエージェント | Artifact Registry 読み取り(roles/artifactregistry.reader ) |
Artifact Registry があるプロジェクト |
武井 祐介 (記事一覧)
クラウドソリューション部クラウドエンジニアリング課。
Google Cloud Partner Top Engineer 2025 選出。
趣味はロードレースやサッカー観戦、あとはゴルフと筋トレ。
Follow @ggenyutakei