本页面介绍如何在 GKE 附加集群环境中启用和使用自定义限制条件。 Google Cloud组织政策服务可帮助您管理资源配置并在云环境中创建安全防护措施。
概览
借助自定义组织政策,您可以在 GKE Multi-Cloud 环境中创建精细的资源政策,以满足组织的特定安全性和合规性要求。您还可以创建处于试运行模式的组织政策,以便在不影响生产工作负载的情况下测试新政策。
如需详细了解组织政策,请参阅组织政策服务简介。
准备工作
在开始之前,请确保您了解以下主题:
政策继承
如果您对资源强制执行政策,默认情况下,该资源的后代会继承组织政策。例如,如果您对某个组织强制执行一项政策, Google Cloud 会对该组织中的所有项目强制执行该政策。如需详细了解政策继承以及如何更改评估规则,请参阅层次结构评估规则。
限制
在创建自定义限制条件之前,请注意以下限制:
- 只能对 GKE 附加集群资源的
CREATE
或UPDATE
方法强制执行自定义限制条件。 - 新强制执行的自定义限制条件不会自动应用于现有资源。您必须更新现有资源才能应用该限制条件。 如需查找需要更新的现有资源,您可以强制执行试运行组织政策。
- 如需创建限制条件和强制执行组织政策,您需要拥有 Google Cloud 组织的 Organization Policy Administrator (
roles/orgpolicy.policyAdmin
) IAM 角色。如需详细了解管理具有自定义限制条件的组织政策所需的权限,请参阅所需的角色。
价格
组织政策和自定义限制条件可免费使用。
创建自定义限制条件
必须使用 AttachedCluster API 资源规范中的字段(不包括描述为“仅限输出”的字段)来指定自定义约束条件。
创建自定义限制条件
如需创建新的自定义限制条件,您需要在 YAML 文件中定义限制条件,并使用 Google Cloud CLI 在组织中应用自定义限制条件。此限制条件必须封装您想要在 GKE 关联集群资源中强制执行的特定政策。
为自定义限制条件创建 YAML 文件:
name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME resourceTypes: - gkemulticloud.googleapis.com/AttachedCluster methodTypes: - CREATE condition: \"CONDITION\" actionType: ACTION displayName: DISPLAY_NAME description: DESCRIPTION
替换以下内容:
ORGANIZATION_ID
:您的组织 ID,例如123456789
。CONSTRAINT_NAME
:新自定义限制条件的名称。自定义限制条件必须以custom.
开头,只能包含大写字母、小写字母或数字。例如custom.allowClusterCreateIfAnnotationPresent
。该字段的长度上限为 70 个字符,不计算前缀,例如organizations/123456789/customConstraints/custom
。CONDITION
:针对附加集群资源的表示法编写的条件。条件是使用通用表达式语言 (CEL) 编写的。此字段的最大长度为 1,000 个字符。 例如,条件:"key" in resource.annotations && resource.annotations.key == "created-by"
。ACTION
:满足条件时要执行的操作。可以是ALLOW
或DENY
。DISPLAY_NAME
:限制条件的显示名称。此字段的最大长度为 200 个字符。DESCRIPTION
:约束条件的说明,在违反政策时显示为错误消息,例如"Allow new clusters only when certain annotations are set."
此字段的最大长度为 2,000 个字符。
如需详细了解如何创建自定义限制条件,请参阅定义自定义限制条件。
将限制与资源相关联
为新的自定义限制条件创建 YAML 文件后,您必须对其进行设置,以使该限制条件可用于组织政策。
如需设置自定义限制条件,请使用
gcloud org-policies set-custom-constraint
命令:gcloud org-policies set-custom-constraint PATH_TO_FILE
将
PATH_TO_FILE
替换为自定义限制条件 YAML 定义的路径。如需验证自定义限制条件是否已创建,请使用
gcloud org-policies list-custom-constraints
命令:gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
输出会列出已创建的政策:
CUSTOM_CONSTRAINT: custom.allowClusterCreateIfAnnotationPresent ACTION_TYPE: ALLOW METHOD_TYPES: CREATE RESOURCE_TYPES: gkemulticloud.googleapis.com/AttachedCluster DISPLAY_NAME: Allow new clusters only when certain annotations are set.
强制执行自定义限制条件
如需强制执行新的自定义限制条件,请创建一个引用该限制条件的组织政策,然后应用该组织政策。
为组织政策创建 YAML 文件:
name: RESOURCE_HIERARCHY/policies/POLICY_NAME spec: rules: - enforce: true
替换以下内容:
RESOURCE_HIERARCHY
:新政策的位置,此位置会影响强制执行范围。请参考 Google Cloud 资源层次结构。例如,如果您想在特定项目中强制执行政策,请使用projects/
PROJECT_ID
。如需在特定组织中强制执行政策,请使用organizations/
ORGANIZATION_ID
。POLICY_NAME
:新政策的名称。
强制执行政策:
gcloud org-policies set-policy PATH_TO_POLICY
将
PATH_TO_POLICY
替换为政策定义文件的路径。验证政策存在:
gcloud org-policies list --RESOURCE_FLAG=RESOURCE_ID
替换以下内容:
RESOURCE_FLAG
:在其中强制执行政策的 Google Cloud 资源。例如,项目或组织。RESOURCE_ID
:在其中强制执行政策的资源的 ID。例如,您的项目 ID 或组织 ID。
输出类似于以下内容:
CONSTRAINT: custom.allowClusterCreateIfAnnotationPresent LIST_POLICY: - BOOLEAN_POLICY: SET ETAG: CPjb27wGEOijhL4B-
测试政策
通过在受限项目中注册 EKS 集群来测试组织政策。
在受限项目中注册 EKS 集群。
gcloud container attached clusters register CLUSTER_NAME \ --location=GOOGLE_CLOUD_REGION \ --fleet-project=PROJECT_NUMBER \ --platform-version=PLATFORM_VERSION \ --distribution=eks \ --issuer-url=ISSUER_URL \ --context=KUBECONFIG_CONTEXT \ --kubeconfig=KUBECONFIG_PATH
输出类似于以下内容:
ERROR: (gcloud.container.attached.clusters.register) FAILED_PRECONDITION: Operation denied by org policy on resource 'projects/PROJECT_NUMBER/locations/GOOGLE_CLOUD_REGION': ["customConstraints/custom.allowClusterCreateIfAnnotationPresent": "Allow new clusters only when certain annotations are set."] '@type': type.googleapis.com/google.rpc.ErrorInfo domain: googleapis.com metadata: customConstraints: customConstraints/custom.allowClusterCreateIfAnnotationPresent service: gkemulticloud.googleapis.com reason: CUSTOM_ORG_POLICY_VIOLATION