添加自定义组织政策

本页面介绍如何对 Cloud SQL 实例创建、设置和管理自定义限制条件。如需简要了解自定义组织政策,请参阅自定义组织政策

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. 确保您的 Google Cloud 项目已启用结算功能

  4. 安装 Google Cloud CLI。
  5. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  6. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  7. 确保您的 Google Cloud 项目已启用结算功能

  8. 安装 Google Cloud CLI。
  9. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  10. 通过 IAM 和管理页面,为您的用户或服务账号添加 Organization Policy Administrator 角色 (roles/orgpolicy.policyAdmin)。

    转到“IAM 账号”页面

  11. 在执行此过程之前,请先参阅限制

自定义限制条件支持的字段

您可以对以下字段设置自定义限制条件:

字段 用例示例
SqlDatabaseVersion 强制使用特定的数据库版本
区域 将实例创建限制在特定区域
availabilityType 强制实施高可用性
ipConfiguration > pscConfig > allowedConsumerProjects 将 PSC 中的使用方项目的许可名单限制为特定项目
ipConfiguration > sslMode 强制将 SSL 模式设为 ENCRYPTED_ONLYTRUSTED_CLIENT_CERTIFICATE_REQUIRED。在 Google Cloud 控制台中创建 Cloud SQL 实例时,您无法选择 SSL 模式。因此,如果您创建此自定义组织政策,需要使用 gcloud CLI、API 或 Terraform 创建 Cloud SQL 实例。
dataDiskType 强制使用 SSD 或 HDD
backupConfiguration > location 将自动备份位置限制为特定位置
backupConfiguration > pointInTimeRecoveryEnabled 强制所有实例启用 PITR
backupConfiguration > transactionLogRetentionDays 强制所有实例为事务日志保留使用特定保留期限
backupConfiguration > backupRetentionSettings > retentionUnit 对所有备份强制实施保留天数
passwordValidationPolicy > minLength 强制执行最小长度方面的密码政策
passwordValidationPolicy > complexity 强制执行复杂性方面的密码政策
passwordValidationPolicy > reuseInterval 强制执行特定重复使用间隔方面的密码政策
passwordValidationPolicy > disallowUsernameSubstring 强制执行不允许将用户名用作密码的密码政策
版本 强制所有实例使用企业 Plus 版
connectorEnforcement 要求所有连接都使用 Cloud SQL 连接器
dataCacheConfig 要求所有实例都使用数据缓存

创建和设置自定义限制条件

自定义限制条件是在 YAML 文件中,使用实施组织政策的服务所支持的资源、方法、条件和操作定义的。自定义限制条件的条件使用通用表达式语言 (CEL) 进行定义。如需详细了解如何使用 CEL 构建自定义限制条件中的条件,请参阅通用表达式语言

控制台

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

    转到“组织政策”

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

  3. 在项目选择器中,选择要为其设置组织政策的资源。

  4. 点击 自定义限制条件

  5. 显示名称框中,输入限制条件的名称。此字段的最大长度为 200 个字符。

  6. 限制条件 ID 框中,为新的自定义限制条件输入所需的名称。自定义限制条件必须以 custom. 开头,只能包含大写字母、小写字母或数字,例如 custom.requireCloudSqlPasswordMinLength。该字段的最大长度为 70 个字符,不计算前缀,例如 organizations/123456789/customConstraints/custom.

  7. 说明框中,输入直观易懂的限制条件说明,在违反政策时此说明内容会以错误消息的形式显示。此字段的最大长度为 2000 个字符。

  8. 资源类型框中,选择包含要限制的对象和字段的 Google Cloud REST 资源的名称,例如 sqladmin.googleapis.com/Instance。每种资源类型最多可有 20 个自定义限制条件。如果您尝试为已具有 20 个自定义限制条件的资源类型创建自定义限制条件,操作将失败。

  9. 强制执行方法下,选择是对 REST CREATE 方法强制执行限制条件,还是同时对 CREATEUPDATE 方法强制执行限制条件。

    修改条件,然后执行以下操作:

    1. 添加条件面板中,创建一个引用受支持的服务资源的 CEL 条件,例如 resource.settings.passwordValidationPolicy.minLength > 10。此字段的最大长度为 1,000 个字符。如需详细了解 CEL 用法,请参阅通用表达式语言。如需详细了解可在自定义限制条件中使用的服务资源,请参阅自定义限制条件支持的服务

    2. 点击保存

  10. 操作下,选择在满足前面的条件时是允许还是拒绝评估的方法。

    • 如果条件计算结果为 true,则拒绝会阻止操作创建或更新资源。

    • 如果条件计算结果为 true,则允许会允许操作创建或更新资源。除了条件中明确列出的情况之外,其他所有情况都会被阻止。

  11. 点击创建限制条件

