将 Container Registry 中的 IAM 角色映射到 Artifact Registry

本文档介绍了如何将 Container Registry 角色映射到 Artifact Registry 角色,并将其应用于 Artifact Registry 代码库。您也可以使用自动迁移工具完成相同的步骤。

Container Registry 和 Artifact Registry 使用不同的 Identity and Access Management (IAM) 角色来控制 访问存储在注册表中的容器映像。

为帮助您从 Container Registry 迁移到 Artifact Registry,您可以运行以下 Google Cloud CLI 命令:

  • 标识应用于 Cloud Storage 存储桶的允许政策 用于存储 Container Registry 映像
  • 返回具有类似 Artifact Registry 角色的政策,以便您向现有 Container Registry 用户授予对 Artifact Registry 代码库的访问权限。

该命令使用 IAM 政策分析器来分析 IAM 允许政策。

准备工作

  1. 创建 Artifact Registry 代码库。如果您选择手动方法 进行转换,请按照相应步骤 手动迁移到 Artifact Registry 中的 gcr.io 个代码库 也可以手动迁移到标准代码库

  2. Enable the Cloud Asset API.

    Enable the API

    您必须在要分析现有允许政策的项目或组织中启用此 API。

  3. 安装并初始化 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 管理员

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

这些预定义角色包含分析允许政策和授予对 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 角色。比较 有关 Artifact Registry 角色的 Cloud Storage 权限,请参阅 角色映射

如需使用角色映射工具,请执行以下操作:

  1. 运行映射工具:

    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 格式。 该工具将返回的内容

    以下示例命令会分析 Google Cloud 中 gcr.io 的存储桶 项目 my-project,用于直接应用于 或者继承自父级组织 ID“101231231231”和 其后代。

    gcloud beta artifacts docker upgrade print-iam-policy gcr.io \
        --project=my-project > gcr-io-policy.yaml
    

    该命令会返回 YAML 格式的具有 Artifact Registry 角色的政策文件 绑定数量。如果 该存储桶的父项目位于组织中,则该政策 文件包含拥有该文件夹的访问权限的主账号,或 组织级别。

    例如,以下示例包含以下 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
    
  2. 从政策中移除 Container Registry 服务代理的行 文件,因为该服务账号不需要访问您的 Artifact Registry 代码库服务代理电子邮件地址的后缀为 containerregistry.iam.gserviceaccount.com

    在上一步的示例政策中,包含 Container Registry 服务代理:

    - serviceAccount:service-1231231231231@containerregistry.iam.gserviceaccount.com
    
  3. 查看其他角色绑定,确认其是否适当。

    Artifact Registry 拥有其他预定义角色,您可能需要 考虑的因素。例如,Artifact Registry Create-on-Push Repository Administrator 角色允许主账号在 Artifact Registry 中创建 gcr.io 仓库,但不允许其创建其他 Artifact Registry 仓库。

  4. 为政策文件中缺少的所有主账号添加角色绑定。

    返回的政策文件中可能缺少以下主账号:

    • 具有自定义角色的主账号,并且这些自定义角色不具有该工具用于映射角色的一组权限。
    • 如果您没有权限查看父级文件夹或组织,则可以查看获得了父级文件夹或组织访问权限的主账号。
  5. 将政策绑定应用于您的 Artifact Registry 代码库。

    gcloud artifacts repositories set-iam-policy REPOSITORY FILENAME \
        --project=PROJECT_ID \
        --location=LOCATION
    

    替换以下值:

    • REPOSITORY 是代码库的名称。
    • POLICY_FILENAME 是您配置的政策文件的名称, 将应用于代码库
    • PROJECT_ID 是项目 ID。
    • LOCATION 是代码库的单区域或多区域位置

    以下示例针对项目 my-projectgcr-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 用户拥有的 Cloud Storage 权限,向他们授予哪些预定义 Artifact Registry 角色。

角色所需的权限 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 写入者
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