TL;DR
デフォルトでは、Artifact Registry へのアクセスには次のサービスアカウントが使用される。
Cloud Build から Artifact Registry への push をする時
- Cloud Build サービス アカウント
PROJECT_NUMBER@cloudbuild.gserviceaccount.com
Cloud Run から Artifact Registry の Image を pull する時
- Cloud Run サービス エージェント
service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com
背景
- Container Registry が Deprecated となるため、Artifact Registry に移行が必要だった
- 移行手順の中で、Artifact Registryリポジトリを読み書きできる権限設定をする必要があった
- 移行を担当したプロジェクトおいて、どのサービスアカウントが使用され、どんな権限が必要となるか調査した
- その調査の備忘録として記事を作成する
なお、CICDは次のような構成である。

Cloud Build についての調査
Cloud Build とリポジトリが異なるプロジェクトにある場合、またはユーザー指定のサービス アカウントを使用してビルドを実行する場合は、Artifact Registry 書き込みロールを付与するを使用して、リポジトリを持つプロジェクト内のビルドサービス アカウントに追加します。
デフォルトの Cloud Build サービス アカウントには、同じ Google Cloud プロジェクト内のリポジトリに対して次の操作を行うためのアクセス権があります。
- アーティファクトのアップロードとダウンロード
- Artifact Registry に gcr.io リポジトリを作成します。
コマンドラインからのビルドの実行 見出しより
次のビルド構成ファイルでは、ユーザー指定のサービス アカウントを使用してビルドを実行するように Cloud Build を構成し、ビルドログをユーザーが作成した Cloud Storage バケットに保存するよう構成しています。
steps: - name: 'bash' args: ['echo', 'Hello world!'] logsBucket: 'LOGS_BUCKET_LOCATION' serviceAccount: 'projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT' options: logging: GCS_ONLY
Cloud Build から Artifact Registry にpush する時は、cloudbuild.yaml
でserviceAccount
プロパティを明示的に指定していない限りは、デフォルトであるCloud Build サービス アカウント(PROJECT_NUMBER@cloudbuild.gserviceaccount.com
)が使われる。
Cloud Run についての調査
新しいサービスをデプロイする 見出しより
デプロイ時に、Cloud Run サービス エージェントがデプロイされたコンテナにアクセスできる必要があります(デフォルトの場合)。
他の Google Cloud プロジェクトからイメージをデプロイする 見出しより
正しい IAM 権限を設定されている場合は、他の Google Cloud プロジェクトのコンテナ イメージをデプロイできます。
Google Cloud コンソールで、Cloud Run サービスのプロジェクトを開きます。
[Google 提供のロール付与を含む] を選択します。
Cloud Run サービス エージェントのメールアドレスをコピーします。このアドレスには、@serverless-robot-prod.iam.gserviceaccount.com という接尾辞が付いています。
使用する Container Registry を所有するプロジェクトを開きます。
[追加] をクリックして、新しいプリンシパルを追加します。
[新しいプリンシパル] フィールドに、先ほどコピーしたサービス アカウントのメールアドレスを貼り付けます。
Container Registry を使用している場合は、[ロールを選択] プルダウン メニューで、[ストレージ] -> [Storage オブジェクト閲覧者] を選択します。Artifact Registry を使用している場合は、[Artifact Registry] -> [Artifact Registry 読み取り] のロールを選択します。
Cloud Run サービスを含むプロジェクトにコンテナ イメージをデプロイします。
注: セキュリティを強化するには、コンテナ イメージを含む Cloud Storage バケットまたは Artifact Registry リポジトリにのみアクセス権を付与します。
Cloud Run サービス エージェント が使用され、Artifact Registry から image がpullされる。
参照