要求对所有 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。
      • POLICY_ID2:第二个平台政策的 ID。

      • ACTION:满足 condition 时要执行的操作。可以是 ALLOWDENY

      • DISPLAY_NAME:限制条件的直观易记名称,例如 Require a Binary Authorization continuous validation policy for all GKE clusters。 显示名字段的长度上限为 200 个字符

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

    • 应用自定义限制条件:

      gcloud org-policies set-custom-constraint CUSTOM_CONSTRAINT_PATH
      

      CUSTOM_CONSTRAINT_PATH 替换为自定义约束条件定义的路径。

    • 验证自定义限制条件存在:

      gcloud org-policies list-custom-constraints \
          --organization=ORGANIZATION_ID
      

      输出类似于以下内容:

      CUSTOM_CONSTRAINT: custom.RequireBinAuthzCVPolicy
      ACTION_TYPE: ALLOW
      METHOD_TYPES: CREATE,UPDATE
      RESOURCE_TYPES: container.googleapis.com/Cluster
      DISPLAY_NAME: This cluster requires the continuous validation policy: projects/my-project/platforms/gke/policies/my-policy
      

如需启用您创建的自定义限制条件的强制执行,请创建组织政策

使用组织政策来强制执行自定义限制条件

如需强制执行新的自定义限制条件,请创建一个引用该限制条件的组织政策,然后应用该组织政策。

控制台

如需强制执行限制条件,请执行以下操作:

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

    转到组织政策

  2. 选择项目选择器,然后选择相应组织。

  3. 从列表中搜索并选择所需的约束条件。

  4. 在该限制条件的政策详情页面中,点击管理政策

  5. 修改政策页面,选择覆盖父资源的政策

  6. 点击添加规则

  7. 强制执行中,选择开启

  8. 可选:点击测试更改以模拟此组织政策的效果。如需了解详情,请参阅使用 Policy Simulator 测试组织政策更改

  9. 若要完成并应用组织政策,请点击设置政策

gcloud

  1. 创建 YAML 政策定义文件:

    name: organizations/ORGANIZATION_ID/policies/custom.CONSTRAINT_ID
    spec:
      rules:
      - enforce: true
    

    请替换以下内容:

    • ORGANIZATION_ID:组织 ID
    • CONSTRAINT_ID:约束条件 ID
  2. 强制执行政策:

    gcloud org-policies set-policy ORG_POLICY_PATH
    

    ORG_POLICY_PATH 替换为政策定义文件的路径。

  3. 验证政策存在:

    gcloud org-policies list \
        --organization=ORGANIZATION_ID
    

    ORGANIZATION_ID 替换为组织 ID。

    如需查看参数列表,请参阅 gcloud org-policies list

    输出类似于以下内容:

    CONSTRAINT: custom.RequireBinAuthzCVPolicy
    LIST_POLICY: -
    BOOLEAN_POLICY: SET
    ETAG: CN622LIGEIDXnpMB-
    

该政策最多可能需要 15 分钟才能生效。

如需对基于 CV 检查的平台政策强制执行多个限制条件,请执行以下操作:

删除自定义限制条件

您可以使用 Google Cloud 控制台或 Google Cloud CLI 删除自定义限制条件。

控制台

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

    转到“组织政策”

  2. 选择页面顶部的项目选择器。

  3. 从项目选择器中选择您的组织。

  4. 从列表中搜索并选择所需的约束条件。

  5. 限制条件详细信息中,点击 删除

  6. 点击删除,确认您要删除该约束条件。

gcloud

如需删除自定义限制条件,请使用 org-policies delete-custom-constraint gcloud CLI 命令:

gcloud org-policies delete-custom-constraint custom.CONSTRAINT_ID \
  --organization=ORGANIZATION_ID

请替换以下内容:

  • ORGANIZATION_ID:您的组织 ID,例如 123456789

  • CONSTRAINT_NAME:自定义限制条件的名称

输出类似于以下内容:

Deleted custom constraint [organizations/123456789/customConstraints/CONSTRAINT_NAME]

删除自定义限制条件后,使用该限制条件创建的所有政策仍会继续存在,但会被忽略。您不能创建与已删除的自定义限制条件同名的其他自定义限制条件。

后续步骤