使用 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 角色, 包括模拟服务账号的能力。这种方法消除了 与服务相关的维护和安全负担 账号密钥。

使用 Workload Identity 联合

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

使用服务账号

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

GitLab on Google Cloud

Google Cloud 上的 GitLab 集成使用 Workload Identity Federation 为 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 代码库管理员
(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. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  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. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  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. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  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. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  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 服务的默认权限

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

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

  • 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 Editor 角色,仅拥有对代码库的只读权限
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 Reader 权限,仅拥有对代码库的只读权限
GKE Compute Engine 默认服务账号
节点的默认服务账号。
PROJECT-NUMBER-compute@developer.gserviceaccount.com Editor 角色,仅拥有对代码库的只读权限

授予对 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 访问权限范围。

    如果您将 --scopes 标志与 gcloud container clusters creategcloud container node-pools create 命令,您必须添加 适当的 访问权限范围(与 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 服务账号

后续步骤

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

您还可以使用下载规则限制工件下载