配置访问权限控制

本页面介绍了 Container Registry 中可用的访问权限控制选项以及如何在 Container Registry 中使用加密密钥。

Container Registry 使用 Cloud Storage 存储分区作为提供容器映像的后端。您可以通过调整对 Cloud Storage 存储分区的权限来控制谁有权访问 Container Registry 映像。

您可以使用 GCP Console 或 gsutil 命令行工具管理 Cloud Storage 中的访问权限控制。如需了解详情,请参阅 gsutil iam 文档。

权限和角色

下表介绍了 Container Registry 操作所需的权限和角色。

如果要为单个存储分区而不是整个 GCP 项目授予角色,请确保已在希望的主机位置将映像推送到 Container Registry,以使系统创建底层存储分区。

操作 权限 角色 角色名称
推送(读取和写入)

storage.buckets.create

storage.buckets.delete

storage.buckets.get

storage.buckets.list

storage.buckets.update

storage.objects.create

storage.objects.delete

storage.objects.get

storage.objects.list

storage.objects.update

roles/storage.admin 存储管理员
拉取(只读)

storage.objects.get

storage.objects.list

roles/storage.objectViewer 存储对象查看者

如果您为任何存储分区启用了仅限存储分区政策,请确保所有 Container Registry 用户和服务帐号都明确设置了上述角色。在这种情况下,Owner 和 Editor 角色本身可能不会授予所需权限。

向用户和其他项目授予对注册表的访问权限

如需向特定用户或其他项目上运行的容器集群授予从注册表中拉取映像的权限,您需要授予对底层 Cloud Storage 存储分区的读取权限。

映像的后端存储分区将采用以下形式的 [BUCKET_NAME]

  • artifacts.[PROJECT-ID].appspot.com(适用于推送到主机 gcr.io 注册表的映像)或
  • [REGION].artifacts.[PROJECT-ID].appspot.com,其中:

    • [PROJECT-ID] 是您的 Google Cloud Platform Console 项目 ID
    • [REGION] 可以为以下值:
      • us(适用于主机 us.gcr.io 中的注册表)
      • eu(适用于主机 eu.gcr.io 中的注册表)
      • asia(适用于主机 asia.gcr.io 中的注册表)

您可以使用 Google Cloud Platform Console 或命令行授予对底层 Cloud Storage 存储分区的读取权限。

