默认托管在 Artifact Registry 上的 gcr.io

了解如何在 Artifact Registry 中设置 gcr.io 代码库,以及 了解 Artifact Registry 和 Container Registry 权限与存储桶之间 配置。

您可以使用 自动迁移工具如果您想使用 迁移工具,用于转换正使用 Container Registry 的项目 到 Artifact Registry 标准代码库或 gcr.io 代码库,请参阅 自动迁移到 Artifact Registry

Container Registry 弃用

之前未使用 Container Registry 的 Google Cloud 项目 自 2024 年 5 月 15 日起,将仅支持在以下环境中托管和管理图片: Artifact Registry此更改会影响:

  • 新创建的项目。
  • 您尚未将映像推送到 Container Registry 的现有项目。

以前未使用 Container Registry 的组织 自 2024 年 1 月 8 日起,所有新的 gcr.io 代码库都将托管在 默认情况下使用 Artifact Registry。

在这些项目中启用 Artifact Registry API 后,Artifact Registry 将 自动处理在 Artifact Registry 中创建 gcr.io 代码库的操作 将对 gcr.io 网域的请求重定向到相应的 Artifact Registry 存储库与项目中现有的 gcr.io 网域支持不同 系统会自动重定向到 Artifact Registry。

在满足以下任一条件的项目中,Container Registry 仍然可用 发生于 2024 年 5 月 15 日之前的操作:

  • 您在项目中启用了 Container Registry API。
  • 您将映像推送到了项目中的注册表主机。

为了准备好迎接即将到来的变更,我们建议您采取以下措施:

  • 请按照本文档中的说明配置您要 未使用 Container Registry,因此已准备好进行自动处理 (共 gcr.io 个请求)。
  • 测试 gcr.io 网域支持 以验证现有的自动化操作是否将继续有效。

Artifact Registry 上托管的 gcr.io 个代码库是在同一 多区域位置。如果您想存储图片 在其他区域,则必须改用标准代码库 位于 pkg.dev 网域上。

所需的角色

为了获得设置“gcr.io”代码库所需的权限, 请让管理员向您授予 以下 IAM 角色:

  • 如需创建 Artifact Registry 代码库并授予对各个代码库的访问权限,请执行以下操作: Artifact Registry 管理员 (roles/artifactregistry.admin) 针对项目
  • 如需查看和管理应用于 Cloud Storage 存储分区的现有 Container Registry 配置,请执行以下操作: Storage Admin (roles/storage.admin) 针对项目
  • 如需在项目级授予代码库访问权限,请执行以下操作: Project IAM Admin (roles/resourcemanager.projectIamAdmin) 或包含同等权限的角色,例如 Folder Admin (roles/resourcemanager.folderAdmin) 或 Organization Admin (roles/resourcemanager.organizationAdmin) 针对项目、文件夹或组织
  • 要列出组织中已启用的服务,请执行以下操作: Cloud Asset Viewer (roles/cloudasset.viewer) 针对组织

如需详细了解如何授予角色,请参阅管理访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

准备工作

您可以列出在 Container Registry 中存储了至少一个映像的项目。 然后,您就可以专注于设置其他项目来托管 gcr.io 请求 。

运行以下命令,在您的 Google Cloud 组织。

  gcloud container images list-gcr-usage \
      --organization=ORGANIZATION

ORGANIZATION 替换为您的 Google Cloud 组织 ID

您还可以列出项目或文件夹的 Container Registry 使用情况。有关 如需了解如何查找 Container Registry 使用情况,请参阅 查看 Container Registry 使用情况

启用 API

启用 Artifact Registry API,以便向 gcr.io 网域发送请求 gcr.io 自动托管生效后,由 Artifact Registry 自动处理。

  1. 运行以下命令:

    gcloud services enable \
        artifactregistry.googleapis.com
    
  2. 如果您通常将 Container Registry API 放置在 VPC Service Controls 服务边界, 请确保将 Artifact Registry API 也放在边界内。请参阅 在服务边界内保护代码库 了解相关说明。

