使用 IAM 控制访问权限

本页面介绍 Artifact Registry 中使用 Identity and Access Management (IAM) 进行访问权限控制。

实现 CI/CD 流水线时,Artifact Registry 的默认权限可最大限度地减少设置工作量。您还可以将 Artifact Registry 与第三方 CI/CD 工具集成,并配置访问代码库所需的权限和身份验证。

如果您使用 Artifact Analysis 处理容器元数据(例如在映像中发现的漏洞),请参阅 Artifact Analysis 文档,了解如何授予查看或管理元数据的访问权限。

准备工作

  1. 启用 Artifact Registry,包括启用 API 和安装 Google Cloud CLI。
  2. 如果要应用特定于代码库的权限,请为软件包创建 Artifact Registry 代码库

概览

IAM 权限角色决定了您在 Artifact Registry 代码库中创建、查看、修改或删除数据的能力。

角色是一组权限的集合。您不能直接向主账号授予权限,而是需要向主账号授予角色。为主账号授予一个角色就是授予该角色包含的所有权限。您可以为同一位主账号授予多个角色。

Google Cloud 默认权限

默认情况下,以下权限适用于与 Artifact Registry 属于同一项目的 Google Cloud CI/CD 服务:

如果您的所有服务都在同一个 Google Cloud 项目中,并且默认权限符合您的需求,则无需配置权限。

在以下情况下,您必须为这些服务配置 Artifact Registry 权限:

  • 您想使用这些服务访问另一个项目中的 Artifact Registry。在具有 Artifact Registry 的项目中,为每项服务授予工作负载身份池或服务帐号所需的角色。如果连接到 Cloud Run,请向 Cloud Run Service Agent 授予所需的角色。
  • 您使用的 GKE 版本没有内置支持从 Artifact Registry 拉取映像的功能。如需了解配置说明,请参阅 GKE 部分。
  • 您希望默认服务账号拥有代码库的读写权限。如需了解详情,请参阅以下信息:
  • 您为运行时环境使用的是用户提供的服务帐号,而不是默认服务帐号。在包含 Artifact Registry 的项目中,向您的服务账号授予所需的角色。

第三方集成

对于第三方客户端,您必须同时配置权限和身份验证。

传统上,在 Google Cloud 外部运行的应用使用服务帐号密钥来访问 Google Cloud 资源。但是,服务帐号密钥是强大的凭据,如果管理不当,可能会带来安全风险。

借助工作负载身份联合,您可以使用 Identity and Access Management 向外部身份授予 IAM 角色,包括模拟服务帐号的能力。此方法消除了与服务帐号密钥相关的维护和安全负担。

使用工作负载身份联合

  1. 创建工作负载身份联合池
  2. 创建工作负载身份联合提供方
  3. 向工作负载身份池授予适当的 Artifact Registry 角色,以允许访问代码库。
  4. 配置第三方客户端以向 Artifact Registry 进行身份验证。

使用服务帐号

  1. 创建一个服务账号代表您的应用执行操作,或选择一个现有服务账号进行持续集成/持续交付自动化。
  2. 向服务账号授予适当的 Artifact Registry 角色,以提供代码库访问权限。
  3. 配置第三方客户端以向 Artifact Registry 进行身份验证。

Google Cloud 上的 GitLab

Google Cloud 上的 GitLab 集成使用工作负载身份联合对 Google Cloud 上的 GitLab 工作负载进行授权和身份验证,而无需服务帐号或服务帐号密钥。如需详细了解此合作伙伴关系如何使用工作负载身份联合,请参阅身份验证概览

如需在 Google Cloud 上为 GitLab 设置工作负载身份联合和必要的 IAM 角色,请参阅 GitLab 教程 Google Cloud Workload Identity Federation 和 IAM 政策

如需连接您的 Artifact Registry 代码库,请按照 GitLab 教程 Google Artifact Registry 的说明进行操作。

角色与权限

每种 Artifact Registry API 方法都要求发出请求的主帐号(用户、群组或服务帐号)具有使用相应资源所需的权限。如需向主帐号授予权限,可以设置向主帐号授予资源的预定义角色的政策。

您可以授予针对 Google Cloud 项目或 Artifact Registry 代码库的角色。

预定义的 Artifact Registry 角色

IAM 提供的预定义角色可以授予对特定 Google Cloud 资源的访问权限,并防止对其他资源进行未经授权的访问。