Console

  1. 确保已将映像推送到 Container Registry,以使系统创建底层存储分区。
  2. 访问 GCP Console 中的 Cloud Storage 页面
  3. 点击 artifacts.[PROJECT-ID].appspot.com 和/或 [REGION].artifacts.[PROJECT-ID].appspot.com 存储分区的链接。其中,[PROJECT-ID] 是托管 Container Registry 的项目的 GCP 项目 ID[REGION] 对应于托管映像的 [REGION].gcr.io 注册表。

  4. 选择权限标签。

  5. 点击添加成员

  6. 在所显示菜单的成员字段中,以逗号为分隔符填入需要读取权限的用户的电子邮件地址。此电子邮件地址可以为以下内容之一:

    • Google 帐号(例如 someone@example.com
    • Cloud IAM 服务帐号
    • 另一个项目的 Compute Engine 默认服务帐号。默认情况下,Google Kubernetes Engine 使用此帐号来拉取容器映像集群。该帐号采用 [PROJECT_NUMBER]-compute@developer.gserviceaccount.com 格式,其中 [PROJECT-NUMBER] 是运行 Kubernetes Engine 集群的项目的 GCP 项目编号
  7. 选择角色下拉菜单的存储类别中,选择存储对象查看者

  8. 点击添加

此过程将向用户授予对整个存储分区的读取权限。

gsutil

  1. 确保已将映像推送到 Container Registry,以使系统创建底层存储分区。
  2. 在 shell 或终端窗口中运行以下命令:

    gsutil iam ch [TYPE]:[EMAIL-ADDRESS]:objectViewer gs://[BUCKET_NAME]
    

    其中:

    • [TYPE] 可以为以下项之一:
      • serviceAccount(如果 [EMAIL-ADDRESS] 指定服务帐号)。
      • user(如果 [EMAIL-ADDRESS] 是 Google 帐号)。
    • [EMAIL-ADDRESS] 可以为以下项之一:
      • Google 帐号(例如 someone@example.com
      • Cloud IAM 服务帐号
      • 另一个项目的 Compute Engine 默认服务帐号。默认情况下,Google Kubernetes Engine 使用此帐号来拉取容器映像集群。该帐号采用 [PROJECT_NUMBER]-compute@developer.gserviceaccount.com 格式,其中 [PROJECT-NUMBER] 是运行 Kubernetes Engine 集群的项目的 GCP 项目编号
    • [BUCKET_NAME] 是托管映像的 Cloud Storage 存储分区的名称,如上所述。

gsutil iam ch 命令会更改托管注册表的存储分区的 IAM 权限。向某帐号授予 objectViewer 权限后,该帐号便可从注册表中拉取映像。

对于服务帐号,您还必须配置存储空间访问权限范围。

  • 如需设置“只读”权限,请运行以下命令:

    gcloud compute instances set-service-account INSTANCE --scopes=storage-ro
    
  • 如需设置“读写”权限,请运行以下命令:

    gcloud compute instances set-service-account INSTANCE --scopes=storage-rw
    

如需了解详情,请参阅将 Container Registry 与 Google Cloud Platform 搭配使用

公开提供映像

如果主机位置的底层存储分区可公开访问,则 Container Registry 便可公开访问。在项目范围内,每个主机位置中的所有映像要么都公开,要么都不公开。不能仅公开提供一个项目主机中的特定映像。如果您想要公开特定映像,请按以下所述操作:

  • 确保将这些映像保存在您公开的一个单独主机位置中,或者
  • 创建一个新项目来存储可公开访问的映像。

要公开提供容器映像,请按照以下步骤将相应代码库的底层存储分区设为可公开访问:

Console

  1. 确保已将映像推送到 Container Registry,以使系统创建底层存储分区。

  2. 打开 GCP Console 中的 Container Registry 页面。

    打开 Container Registry 页面

  3. 在左侧面板中,点击设置

  4. 设置页面的公共访问权限下,将公开范围切换为公开不公开。此设置用于控制对底层存储分区的访问。

    如果主机的公开范围设为公开,您的 Google Cloud Platform 项目中位于该主机位置的所有映像都可公开访问。

gsutil

  1. 确保已将映像推送到 Container Registry,以使系统创建底层存储分区。

  2. 找到该注册表对应的 Cloud Storage 存储分区名称。为此,请列出各存储分区:

    gsutil ls
    

    您的 Container Registry 存储分区网址将列为 gs://artifacts.[PROJECT-ID].appspot.comgs://[REGION].artifacts.[PROJECT-ID].appspot.com,其中:

    • [PROJECT-ID] 是您的 Google Cloud Platform Console 项目 ID网域级项目将域名作为项目 ID 的一部分。
    • [REGION] 可以为以下值:
      • us(适用于主机 us.gcr.io 中的注册表)
      • eu(适用于主机 eu.gcr.io 中的注册表)
      • asia(适用于主机 asia.gcr.io 中的注册表)
  3. 运行以下命令,将 Container Registry 的存储分区设为可公开访问。此命令将使存储分区中的所有映像都可公开访问。

    gsutil iam ch allUsers:objectViewer gs://[BUCKET_NAME]
    

    其中:

    • gs://[BUCKET_NAME] 是 Container Registry 的存储分区网址

拉取可公开访问的映像

如果 Container Registry 可公开访问,那么任何人都可以拉取其映像。如需查看相关说明,请参阅从注册表中拉取映像

撤消权限

Console

  1. 访问 GCP Console 中的 Cloud Storage 页面
  2. 点击 artifacts.[PROJECT-ID].appspot.com 和/或 [REGION].artifacts.[PROJECT-ID].appspot.com 存储分区的链接。其中,[PROJECT-ID] 是托管 Container Registry 的项目的 GCP 项目 ID[REGION] 对应于托管映像的 [REGION].gcr.io 注册表。

  3. 选择权限标签。

  4. 点击要移除的任何成员旁边的垃圾箱图标。

gsutil

在 shell 或终端窗口中运行以下命令:

gsutil iam ch -d [MEMBER] gs://[BUCKET_NAME]

其中:

  • [MEMBER] 可为以下项之一:
    • user:[EMAIL_ADDRESS](适用于 Google 帐号)
    • serviceAccount:[EMAIL_ADDRESS](适用于 Cloud IAM 服务帐号)
    • allUsers(用于撤消公共访问权限)
  • [BUCKET_NAME] 是所需存储分区的名称
此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Container Registry 文档