使用 IAM 进行访问权限控制

本页面介绍 Cloud Identity and Access Management (IAM) 的访问权限控制 Artifact Registry

使用 Artifact Registry 的默认权限时,可以最大限度地减少设置工作量 如何实现 CI/CD 流水线。你还可以集成 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

GitLab on Google Cloud 集成使用 工作负载身份联合,用于授权和身份验证 在 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 读取者
(roles/artifactregistry.reader)
查看和获取制品,查看代码库元数据。
Artifact Registry 写入者
(roles/artifactregistry.writer)
读取和写入工件。
Artifact Registry 代码库管理员
(roles/artifactregistry.repoAdmin)
可以读取、写入和删除工件。
Artifact Registry 管理员
(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 代码库管理员 (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=PRINCIPAL \
       --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,请参阅 使用入门 - Google Cloud 页面 HashiCorp 网站。

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)使用 默认服务账号Service Agent 资源。

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

  • 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 <ph type="x-smartling-placeholder"></ph> Compute Engine 默认服务账号 PROJECT-NUMBER-compute@developer.gserviceaccount.com 编辑者角色,仅拥有对代码库的只读权限
Cloud Build Cloud Build 服务 账号 PROJECT-NUMBER@cloudbuild.gserviceaccount.com
默认权限 包括对代码库的读写权限以及创建 gcr.io 代码库
Cloud Run <ph type="x-smartling-placeholder"></ph> Cloud Run 服务代理
run.googleapis.com 的服务代理。
service-PROJECT-NUMBER@serverless-robot-prod.iam.gserviceaccount.com 读取者权限,仅限于对代码库的只读权限
GKE <ph type="x-smartling-placeholder"></ph> Compute Engine 默认服务账号
节点的默认服务账号。
PROJECT-NUMBER-compute@developer.gserviceaccount.com 编辑者角色,仅拥有对代码库的只读权限

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

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

而服务账号的访问权限级别则由 授予服务账号的 IAM 角色、访问权限范围 对于通过 gcloud CLI 和客户端库。因此,访问权限范围 在向以下对象进行身份验证时,可能会进一步限制对 API 方法的访问权限: 应用默认凭据

Compute Engine 使用以下默认值:

  • Compute Engine 默认服务账号是虚拟机的身份 实例。服务账号电子邮件地址具有后缀 @developer.gserviceaccount.com.
  • 默认服务账号具有 IAM 基础 Editor 角色(如果您尚未停用此行为)。
  • 您使用默认服务账号创建的实例 Compute Engine 默认访问权限范围,包括 对存储空间的只读权限。编辑者角色通常可以授予 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,向 Artifact Registry 授予所需权限 服务账号。

  2. 如需推送映像,请与代码库进行交互,以获取除 或从集群运行 gcloud 命令,则必须 创建服务账号时,为服务账号指定访问权限范围 集群或节点池

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

用户提供的服务账号

如果您想使用用户提供的服务账号 作为集群的身份,则必须:

  1. 从以下位置向服务账号授予所需的权限: 运行 Artifact Registry 的 Google Cloud 项目。

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

    如果您将 --scopes 标志与 gcloud container clusters creategcloud container node-pools create 命令,您必须添加 适当的 访问权限范围(与 Artifact Registry 搭配使用)。

设置访问权限范围

访问权限范围是为以下对象指定授权的传统方法: Compute Engine 虚拟机如需从 Artifact Registry 代码库中拉取映像,请执行以下操作: GKE 节点必须具有存储只读访问权限范围或 包含存储读取访问权限的另一个存储访问权限范围。

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

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

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 服务账号

后续步骤

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