对于 pkg.dev 网域上的标准、虚拟和远程代码库,请使用以下预定义角色:

角色 说明
Artifact Registry Reader
(roles/artifactregistry.reader)
查看和获取工件,查看代码库元数据。
Artifact Registry Writer
(roles/artifactregistry.writer)
读取和写入工件。
Artifact Registry Repository Administrator
(roles/artifactregistry.repoAdmin)
可以读取、写入和删除工件。
Artifact Registry Administrator
(roles/artifactregistry.admin)
创建和管理代码库和工件。

以下其他预定义角色拥有创建 gcr.io 代码库以托管 gcr.io 网域的映像的权限。这些角色无权在 pkg.dev 网域上的 Artifact Registry 中创建其他代码库格式。这些角色支持与 Container Registry 的向后兼容性,因为 Container Registry 使用容器映像的首次推送来创建每个多区域注册表。

角色 说明
Artifact Registry Create-on-push Writer (roles/artifactregistry.createOnPushWriter) 读取和写入工件。创建 gcr.io 代码库。
Artifact Registry Create-on-push Repository Administrator (roles/artifactregistry.createOnPushRepoAdmin) 可以读取、写入和删除工件。创建 gcr.io 代码库。

如需查看每个角色中各项权限的完整列表,请参阅 Artifact Registry 角色。您还可以使用 gcloud iam roles describe 命令查看每个角色的权限列表。

基本 IAM 角色

基本角色是在引入 IAM 之前就已存在的高度宽松角色。您可以使用基本角色向主帐号授予对 Google Cloud 资源的广泛访问权限。

尽可能使用预定义角色访问代码库,以便用户和服务帐号仅拥有所需的权限。

如需详细了解基本角色,请参阅 IAM 基本角色和预定义角色参考文档

授予权限

如果项目中的所有代码库都应用相同的权限,请在项目级层授予权限。如果某些账号需要不同级层的访问权限,请在代码库级层授予角色。

如果您要授予对虚拟代码库的权限,这些权限将应用于通过虚拟代码库提供的所有上游代码库,无论各个代码库权限如何。

如果您使用 gcloud 命令授予角色,则可以为主帐号指定单个角色绑定,也可以使用政策文件定义多个绑定。

授予项目范围权限

如果项目中的所有代码库都应用相同的权限,请在项目级层授予角色。

如需将用户或服务帐号添加到项目中并授予他们 Artifact Registry 角色,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中打开 IAM 页面。

    打开 IAM 页面

  2. 点击选择项目,选择 Artifact Registry 运行所在的项目,然后点击打开

  3. 点击添加

  4. 输入电子邮件地址。您可以将个人、服务账号或 Google 群组网添加为主账号。

  5. 为主账号选择一个角色。根据最小权限安全原则,请考虑授予访问所需 Artifact Registry 资源所需的最小权限。如需了解 Artifact Registry 预定义角色和权限,请参阅预定义的 Artifact Registry 角色

  6. 点击保存

gcloud

  1. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

  2. 如需向单个主账号授予角色,请运行以下命令:

    gcloud projects add-iam-policy-binding PROJECT \
       --member=PRINCPAL \
       --role=ROLE
    

    其中

    • PROJECT 是运行 Artifact Registry 的项目的 ID。
    • PRINCIPAL 是要添加绑定的主账号。使用 user|group|serviceAccount:emaildomain:domain 格式。

      示例:user:test-user@gmail.comgroup:admins@example.comserviceAccount:test123@example.domain.comdomain:example.domain.com

    • ROLE 是您要授予的角色

    如需了解详情,请参阅 add-iam-policy-binding 文档。

    要使用政策文件授予角色,请运行以下命令:

    gcloud projects set-iam-policy PROJECT /PATH/TO/policy.yaml

    其中

    • PROJECT 是运行 Artifact Registry 所在项目的 ID 或完全限定标识符。
    • /PATH/TO/policy.yaml 是政策文件的路径和文件名。

    要获取当前配置的政策,请运行以下命令:

    gcloud projects get-iam-policy PROJECT

    其中,PROJECT 是项目 ID 或项目的完全限定标识符。

    如需了解详情,请参阅 set-iam-policy 文档。

授予特定于代码库的权限

如果您希望用户或服务账号对项目中的每个代码库拥有不同级别的访问权限,请授予代码库级层的权限。

控制台

