要求对所有 GKE 集群实施基于持续验证检查的平台政策

本页面介绍了如何使用组织政策服务来要求 GKE 集群使用一个或多个基于持续验证 (CV) 检查的平台政策。您可以在自定义约束条件中指定所需的基于检查的平台政策。然后,在组织政策中强制执行自定义限制条件。

费用

本指南使用以下 Google Cloud 服务:

  • Binary Authorization,但 CV 在预览阶段可免费使用
  • 组织政策和限制条件可免费使用。

准备工作

  1. 启用 Binary Authorization
  2. 设置基于检查的平台政策的 CV 以及至少一项基于检查的平台政策的 CV

所需的角色

如需获得创建限制条件和强制执行组织政策所需的权限,请让您的管理员向您授予 Google Cloud 组织的 Organization Policy Administrator (roles/orgpolicy.policyAdmin) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

创建 CV 自定义约束条件

控制台

  1. 在 Google Cloud 控制台中,转到组织政策页面。

    转到组织政策

  2. 组织政策页面上,点击 自定义限制条件

  3. 如果系统提示您执行此操作,请点击切换至父级组织。如需详细了解组织,请参阅组织政策服务简介

  4. 约束条件详情部分的相应字段中输入以下信息:

    1. 显示名称:约束条件的显示名称,例如 Require a Binary Authorization continuous validation policy for all GKE clusters。您可以使用显示名称在保存限制条件后查找该限制条件。显示名称字段的最大长度为 200 个字符

    2. 限制条件 ID:限制条件的限制条件 ID,例如 RequireBinAuthzCVPolicy

    3. 说明(可选):直观易懂的限制条件说明,在违反政策时显示为错误消息。说明字段的最大长度为 2000 个字符。

  5. 强制执行部分中,执行以下操作:

    1. 资源类型中,输入 container.googleaips.com/Cluster

    2. 强制执行方法中,选择在创建和更新时强制执行

    3. 条件字段中输入表达式。此字段的最大长度为 1000 个字符。当条件评估结果为 true 时,系统会强制执行自定义约束条件。条件采用通用表达式语言 (CEL) 语法中的表达式。您可以将表达式与 AND (&&) 和 OR (||) 组合使用,以创建复杂条件。CEL 是一种类似于 C 的表达式语言。如需详细了解 CEL 的语法和语义,请参阅 https://github.com/google/cel-spec。要输入条件,请执行以下操作:

      1. 点击 修改条件

      2. 输入表达式以检查是否存在 CV 平台政策。以下条件要求存在 CV 平台政策绑定,并且平台政策具有特定名称:

        resource.binaryAuthorization.policyBindings.exists(policy, policy.name == "projects/PROJECT_ID/platforms/gke/policies/POLICY_ID")
        

        请替换以下内容:

        • PROJECT_ID:您的平台政策的项目 ID。项目必须位于同一组织中。
        • POLICY_ID:您的平台政策的 ID。

        以下条件要求存在两个 CV 平台政策绑定,并且每个绑定都具有特定的平台政策名称。

        resource.binaryAuthorization.policyBindings.exists(policy, policy.name == "projects/PROJECT_ID1/platforms/gke/policies/POLICY_ID1") && resource.binaryAuthorization.policyBindings.exists(policy, policy.name == "projects/PROJECT_ID2/platforms/gke/policies/POLICY_ID2")
        
        • PROJECT_ID1:第一个平台政策的项目 ID。项目必须位于同一组织中。
        • POLICY_ID1:第一个平台政策的 ID。
        • PROJECT_ID2:第二个平台政策的项目 ID。
        • POLICY_ID2:第二个平台政策的 ID。

        • 点击保存

    4. 操作中,选择允许

  6. 如需创建自定义约束条件,请点击创建约束条件

gcloud

  1. 为自定义限制条件创建 YAML 文件:

    name: organizations/ORGANIZATION_ID/customConstraints/custom.CONSTRAINT_ID
    resource_types: container.googleapis.com/Cluster
    method_types:
      - CREATE
      - UPDATE
    condition: >-
      CONDITION
    action_type: ACTION
    display_name: DISPLAY_NAME
    description: DESCRIPTION
    

    请替换以下内容:

    • ORGANIZATION_ID:您的组织 ID,例如 123456789
    • CONSTRAINT_ID:约束条件 ID,例如 RequireBinAuthzCVPolicy
    • CONDITION:输入表达式以检查是否存在 CV 平台政策。此字段的最大长度为 1000 个字符。当条件评估结果为 true 时,系统会强制执行自定义约束条件。条件采用通用表达式语言 (CEL) 语法中的表达式。您可以将表达式与 AND (&&) 和 OR (||) 组合使用,以创建复杂条件。CEL 是一种类似于 C 的表达式语言。如需详细了解 CEL 的语法和语义,请参阅 https://github.com/google/cel-spec。 以下条件要求存在 CV 平台政策绑定,并且平台政策具有特定名称:

      resource.binaryAuthorization.policyBindings.exists(policy, policy.name == "projects/PROJECT_ID/platforms/gke/policies/POLICY_ID")
      

      请替换以下内容:

      • PROJECT_ID:您的平台政策的项目 ID。项目必须位于同一组织中。
      • POLICY_ID:您的平台政策的 ID。

      以下条件要求存在两个 CV 平台政策绑定,并且每个绑定都具有特定的平台政策名称。

      resource.binaryAuthorization.policyBindings.exists(policy, policy.name == "projects/PROJECT_ID1/platforms/gke/policies/POLICY_ID1") && resource.binaryAuthorization.policyBindings.exists(policy, policy.name == "projects/PROJECT_ID2/platforms/gke/policies/POLICY_ID2")
      
      • PROJECT_ID1:第一个平台政策的项目 ID。项目必须位于同一组织中。
      • POLICY_ID1:第一个平台政策的 ID。
      • PROJECT_ID2:第二个平台政策的项目 ID。