使用 IAM 进行访问权限控制

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

使用 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. 创建工作负载身份联合池
  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 Workload Identity Federation 和 IAM 政策

如需为 Google Cloud 上的 GitLab 设置 Workload Identity Federation 和必要的 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 编辑者角色,仅拥有对代码库的只读权限
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 和客户端库。因此,在使用应用默认凭据进行身份验证时,访问权限范围可能会进一步限制对 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 位于不同的项目中,请向服务账号授予所需权限。

  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 默认访问权限范围,其中包括 storage。
  • 如果您使用的是用户提供的服务账号,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 服务账号

后续步骤

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

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