如需授予对特定代码库的访问权限,请执行以下操作:

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

    打开“代码库”页面

  2. 选择相应的代码库。

  3. 如果信息面板未显示,请点击菜单栏中的显示信息面板

  4. 在“权限”标签页上,点击添加主账号

  5. 输入电子邮件地址。您可以将个人、服务帐号或 Google 群组添加为主账号。

  6. 为主账号选择一个角色。根据最小权限安全原则,请考虑授予访问所需 Artifact Registry 资源所需的最小权限。如需了解 Artifact Registry 预定义角色和权限,请参阅预定义的 Artifact Registry 角色

  7. 点击保存

gcloud

  1. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

  2. 您可以设置一组 IAM 政策绑定或使用政策文件。

    如需向单个主账号授予角色,请运行以下命令:

    gcloud artifacts repositories add-iam-policy-binding REPOSITORY \
       --location=LOCATION \
       --member=PRINCIPAL \
       --role=ROLE
    

    其中

    • REPOSITORY 是代码库的 ID。
    • PRINCIPAL 是要添加绑定的主账号。使用 user|group|serviceAccount:emaildomain:domain 格式。

      示例:user:test-user@gmail.comgroup:admins@example.comserviceAccount:test123@example.domain.comdomain:example.domain.com

    • ROLE 是您要授予的角色

    • LOCATION 是代码库的单区域或多区域位置

    例如,要为使用位置 --us-central1 中代码库 my-repo 的用户 write@gmail.com 的角色 roles/artifactregistry.writer 添加 IAM 政策绑定,请运行以下命令:

    gcloud artifacts repositories add-iam-policy-binding my-repo \
    --location=us-central1 --member=user:write@gmail.com --role=roles/artifactregistry.writer
    

    要使用政策文件授予角色,请运行以下命令:

    gcloud artifacts repositories set-iam-policy REPOSITORY /PATH/TO/policy.yaml --location=LOCATION

    其中

    • REPOSITORY 是代码库的 ID。
    • /PATH/TO/policy.yaml 是政策文件的路径和文件名。
    • LOCATION 是代码库的单区域或多区域位置

    例如,如需使用 policy.yaml 中定义的政策为 --us-central1 位置中的代码库 my-repo 设置 IAM 政策,请运行以下命令:

    gcloud artifacts repositories set-iam-policy my-repo policy.yaml --location=us-central1
    

Terraform

使用 google_artifact_registry_repository_iam 资源来配置 IAM 政策。以下示例定义了一个资源名称为 repo-account 的服务帐号,并向其授予对资源名称 my-repo 的代码库的读取权限。

如果您刚开始接触适用于 Google Cloud 的 Terraform,请参阅 HasiCorp 网站上的使用入门 - Google Cloud 页面。

provider "google" {
    project = "PROJECT-ID"
}

resource "google_artifact_registry_repository" "my-repo"     {
  provider = google-beta

  location = "LOCATION"
  repository_id = "REPOSITORY"
  description = "DESCRIPTION"
  format = "FORMAT"
}

resource "google_service_account" "repo-account" {
  provider = google-beta

  account_id   = "ACCOUNT-ID"
  display_name = "Repository Service Account"
}

resource "google_artifact_registry_repository_iam_member" "repo-iam" {
  provider = google-beta

  location = google_artifact_registry_repository.my-repo.location
  repository = google_artifact_registry_repository.my-repo.name
  role   = "roles/artifactregistry.reader"
  member = "serviceAccount:${google_service_account.repo-account.email}"
}

ACCOUNT-ID 是服务帐号的 ID。这是服务帐号电子邮件字段中 @ 符号之前的部分。

如需查看其他示例,请参阅 google_artifact_registry_repository_iam 资源文档。

配置对代码库的公共访问权限

如果您希望互联网上未经身份验证的所有人都可以使用工件,请将它们存储在您公开的代码库中。

如需为代码库配置公共只读访问权限,请向主帐号 allUsers 授予 Artifact Registry Reader 角色。我们还建议设置用户请求配额上限,这样单个用户就无法用完项目的总配额。

控制台

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

    打开“代码库”页面

  2. 选择相应的代码库。

  3. 如果信息面板未显示,请点击菜单栏中的显示信息面板

  4. 在“权限”标签页上,点击添加主账号

  5. 新的主账号字段中,输入 allUsers

  6. 选择 Artifact Registry Reader 角色。

  7. 针对 Artifact Registry API 请求设置每位用户的限制,以防止未经身份验证的用户滥用。有关说明,请参阅限制用量

