本文档介绍了如何将 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.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.您必须在要分析现有许可政策的项目中启用该 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.ioasia.gcr.ioeu.gcr.ious.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.getstorage.objects.list | 
Artifact Registry Reader | 
storage.buckets.getstorage.objects.getstorage.objects.liststorage.objects.create | 
Artifact Registry Writer | 
storage.buckets.getstorage.objects.getstorage.objects.liststorage.objects.createstorage.objects.delete | 
Artifact Registry Repository Administrator | 
storage.buckets.getstorage.objects.getstorage.objects.liststorage.objects.createstorage.buckets.create | 
Artifact Registry Administrator |