向代码库授予权限

Container Registry 使用 Cloud Storage 角色来控制访问权限。 Artifact Registry 有自己的 IAM 角色与这些角色相互独立 读取、写入和存储库管理员角色。 Container Registry

快速将已授予存储分区的现有权限映射到建议的 Artifact Registry 角色,请使用角色映射工具

或者,您可以查看有权访问存储空间的主账号列表 使用 Google Cloud 控制台管理存储分区

  1. 在 Google Cloud 控制台中,进入 Cloud Storage 存储桶页面。

    进入“存储桶”

  2. 点击要查看的注册表主机的存储桶。 在存储桶名称中,PROJECT-ID 是您的 Google Cloud 项目 ID

    • gcr.io: artifacts.PROJECT-ID.appspot.com
    • asia.gcr.io: asia.artifacts.PROJECT-ID.appspot.com
    • eu.gcr.io: eu.artifacts.PROJECT-ID.appspot.com
    • us.gcr.io: us.artifacts.PROJECT-ID.appspot.com
  3. 点击权限标签页。

  4. 在“权限”标签页上,点击按角色查看子标签页。

  5. 展开角色即可查看拥有该角色的主账号。

该列表包含直接在存储桶上授予的 IAM 角色 从父级项目继承的角色和角色。您可以根据角色选择 来授予最合适的 Artifact Registry 角色。

Cloud Storage 和基本角色

授予当前访问 Container Registry 的用户和服务账号 以及访问 Artifact Registry 代码库的权限适用于 Cloud Storage 继承自父级项目的角色,则应验证主账号 目前使用 Container Registry某些主账号可能只能访问与 Container Registry 无关的其他 Cloud Storage 存储分区。

在 v3 发布之前就已存在的基本角色“Owner”“Editor”和“Viewer” IAM 拥有 对存储分区的有限访问权限。 它们本身不会授予对 Cloud Storage 的所有访问权限 并为其他 Google Cloud 服务提供额外权限。验证哪些用户和服务账号需要 可以使用 Artifact Registry 的访问权限,并使用角色映射表来帮助 如果 Artifact Registry 访问权限适当,则可以授予适当的角色。

下表根据 Artifact Registry 用户授予的权限映射 Artifact Registry 角色 为 Container Registry 访问预定义的 Cloud Storage 角色。

所需的访问权限 当前角色 Artifact Registry 角色 在何处授予角色
仅拉取映像(只读) 存储对象查看者
(roles/storage.objectViewer)
Artifact Registry 读取者
(roles/artifactregistry.reader)
Artifact Registry 代码库或 Google Cloud 项目
  • 推送和拉取映像(读取和写入)
  • 删除图片
存储空间旧存储分区写入者
(roles/storage.legacyBucketWriter)
Artifact Registry 代码库管理员
(roles/artifactregistry.repoAdmin)
Artifact Registry 代码库或 Google Cloud 项目
首次创建映像时,在 Artifact Registry 中创建 gcr.io 代码库 发送到项目中的 gcr.io 主机名。 存储管理员
(roles/storage.admin)
Artifact Registry Create-on-push 代码库管理员
(roles/artifactregistry.createOnPushRepoAdmin)
Google Cloud 项目
创建、管理和删除代码库 存储管理员
(roles/storage.admin)
Artifact Registry 管理员
(roles/artifactregistry.Admin)
Google Cloud 项目
从项目继承的服务代理角色

Google Cloud 服务的默认服务账号有自己的专属账号 在项目级授予的角色。例如, Cloud Run 具有 Cloud Run Service Agent 角色。

在大多数情况下,这些服务代理角色包含等效的默认 拥有 Container Registry 和 Artifact Registry 的权限 运行代码, 位于现有 Container Registry 的同一项目中的 Artifact Registry 服务。

请参阅 服务代理角色参考,详细了解相关权限 Service Agent 角色。

自定义角色

您可以借助角色映射表来决定 根据访问权限级别向用户或服务账号授予的角色 所需的资源