gcloud

  1. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

  2. 运行以下命令:

    gcloud artifacts repositories add-iam-policy-binding REPOSITORY \
    --location=LOCATION --member=allUsers --role=ROLE
    

    其中

    • REPOSITORY 是代码库的 ID。

    • ROLE 是您要授予的角色

    • LOCATION 是代码库的单区域或多区域位置

    例如,将位置 --us-central1 中的代码库 my-repo 配置为公开,并运行以下命令:

    gcloud artifacts repositories add-iam-policy-binding my-repo \
     --location=us-central1 --member=allUsers --role=roles/artifactregistry.reader
    
  3. 针对 Artifact Registry API 请求设置每位用户的限制,以防止未经身份验证的用户滥用。有关说明,请参阅限制用量

撤消权限

如需撤消对代码库的访问权限,请从已获授权的主账号列表中移除主账号。

如需从代码库中移除公共访问权限,请移除 allUsers 主账号。

控制台

如需撤消权限,请执行以下操作:

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

    打开“代码库”页面

  2. 选择相应的代码库。

  3. 如果信息面板未显示,请点击菜单栏中的显示信息面板

  4. 在“权限”标签页上,展开相应的主账号。如果要将公共代码库设为私有,请展开 allUsers 主账号。

  5. 点击移除主账号以撤消访问权限。

gcloud

  1. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

  2. 如需撤消项目级层的角色,请运行以下命令:

    gcloud projects remove-iam-policy-binding PROJECT \
       --member=PRINCIPAL \
       --role=ROLE
    
    • PROJECT 是项目 ID。
    • PRINCIPAL 是要为其移除绑定的主账号。使用 user|group|serviceAccount:emaildomain:domain 格式。

      示例:user:test-user@gmail.comgroup:admins@example.comserviceAccount:test123@example.domain.comdomain:example.domain.com

    • ROLE 是您要撤消的角色

    如需撤消代码库的角色,请运行以下命令:

    gcloud artifacts repositories remove-iam-policy-binding REPOSITORY
       --location=LOCATION \
       --member=PRINCIPAL \
       --role=ROLE
    

    其中

    • REPOSITORY 是代码库的 ID。
    • PRINCIPAL 是要为其移除绑定的主账号。使用 user|group|serviceAccount:emaildomain:domain 格式。

      示例:user:test-user@gmail.comgroup:admins@example.comserviceAccount:test123@example.domain.comdomain:example.domain.com

      如需撤消对代码库的公共访问权限,请指定主账号 allUsers

    • ROLE 是您要撤消的角色

    例如,要为使用位置 --us-central1my-repo 代码库的用户 write@gmail.com 的角色 roles/artifactregistry.writer 移除政策绑定,请运行以下命令:

    gcloud artifacts repositories remove-iam-policy-binding my-repo \
       --location=us-central1 \
       --member=user:write@gmail.com \
       --role=roles/artifactregistry.writer

    如需撤消对位置 --us-central1my-repo 的公开访问权限,请运行以下命令:

    gcloud artifacts repositories remove-iam-policy-binding my-repo \
       --location=us-central1 \
       --member=allUsers \
       --role=roles/artifactregistry.reader
    

使用标记授予条件访问权限

项目管理员可以为 Google Cloud 中的资源创建标记,并在 Resource Manager 中管理这些标记。当您将标记附加到 Artifact Registry 代码库时,管理员可以将标记与 IAM 条件结合使用,以授予对代码库的条件访问权限。

您无法将标记附加到单个制品。

如需了解详情,请参阅以下文档:

与 Google Cloud 服务集成

对于大多数 Google Cloud 服务账号,配置对注册表的访问权限只需授予适当的 IAM 权限。

Google Cloud 服务的默认权限

Google Cloud 服务(如 Cloud Build 或 Google Kubernetes Engine)使用默认服务帐号服务代理与同一项目中的资源进行交互。

在下列情况下,您必须自行配置或修改权限:

  • Google Cloud 服务与 Artifact Registry 位于不同的项目中。
  • 默认权限不能满足您的需求。例如,默认的 Compute Engine 服务账号对同一项目中的存储空间具有只读权限。如果您要将虚拟机中的映像推送到 Artifact Registry,可以修改虚拟机服务帐号的权限,或使用具有所需权限的其他帐号。
  • 您使用用户提供的服务帐号(而不是默认服务帐号)与 Artifact Registry 进行交互。

