Artifact Registry は、コンテナやその他の形式をサポートするユニバーサル パッケージ管理サービスです。アーティファクトの柔軟性と制御を強化するために、Container Registry からの移行について説明します。

Container Registry サービス アカウント

Container Registry サービス エージェントは、Google Cloud サービスを操作するときに Container Registry の代理として動作する Google マネージド サービス アカウントです。

最小権限のセキュリティ原則を実施するため、このサービス アカウントには、2020 年 10 月 5 日以降に Container Registry API が有効になっていたプロジェクトの Container Registry サービス エージェントの役割が付与されます。この役割には次の権限があります。

  • トピックの公開: pubsub.topics.publish
  • ストレージ オブジェクト ACL の読み取り: storage.objects.getIamPolicy
  • ストレージ オブジェクトのデータとメタデータの読み取り: storage.objects.get
  • バケット内のストレージ オブジェクトの一覧表示とオブジェクトのメタデータの読み取り: storage.objects.list

以前は、Container Registry サービス アカウントに編集者のロールが付与されていました。編集者の役割は、プロジェクト内のほとんどのリソースを作成および削除する権限を付与するため、Container Registry サービス アカウントにこの役割がある場合には、権限を制限することをおすすめします。

Container Registry サービス アカウントの現在の権限を確認するには、次のコマンドを実行します。

gcloud projects get-iam-policy PROJECT-ID  \
--flatten="bindings[].members" \
--format='table(bindings.role)' \
--filter="bindings.members:service-PROJECT-NUMBER@containerregistry.iam.gserviceaccount.com"

ここで

  • PROJECT-ID は、Google Cloud プロジェクト ID です。
  • PROJECT-NUMBER は、Google Cloud プロジェクト番号です。

プロジェクト ID とプロジェクト番号は、Google Cloud Console から取得するか、次のコマンドで取得できます。

PROJECT=$(gcloud config get-value project)
echo $PROJECT && gcloud projects list --filter="$PROJECT" --format="value(PROJECT_NUMBER)"

Container Registry サービス エージェントの役割を付与し、編集者の役割を取り消すには:

  1. 次のコマンドで、Container Registry サービス エージェントの役割を付与します。

    gcloud projects add-iam-policy-binding PROJECT-ID \
    --member=serviceAccount:service-PROJECT-NUMBER@containerregistry.iam.gserviceaccount.com --role=roles/containerregistry.ServiceAgent
    
  2. 次のコマンドで、編集者の役割を取り消します。

    gcloud projects remove-iam-policy-binding PROJECT-ID \
    --member=serviceAccount:service-PROJECT-NUMBER@containerregistry.iam.gserviceaccount.com --role=roles/editor