如需了解如何授予 Artifact Registry 角色,请参阅 配置角色和权限

存储桶配置

在 Artifact Registry 中创建代码库时,Artifact Registry 不会创建 项目中相应的 Cloud Storage 存储分区如果您使用自动化技术 对于直接与存储分区交互的 Container Registry,您必须更新 对 Artifact Registry 代码库进行相应的更改。

例如,如果您以编程方式向 Cloud Storage 授予 存储分区,则必须更新该自动化操作, 对托管映像的 Artifact Registry 代码库的 Artifact Registry 权限 gcr.io 网域。

在 Artifact Registry 中,您可以为仓库中存储的数据设置加密方法 而不是存储桶在 Artifact Registry 上自动进行 gcr.io 托管 gcr.io 代码库(使用 Google 拥有的密钥和 Google 管理的密钥加密)。如果您 想要使用客户管理的加密密钥 (CMEK),则必须创建 gcr.io 代码库,并在更新后将 CMEK 指定为加密方法, 由您自己创建

如需手动创建 gcr.io 代码库,请执行以下操作:

  1. 如果您使用的是 CMEK,请创建将用于此代码库的密钥 并授予使用相应密钥的权限。请参阅 启用客户管理的加密密钥

  2. 添加代码库。

    控制台

    1. 打开 Google Cloud 控制台中的制品库页面。

      打开“代码库”页面

    2. 点击创建代码库

    3. 指定代码库名称。

      Container Registry 主机名 Artifact Registry 代码库名称
      gcr.io gcr.io
      asia.gcr.io asia.gcr.io
      eu.gcr.io eu.gcr.io
      us.gcr.io us.gcr.io
    4. 将 Docker 指定为代码库格式。

    5. 位置类型下,为代码库指定多区域:

      Container Registry 主机名 Artifact Registry 代码库位置
      gcr.io us
      asia.gcr.io asia
      eu.gcr.io 欧洲
      us.gcr.io us
    6. 为代码库添加说明。请勿包含敏感数据、 因为代码库描述未加密

    7. 加密部分,为 代码库

      • Google 管理的密钥 - 使用 Google 拥有和 Google 管理的密钥。
      • 客户管理的密钥 - 使用您通过 Cloud Key Management Service 控制的密钥来加密代码库内容。如需查看密钥设置说明,请参阅为代码库设置 CMEK
    8. 点击创建

    gcloud

    运行以下命令创建新代码库。

    gcloud artifacts repositories create REPOSITORY \
        --repository-format=docker \
        --location=LOCATION \
        --description=DESCRIPTION \
        --kms-key=KMS-KEY
    

    替换以下值:

    • REPOSITORY 是代码库的名称。

      Container Registry 主机名 Artifact Registry 代码库名称
      gcr.io gcr.io
      asia.gcr.io asia.gcr.io
      eu.gcr.io eu.gcr.io
      us.gcr.io us.gcr.io
    • LOCATION 是代码库的多区域位置:

      Container Registry 主机名 Artifact Registry 代码库位置
      gcr.io us
      asia.gcr.io asia
      eu.gcr.io 欧洲
      us.gcr.io us
    • DESCRIPTION 是代码库的说明。错误做法 包含敏感数据,因为仓库说明未加密。

    • KMS-KEY 是 Cloud KMS 加密的完整路径 密钥,如果您使用的是客户管理的加密密钥 来加密代码库内容路径的格式为:

      projects/KMS-PROJECT/locations/KMS-LOCATION/keyRings/KEY-RING/cryptoKeys/KEY
      

      替换以下值:

      • KMS-PROJECT 是存储密钥的项目。
      • KMS-LOCATION 是密钥的位置。
      • KEY-RING 是密钥环的名称。
      • KEY 是密钥的名称。

    您可以通过列出代码库来确认该代码库已成功创建 使用以下命令:

    gcloud artifacts repositories list
    

后续步骤

设置 gcr.io 域名支持 以验证现有的自动化和集成 或 Cloud Functions 等服务 符合预期。