以下服务账号通常访问 Artifact Registry。服务帐号的电子邮件地址包括运行服务的项目的 Google Cloud 项目 ID 或项目编号

服务 服务账号 电子邮件地址 权限
App Engine 柔性环境 App Engine 服务帐号 PROJECT-ID@appspot.gserviceaccount.com Editor 角色,可以读取和写入代码库
Compute Engine Compute Engine 默认服务账号 PROJECT-NUMBER-compute@developer.gserviceaccount.com 编辑者角色,仅拥有对代码库的只读权限
Cloud Build Cloud Build 服务帐号 PROJECT-NUMBER@cloudbuild.gserviceaccount.com
默认权限包括对代码库的读写权限以及创建 gcr.io 代码库的权限。
Cloud Run Cloud Run 服务代理
run.googleapis.com 的服务代理。
service-PROJECT-NUMBER@serverless-robot-prod.iam.gserviceaccount.com 读取者权限,仅限于对代码库的只读权限
GKE Compute Engine 默认服务账号
节点的默认服务帐号。
PROJECT-NUMBER-compute@developer.gserviceaccount.com 编辑者角色,仅拥有对代码库的只读权限

授予对 Compute Engine 实例的访问权限

访问代码库的虚拟机实例必须同时配置 Artifact Registry 权限和存储空间访问权限范围

虽然服务帐号的访问权限级别是由授予该服务帐号的 IAM 角色决定的,但虚拟机实例上的访问权限范围决定了通过 gcloud CLI 和实例上的客户端库发出的请求的默认 OAuth 范围。因此,在使用应用默认凭据进行身份验证时,访问权限范围可能会进一步限制对 API 方法的访问权限。

Compute Engine 使用以下默认值:

  • Compute Engine 默认服务帐号是虚拟机实例的身份。服务帐号电子邮件地址的后缀为 @developer.gserviceaccount.com
  • 如果您尚未停用此行为,则默认服务帐号具有 IAM 基本 Editor 角色。
  • 您使用默认服务帐号创建的实例具有 Compute Engine 默认访问权限范围,包括对存储空间的只读权限。虽然 Editor 角色通常会授予写入权限,但 read-only 存储访问权限范围会限制实例服务帐号只能从同一项目内的任何代码库下载工件。

在以下情况下,您必须配置服务账号的访问权限范围:

  • 虚拟机服务账号需要访问其他项目中的代码库。
  • 除了从代码库读取工件之外,虚拟机服务账号还需要执行一些操作。这通常适用于虚拟机上需要推送映像或运行 Artifact Registry gcloud 命令的第三方工具。

如需配置权限并设置访问权限范围,请执行以下操作:

  1. 在包含虚拟机实例的项目中,获取 Compute Engine 默认服务账号的名称。该服务账号电子邮件地址的后缀为 @developer.gserviceaccount.com

  2. 在包含代码库的项目中,授予权限以便服务账号可以访问代码库。

  3. 使用 --scopes 选项设置访问权限范围。

    1. 停止虚拟机实例。请参阅停止实例

    2. 使用以下命令设置访问权限范围:

      gcloud compute instances set-service-account INSTANCE --scopes=SCOPE
      

      SCOPE 替换为适当的值。

      • 对于 Docker,支持以下选项:

        • storage-ro - 仅授予拉取映像的读取权限。
        • storage-rw - 授予推送或拉取映像的读写权限。
        • cloud-platform - 查看和管理整个 Google Cloud 服务中的数据(包括元数据)。
      • 对于其他格式,您必须使用 cloud-platform 范围。

    3. 重启虚拟机实例。请参阅启动已停止的实例

授予对 Google Kubernetes Engine 集群的访问权限

如果满足以下所有要求,则 GKE 集群和节点池无需任何额外配置即可拉取容器:

如果您的 GKE 环境不满足这些要求,则授予访问权限的说明取决于您是使用 Compute Engine 默认服务帐号还是用户提供服务帐号作为节点的身份。

默认服务账号

以下配置要求适用于 Compute Engine 默认服务账号

  1. 如果 GKE 与 Artifact Registry 位于不同的项目中,请向服务帐号授予所需的权限。

  2. 如需推送映像、针对除容器以外的格式与代码库进行交互,或从集群运行 gcloud 命令,您必须在创建集群或节点池时为服务帐号设置访问权限范围

  3. 如果您使用的不是GKE 的版本,请配置 imagePullSecrets