在每个字段中输入值后,右侧将显示此自定义限制条件的等效 YAML 配置。

gcloud

如需为自定义限制条件创建 YAML 文件,请使用以下格式:

name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- container.googleapis.com/RESOURCE_NAME
methodTypes:
- CREATE
- UPDATE
condition: "CONDITION"
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION

替换以下内容:

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

  • CONSTRAINT_NAME:新的自定义限制条件的名称。 自定义限制条件必须以 custom. 开头,只能包含大写字母、小写字母或数字,例如 custom.enableGkeAutopilot。该字段的最大长度为 70 个字符,不计算前缀,例如 organizations/123456789/customConstraints/custom

  • RESOURCE_NAME:包含要限制的对象和字段的 GKE API REST 资源的名称(而非 URI)。例如 Cluster

  • CONDITION:针对受支持的服务资源的表示法编写的 CEL 条件。此字段的最大长度为 1,000 个字符。

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

    • 如果条件计算结果为 true,则拒绝会阻止操作创建或更新资源。

    • 如果条件计算结果为 true,则允许会允许操作创建或更新资源。除了条件中明确列出的情况之外,其他所有情况都会被阻止。

  • DISPLAY_NAME:限制条件的名称。此字段的最大长度为 200 个字符。

  • DESCRIPTION:限制条件的说明,在违反政策时会显示为错误消息。此字段的长度上限为 2,000 个字符。

使用 gcloud CLI 创建新的自定义限制条件后,您必须对其进行设置,以使其可用于组织中的组织政策。如需设置自定义限制条件,请使用 gcloud org-policies set-custom-constraint 命令:
gcloud org-policies set-custom-constraint CONSTRAINT_PATH
CONSTRAINT_PATH 替换为自定义限制条件文件的完整路径。例如 /home/user/customconstraint.yaml。完成后,您可发现您的自定义限制条件已成为 Google Cloud 组织政策列表中的可用组织政策。 如需验证自定义限制条件是否存在,请使用 gcloud org-policies list-custom-constraints命令:
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
ORGANIZATION_ID 替换为组织资源的 ID。如需了解详情,请参阅查看组织政策

强制执行自定义组织政策

设置自定义限制条件后,其运行方式与预定义的布尔值限制条件相同。Google Cloud 在评估是否允许用户请求时会先检查自定义限制条件。如果有任何自定义组织政策拒绝请求,则请求会被拒绝。Google Cloud 随后会检查对该资源强制执行的预定义组织政策。

如需强制执行布尔值限制条件,您可以创建引用该限制条件的组织政策,并将该组织政策应用于 Google Cloud 资源。

控制台

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

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

    转到“组织政策”

  2. 选择页面顶部的项目选择器。
  3. 在项目选择器中,选择要设置组织政策的项目。
  4. 组织政策页面的列表中选择限制条件。 此时应显示该限制条件的政策详情页面。
  5. 如需为该资源配置组织政策,请点击管理政策
  6. 修改政策页面,选择覆盖父级政策
  7. 点击添加规则
  8. 强制执行下,选择开启还是关闭此组织政策的强制执行。
  9. (可选)如需使组织政策成为基于某个标记的条件性政策,请点击添加条件。请注意,如果您向组织政策添加条件规则,则必须至少添加一个无条件规则,否则无法保存政策。如需了解详情,请参阅使用标记设置组织政策
  10. 如果是自定义限制条件,您可以点击测试更改来模拟此组织政策的效果。如需了解详情,请参阅使用 Policy Simulator 测试组织政策更改
  11. 若要完成并应用组织政策,请点击设置政策。该政策将在 15 分钟内生效。

gcloud

如需创建强制执行布尔值限制条件的组织政策,请创建引用该限制条件的 YAML 政策文件:

      name: projects/PROJECT_ID/policies/CONSTRAINT_NAME
      spec:
        rules:
        - enforce: true
    

请替换以下内容:

  • PROJECT_ID:要对其实施限制条件的项目。
  • CONSTRAINT_NAME:您为自定义限制条件定义的名称。例如,custom.enableGkeAutopilot

如需强制执行包含限制条件的组织政策,请运行以下命令:

    gcloud org-policies set-policy POLICY_PATH
    

POLICY_PATH 替换为组织政策 YAML 文件的完整路径。该政策将在 15 分钟内生效。

更新自定义限制条件

