本文档介绍了如何将 Container Registry 角色映射到 Artifact Registry 角色,以及如何将这些角色应用于 Artifact Registry 制品库。您可以使用自动迁移工具完成相同的步骤。
Container Registry 和 Artifact Registry 使用不同的 Identity and Access Management (IAM) 角色来控制对存储在注册表中的容器映像的访问权限。
为了帮助您从 Container Registry 迁移到 Artifact Registry,您可以运行以下 Google Cloud CLI 命令:
- 用于标识适用于存储 Container Registry 映像的 Cloud Storage 存储桶的允许政策
- 返回具有类似 Artifact Registry 角色的政策,以便您可以向现有的 Container Registry 用户授予对 Artifact Registry 代码库的访问权限。
该命令使用 IAM Policy Analyzer 来分析 IAM 允许政策。
准备工作
创建 Artifact Registry 代码库。如果您选择手动迁移方法,请按照相应步骤手动迁移到 Artifact Registry 中的
gcr.io
代码库或手动迁移到pkg.dev
代码库。Enable the Cloud Asset API.
您必须在要分析现有许可政策的项目中启用该 API。
安装并初始化 gcloud CLI。对于现有安装,请使用以下命令更新到最新版本:
gcloud components update
所需的角色
如需获得分析许可政策和授予对 Artifact Registry 制品库的访问权限所需的权限,请让管理员向您授予您要分析权限的项目、文件夹或组织的以下 IAM 角色:
-
Cloud Asset Viewer (
roles/cloudasset.viewer
) -
如需分析具有自定义 IAM 角色的政策:
Role Viewer (
roles/iam.roleViewer
) -
如需使用 Google Cloud CLI 分析政策,请执行以下操作:
Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer
) - 如需在 Artifact Registry 代码库上授予角色,请执行以下操作: Artifact Registry Administrator
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
这些预定义角色包含分析允许政策和授予对 Artifact Registry 制品库的访问权限所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
如需分析允许政策并向 Artifact Registry 代码库授予访问权限,您需要具备以下权限:
-
cloudasset.assets.analyzeIamPolicy
-
cloudasset.assets.searchAllResources
-
cloudasset.assets.searchAllIamPolicies
-
如需分析具有自定义 IAM 角色的政策,请执行以下操作:
iam.roles.get
-
如需使用 Google Cloud CLI 分析政策,请执行以下操作:
serviceusage.services.use
-
如需在 Artifact Registry 代码库上授予角色,请执行以下操作:
artifactregistry.repositories.setIamPolicy
使用映射工具
映射工具会检查指定 Container Registry 主机名(例如 gcr.io
)的允许政策。
该工具会检查预定义的 Cloud Storage 角色中的权限集,并将这些权限集映射到 Artifact Registry 角色。如需比较 Cloud Storage 权限与 Artifact Registry 角色,请参阅角色映射。
如需使用角色映射工具,请执行以下操作:
运行映射工具:
gcloud beta artifacts docker upgrade print-iam-policy HOSTNAME \ --project=PROJECT_ID > POLICY_FILENAME
替换以下值:
HOSTNAME 是您希望该工具分析的 Container Registry 主机名:
gcr.io
asia.gcr.io
eu.gcr.io
us.gcr.io
PROJECT_ID 是您要分析的注册表宿主的 Google Cloud 项目 ID。
POLICY_FILE 是工具将返回的 YAML 格式的政策的文件名。
以下示例命令会分析项目
my-project
中gcr.io
的存储桶,以查找直接应用于该存储桶或从父组织 ID101231231231
及其后代继承的允许政策。gcloud beta artifacts docker upgrade print-iam-policy gcr.io \ --project=my-project > gcr-io-policy.yaml
该命令会根据存储桶的现有允许政策,返回一个包含 Artifact Registry 角色绑定的 YAML 格式的政策文件。如果存储桶的父项目位于组织中,则政策文件会包含在文件夹或组织级层获得访问权限的主账号。
例如,以下示例包含针对以下对象的 Artifact Registry 角色绑定:
- Cloud Build、Compute Engine 和 Container Registry 服务代理。服务代理代表Google Cloud 服务执行操作。
- 用户账号
user@example.com
- 用户代管式服务账号
deploy@my-project.iam.gserviceaccount.com
。
bindings: - members: - service-3213213213213@gcp-sa-cloudbuild.iam.gserviceaccount.com - user:user@example.com role: roles/artifactregistry.repoAdmin - members: - serviceAccount:deploy@my-project.iam.gserviceaccount.com - serviceAccount:service-1231231231231@@compute-system.iam.gserviceaccount.com - serviceAccount:service-1231231231231@containerregistry.iam.gserviceaccount.com role: roles/artifactregistry.reader
从政策文件中移除 Container Registry 服务代理的相应行,因为该服务账号不需要访问您的 Artifact Registry 代码库。服务代理电子邮件地址的后缀为
containerregistry.iam.gserviceaccount.com
。在上一步的示例政策中,包含 Container Registry 服务代理的行是:
- serviceAccount:service-1231231231231@containerregistry.iam.gserviceaccount.com
查看其他角色绑定,确认它们是否合适。
Artifact Registry 还提供了一些额外的预定义角色,您可能需要考虑为某些主账号分配这些角色。例如,Artifact Registry Create-on-push Repository Administrator 角色允许主账号在 Artifact Registry 中创建 gcr.io 代码库,但不允许其创建其他 Artifact Registry 代码库。
为政策文件中缺少的任何主账号添加角色绑定。
返回的政策文件中可能缺少以下主账号:
- 具有自定义角色的主账号,且这些自定义角色不具有该工具用于映射角色的权限集。
- 如果您没有查看父文件夹或组织的权限,则无法查看在父文件夹或组织中被授予访问权限的主账号。
将政策绑定应用于 Artifact Registry 代码库。
gcloud artifacts repositories set-iam-policy REPOSITORY FILENAME \ --project=PROJECT_ID \ --location=LOCATION
替换以下值:
- REPOSITORY 是代码库的名称。
- POLICY_FILENAME 是您要应用于代码库的政策文件的名称。
- PROJECT_ID 是项目 ID。
- LOCATION 是代码库的单区域或多区域位置。
以下示例适用于项目
my-project
,会将文件gcr-io-policy.yaml
中的政策应用于us
多区域中名为gcr.io
的代码库:gcloud artifacts repositories set-iam-policy gcr.io gcr-io-policy.yaml \ --project=my-project \ --location=us
如果您想将角色绑定应用于更高级别的资源,请修改现有的项目、文件夹或组织政策,添加您想要添加的绑定。
角色映射
下表显示了应向现有 Container Registry 用户授予哪些预定义的 Artifact Registry 角色,具体取决于他们拥有的 Cloud Storage 权限。
角色中所需的权限 | Artifact Registry 角色 |
---|---|
storage.objects.get storage.objects.list |
Artifact Registry Reader |
storage.buckets.get storage.objects.get storage.objects.list storage.objects.create |
Artifact Registry Writer |
storage.buckets.get storage.objects.get storage.objects.list storage.objects.create storage.objects.delete |
Artifact Registry Repository Administrator |
storage.buckets.get storage.objects.get storage.objects.list storage.objects.create storage.buckets.create |
Artifact Registry Administrator |