设置 Binary Authorization 政策强制执行

适用于 Google Distributed Cloud 的 Binary Authorization 是一项 Google Cloud 功能,可将 Binary Authorization 的托管部署时强制执行扩展到本地集群。Google Distributed Cloud 上 Binary Authorization 的主要用例是保护工作负载,但 Binary Authorization 适用于所有集群类型。请按照本指南中的步骤,将 Google Cloud 项目中配置的 Binary Authorization 政策的强制执行规则应用于您的集群。如需详细了解 Binary Authorization 政策和规则,请参阅 Binary Authorization 概览

前提条件

请先确保您已满足以下前提条件,然后才能为集群启用 Binary Authorization 政策强制执行:

  • 向舰队注册集群:使用 bmctl 创建的集群,该集群会注册到您在集群配置文件的 gkeConnect.projectID 字段中指定的 Google Cloud 项目。此项目称为舰队宿主项目。如需详细了解舰队,包括应用场景、最佳实践和示例,请参阅舰队管理文档。

  • 在 Google Cloud 项目中启用 Binary Authorization API:在舰队宿主项目中启用 Binary Authorization 服务

  • 将 Binary Authorization Policy Evaluator 角色添加到舰队宿主项目:如需在舰队宿主项目上将 Binary Authorization Policy Evaluator (roles/binaryauthorization.policyEvaluator) 角色授予 Kubernetes 服务账号,请运行以下命令:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:PROJECT_ID.svc.id.goog[binauthz-system/binauthz-agent]" \
        --role="roles/binaryauthorization.policyEvaluator"
    

    如果您的集群在代理服务器后面运行,请确保代理服务器允许与 Binary Authorization API (binaryauthorization.googleapis.com) 建立连接。此 API 为部署到集群的映像提供基于政策的部署验证和控制。如需详细了解如何使用代理配置,请参阅在代理后面安装

满足前提条件后,您可以在创建新集群或更新现有集群时启用(或停用)Binary Authorization 政策。

在集群创建期间启用 Binary Authorization 政策

您可以使用 bmctl 或 gcloud CLI 启用 Binary Authorization 政策强制执行。

bmctl

如需在使用 bmctl 创建集群时启用 Binary Authorization,请执行以下操作:

  1. 在创建集群之前,将 spec.binaryAuthorization.evaluationMode 添加到集群配置文件,如以下示例所示:

    ...
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: user-basic
      namespace: cluster-user-basic
    spec:
      type: user
      ...
      binaryAuthorization:
        evaluationMode: "PROJECT_SINGLETON_POLICY_ENFORCE"
    

    允许的 evaluationMode 值包括:

    • PROJECT_SINGLETON_POLICY_ENFORCE:对 Google Cloud 项目强制执行 Binary Authorization 政策(也称为项目单例政策)中指定的规则,以管理集群上的容器映像部署。

    • DISABLE:为集群停用 Binary Authorization。此设置为默认值。 如果您省略 binaryAuthorization,则该功能会停用。

  2. 在集群配置文件中进行所需的任何其他更改,然后运行 bmctl create cluster 命令。

如需详细了解如何创建集群,请参阅集群创建概览

gcloud CLI

  • 如需创建用户集群并启用 Binary Authorization,请在运行 gcloud container bare-metal clusters create 命令时添加 --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE 标志。

    这将创建一个用户集群,以强制执行 Binary Authorization 政策(也称为项目单例政策)中指定的规则。此政策与您的 Google Cloud 项目相关联,并指定用于管理容器映像部署的规则。如需详细了解如何使用 gcloud CLI 创建用户集群,请参阅使用 GKE On-Prem API 客户端创建用户集群。如需详细了解 Binary Authorization 政策和规则,请参阅 Binary Authorization 概览

为现有集群启用或停用 Binary Authorization 政策

如果您已有 1.16 版或更高版本的集群,则可以使用 bmctl 或 gcloud CLI 随时启用或停用 Binary Authorization。

bmctl

  • 启用:

    1. 修改集群配置文件以添加 binaryAuthorization 字段:

      ...
      ---
      apiVersion: baremetal.cluster.gke.io/v1
      kind: Cluster
      metadata:
        name: user-basic
        namespace: cluster-user-basic
      spec:
        type: user
        ...
        binaryAuthorization:
          evaluationMode: "PROJECT_SINGLETON_POLICY_ENFORCE"
      
    2. 更新集群:

      bmctl update cluster -c CLUSTER_NAME --admin-kubeconfig=CLUSTER_KUBECONFIG
      

      请替换以下内容:

      • CLUSTER_NAME:要更新的集群的名称。
      • CLUSTER_KUBECONFIG:集群 kubeconfig 文件的路径。
    3. 等待 binauthz-system 命名空间中名为 binauthz-module-deployment 的 Deployment 准备就绪。

      该 Deployment 准备就绪后,Binary Authorization 会强制执行 Binary Authorization 政策(也称为项目单例政策)中指定的规则。此政策与您的 Google Cloud 项目相关联,并指定用于管理容器映像部署的规则。如需详细了解如何使用 bmctl 更新集群,请参阅更新集群。如需详细了解 Binary Authorization 政策和规则,请参阅 Binary Authorization 概览

  • 停用:

    如需关闭此功能,您可以将 evaluationMode 设置为 DISABLED 或从集群规范中移除 binaryAuthorization 部分。完成此更改后,请等待几分钟,直到 binauthz-system 命名空间中名为 binauthz-module-deployment 的 Deployment 被移除。

gcloud CLI

  • 如需为现有集群启用 Binary Authorization,请在运行 gcloud container bare-metal clusters update 命令时添加 --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE 标志。

    这将更新用户集群,以便 Binary Authorization 强制执行 Binary Authorization 政策(也称为项目单例政策)中指定的规则。此政策与您的 Google Cloud 项目相关联,并指定用于管理容器映像部署的规则。如需详细了解如何使用 gcloud CLI 更新用户集群,请参阅 gcloud CLI 参考文档中的 gcloud container bare-metal clusters update。如需详细了解 Binary Authorization 政策和规则,请参阅 Binary Authorization 概览

  • 如需为现有集群停用 Binary Authorization,请在运行 gcloud container bare-metal clusters update 命令时使用 --binauthz-evaluation-mode=DISABLED 标志。

问题排查

如果您未满足所有前提条件,则可能无法及早发现问题。如果 Binary Authorization 开始无法响应 Pod 创建请求,请检查 status.conditions 中是否有 ReplicaSet。如下所示的消息表明 Binary Authorization 配置存在问题:

failed to validate Binary Authorization policy

(1) Ensure the Binary Authorization API is enabled for your Google Cloud project:
    gcloud services enable binaryauthorization.googleapis.com --project=PROJECT_ID
(2) Ensure an IAM policy binding is in place granting binaryauthorization.policyEvaluator role to the binauthz-system/binauthz-agent Kubernetes service account:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:PROJECT_ID.svc.id.goog[binauthz-system/binauthz-agent]" \
        --role=roles/binaryauthorization.policyEvaluator