如需更新自定义限制条件,您可以在 Google Cloud 控制台中修改限制条件,或者创建新的 YAML 文件并再次使用 set-custom-constraint gcloud CLI 命令。自定义限制条件没有版本控制,因此这会覆盖现有的自定义限制条件。如果自定义限制条件已强制执行,则更新的自定义限制条件会立即生效。

控制台

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

    转到“组织政策”

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

  3. 在项目选择器中,选择要为其更新组织政策的资源。

  4. 组织政策页面的列表中选择要修改的限制条件。此时应显示该限制条件的政策详情页面。

  5. 点击 修改限制条件

  6. 更改显示名称、说明、强制执行方法、条件和操作。创建限制条件后,您便无法更改限制条件 ID 或资源类型。

  7. 点击保存更改

gcloud

如需使用 gcloud CLI 修改现有自定义限制条件,请创建包含您要进行的更改的新 YAML 文件:

name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- RESOURCE_NAME
methodTypes:
- METHOD1
- METHOD2
condition: "CONDITION"
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION

替换以下内容:

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

  • CONSTRAINT_NAME:新的自定义限制条件的名称。 自定义限制条件必须以 custom. 开头,只能包含大写字母、小写字母或数字,例如 custom.disableGkeAutoUpgrade。该字段的最大长度为 70 个字符,不计算前缀,例如 organizations/123456789/customConstraints/custom.

  • RESOURCE_NAME:包含要限制的对象和字段的 Google Cloud REST 资源的完全限定名称。例如 container.googleapis.com/NodePool。如需详细了解可在自定义限制条件中使用的服务资源,请参阅自定义限制条件支持的服务

  • METHOD1,METHOD2:要对其强制执行限制条件的 RESTful 方法的列表。可以是 CREATECREATEUPDATE。 并非所有 Google Cloud 服务都支持这两种方法。如需查看每种服务支持的方法,请在支持的服务中找到相应服务。

  • CONDITION:引用受支持的服务资源的 CEL 条件,例如 "resource.management.autoUpgrade == false"。此字段的最大长度为 1,000 个字符。如需详细了解 CEL 用法,请参阅通用表达式语言

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

  • DISPLAY_NAME:限制条件的名称。此字段的最大长度为 200 个字符。

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

使用 gcloud CLI 创建新的自定义限制条件后,您必须对其进行设置,以使其可用于组织中的组织政策。如需设置自定义限制条件,请使用 gcloud org-policies set-custom-constraint 命令:

gcloud org-policies set-custom-constraint CONSTRAINT_PATH
CONSTRAINT_PATH 替换为自定义限制条件文件的完整路径。例如 /home/user/customconstraint.yaml。完成后,您可发现您的自定义限制条件已成为 Google Cloud 组织政策列表中的可用组织政策。 如需验证自定义限制条件是否存在,请使用 gcloud org-policies list-custom-constraints命令:
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
ORGANIZATION_ID 替换为组织资源的 ID。如需了解详情,请参阅查看组织政策

删除自定义限制条件

您可以使用 Google Cloud 控制台或 gcloud 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_NAME \
  --organization=ORGANIZATION_ID

替换以下内容:

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

  • CONSTRAINT_NAME:自定义限制条件的名称。例如 custom.disableGkeAutoUpgrade

输出类似于以下内容:

Deleted custom constraint [organizations/123456789/customConstraints/custom.disableGkeAutoUpgrade]

如果您删除某个自定义限制条件,则使用该限制条件创建的所有政策都将继续存在,但会被忽略。您无法创建与已删除的自定义限制条件同名的其他自定义限制条件。

示例:使用自定义限制条件强制使用 SSD 而不是 HDD

  1. 创建 dataDiskType.yaml 文件,如下所示:

    name: organizations/651333429324/customConstraints/custom.dataDiskType
    resourceTypes:
    - sqladmin.googleapis.com/Instance
    methodTypes:
    - CREATE
    - UPDATE
    condition: resource.settings.dataDiskType == "PD_SSD"
    actionType: ALLOW
    displayName: dataDiskType must be PD_SDD
    description: dataDiskType must be PD_SSD
    

    这可确保对实例执行的所有 CREATEUPDATE 方法都满足 dataDiskTypeSSD 这一限制条件。因此,任何涉及 HDD 的实例都会被拒绝。

  2. 在组织级层设置自定义限制条件:

    gcloud org-policies set-custom-constraint dataDiskType.yaml
    
  3. 创建“enforceDataDiskType.yaml”,如下所示:

    name: projects/custom-constraints-cloudsql3/policies/custom.dataDiskType
    spec:
    rules:
    - enforce: true
    
  4. 在项目级层强制执行自定义限制条件:

    gcloud org-policies set-policy enforceDataDiskType.yaml
    

后续步骤