用户提供的服务帐号

如果要使用用户提供的服务帐号作为集群的身份,您必须执行以下操作:

  1. 从运行 Artifact Registry 的 Google Cloud 项目中向服务帐号授予所需的权限。

  2. 默认情况下,使用用户提供的服务帐号创建集群或节点池时,系统会授予 cloud-platform 访问权限范围。

    如果您在 gcloud container clusters creategcloud container node-pools create 命令中使用 --scopes 标志,则必须包含用于 Artifact Registry 的适当访问权限范围

设置访问权限范围

访问权限范围是为 Compute Engine 虚拟机指定授权的传统方法。如需从 Artifact Registry 代码库中拉取映像,GKE 节点必须具有存储空间只读访问权限范围或包含存储空间读取访问权限的其他存储空间访问权限范围。

您只能在创建集群或节点池时设置访问权限范围。您无法更改现有节点的访问权限范围。

  • 如果您使用的是 Compute Engine 默认服务帐号,则 GKE 会使用 Compute Engine 默认访问权限范围(包括对存储空间的只读权限)创建节点。
  • 如果您使用的是用户提供的服务帐号,GKE 会创建具有 cloud-platform 范围(大多数 Google Cloud 服务所需的范围)的节点。

如需在创建集群时指定访问权限范围,请运行以下命令:

gcloud container clusters create NAME --scopes=SCOPES

如需在创建节点池时指定访问权限范围,请运行以下命令:

gcloud container node-pools create NAME --scopes=SCOPES

替换以下值:

  • NAME 是集群或节点池的名称。
  • SCOPES 是要授予的访问权限范围的列表(以英文逗号分隔)。

    • 如需访问 Docker 代码库,请使用以下范围之一:

    • storage-ro - 授予拉取映像的只读权限。

    • storage-rw - 授予推送或拉取映像的读写权限。

    • cloud-platform - 查看和管理整个 Google Cloud 服务中的数据(包括元数据)。

    • 如需访问其他代码库,您必须使用 cloud-platform 范围。

    如需查看范围的完整列表,请参阅 gcloud container clusters creategcloud container node-pools create 的文档。

如需详细了解创建新集群时可设置的范围,请参阅 gcloud container clusters create 命令的文档。

配置 imagePullSecret

如需配置 imagePullSecret,请执行以下操作:

  1. 在具有 GKE 的项目中,找到 Compute Engine 默认服务帐号。该账号电子邮件地址的后缀为 @developer.gserviceaccount.com

  2. 为服务帐号下载服务帐号密钥

  3. 在包含代码库的项目中,验证您是否已向代码库授予权限

  4. 在包含集群的项目中,使用服务账号密钥创建名为 artifact-registryimagePullSecret 密文。

    kubectl create secret docker-registry artifact-registry \
    --docker-server=https://LOCATION-docker.pkg.dev \
    --docker-email=SERVICE-ACCOUNT-EMAIL \
    --docker-username=_json_key \
    --docker-password="$(cat KEY-FILE)"
    

    其中

    • LOCATION 是代码库的单区域或多区域位置
    • SERVICE-ACCOUNT-EMAIL 是 Compute Engine 服务账号的电子邮件地址。
    • KEY-FILE 是您的服务账号密钥文件的名称。例如 key.json
  5. 打开默认服务账号:

    kubectl edit serviceaccount default --namespace default

    Kubernetes 集群中的每个命名空间都有一个名为 default 的默认服务账号。此默认服务账号用于拉取容器映像。

  6. 将新创建的 imagePullSecret Secret 添加到您的默认服务账号:

    imagePullSecrets:
    - name: artifact-registry
    

    您的服务账号现在应如下所示:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: default
      namespace: default
      ...
    secrets:
    - name: default-token-zd84v
    # The secret you created:
    imagePullSecrets:
    - name: artifact-registry
    

现在,当前 default 命名空间中创建的所有新 Pod 都将定义了 imagePullSecret Secret。

Artifact Registry 服务账号

Artifact Registry Service Agent 是由 Google 代管式服务帐号,在与 Google Cloud 服务交互时,可代表 Artifact Registry 执行操作。如需详细了解该帐号及其权限,请参阅 Artifact Registry 服务帐号

后续步骤

设置权限后,详细了解如何使用工件。