在 GKE 中配置跨项目访问

本页面介绍了如何为 Binary Authorization 授予与当前项目不同的 Google Cloud 项目中的政策和容器映像的访问权限。例如,如果您在不同项目拥有的 Artifact Registry 或 Container Registry(已弃用)制品库的 Google Kubernetes Engine (GKE) 集群中部署映像,则需要为项目中的 Binary Authorization 服务授予来源制品库中的映像元数据的访问权限。

术语

本文档使用以下术语:

  • 服务代理: Google Cloud管理的服务账号。Binary Authorization 使用服务代理与 Google Cloud资源(如 GKE 集群)进行交互。
  • 政策项目:包含 Binary Authorization 政策的 Google Cloud 项目。
  • 集群项目:包含 GKE 集群的 Google Cloud 项目。
  • 制品项目:包含 Artifact Registry 或 Container Registry(已弃用)制品库的 Google Cloud 项目。

需要跨项目访问的场景

在以下情况下,您必须授予跨项目权限:

  • 政策项目与集群项目不同。
  • 集群项目与工件项目不同。

准备工作

  1. 安装 Google Cloud CLI。

  2. 配置 gcloud CLI 以使用您的联合身份。

    如需了解详情,请参阅使用联合身份登录 gcloud CLI

  3. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  4. 创建或选择 Google Cloud 项目

    选择或创建项目所需角色

    • 选择项目:选择项目不需要特定的 IAM 角色,您可以选择已获授予角色的任何项目。
    • 创建项目:如需创建项目,您需要 Project Creator 角色 (roles/resourcemanager.projectCreator),该角色包含 resourcemanager.projects.create 权限。了解如何授予 角色
    • 创建 Google Cloud 项目:

      gcloud projects create PROJECT_ID

      PROJECT_ID 替换为您要创建的 Google Cloud 项目名称。

    • 选择您创建的 Google Cloud 项目:

      gcloud config set project PROJECT_ID

      PROJECT_ID 替换为您的 Google Cloud 项目名称。

  5. 验证是否已为您的 Google Cloud 项目启用结算功能。

  6. 启用 Binary Authorization API:

    启用 API 所需的角色

    如需启用 API,您需要拥有 serviceusage.services.enable 权限。如果您已创建项目,则可能已通过 Owner 角色 (roles/owner) 拥有此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获得此权限。 了解如何授予角色

    gcloud services enable binaryauthorization.googleapis.com

与政策项目不同的集群项目

为集群项目中的 Binary Authorization 服务代理授予政策项目的 Binary Authorization Policy Evaluator (roles/binaryauthorization.policyEvaluator) 角色。

gcloud projects add-iam-policy-binding POLICY_PROJECT_ID \
  --member="serviceAccount:service-$(gcloud projects describe CLUSTER_PROJECT_ID --format='value(projectNumber)')@gcp-sa-binaryauthorization." \
  --role=roles/binaryauthorization.policyEvaluator

请替换以下内容:

  • POLICY_PROJECT_ID:包含政策的项目的 ID。
  • CLUSTER_PROJECT_ID:集群的项目 ID。

与工件项目不同的集群项目

为集群项目中的 Binary Authorization 服务代理授予工件项目的 Artifact Registry Reader (roles/artifactregistry.reader) 角色。

gcloud projects add-iam-policy-binding ARTIFACT_PROJECT_ID \
    --member="serviceAccount:service-$(gcloud projects describe CLUSTER_PROJECT_ID --format='value(projectNumber)')@gcp-sa-binaryauthorization." \
    --role=roles/artifactregistry.reader

请替换以下内容:

  • ARTIFACT_PROJECT_ID:包含 Artifact Registry 制品库的项目的 ID。
  • CLUSTER_PROJECT_ID:运行 GKE 集群的项目的 ID。