使用自定义组织政策限制条件,为实例强制实施统一的配置和限制条件

本文档介绍了如何为 Memorystore for Valkey 实例创建、设置和管理自定义组织政策限制条件。如需大致了解自定义 组织政策,请参阅自定义组织政策

借助 Google Cloud 组织政策服务,您可以对组织的资源进行程序化 集中控制。作为 组织政策管理员,您可以 定义组织政策,这是一组称为 限制条件的限制,会应用于 Google Cloud 资源及其后代 在 Google Cloud 资源层次结构中。您可以在组织、文件夹或项目级强制执行组织政策。

组织政策服务为各种 Google Cloud 服务(包括 Memorystore for Valkey)提供预定义限制条件。但是,如果您想要更精细地控制和自定义组织政策中受限的特定字段,则可以创建自定义限制条件并在组织政策中使用这些限制条件。

通过实现自定义组织政策限制条件,您可以强制实施统一的配置及限制条件。这可验证您的实例是否遵循安全最佳实践及相关监管要求。

您可以使用自定义组织政策来允许或拒绝 Memorystore for Valkey 资源。例如,如果您在强制执行自定义限制条件的情况下尝试创建或更新实例,并且该实例不符合限制条件,则 Memorystore for Valkey 不会创建或更新该实例。 此外,添加到使用自定义组织政策的组织或文件夹中的所有项目都会继承相应政策的限制条件。

政策继承

如果您对资源强制执行政策,默认情况下,该资源的后代会继承组织政策。例如,如果您对文件夹强制执行政策 ,则 Google Cloud 会对该文件夹中的所有项目强制执行该政策 。如需详细了解此行为及其更改方式,请参阅 层次结构评估规则

准备工作

在开始使用自定义组织政策之前,请完成本部分中的前提条件。

使用 Google Cloud 控制台、Google Cloud CLI 和 API

如需使用 Google Cloud 控制台、gcloud CLI 和 API,请执行以下 操作:

  1. 在 Google Cloud 控制台的项目选择器页面上,选择或 创建项目。 Google Cloud

    转到项目选择器

  2. 确保您的项目已启用结算功能。了解如何检查项目是否已启用结算功能
  3. 安装初始化 Google Cloud CLI (gcloud CLI)。

    如果您已安装 gcloud CLI,请运行 gcloud components update,确保您拥有最新版本。如需访问 Memorystore for Valkey gcloud CLI 命令,您至少需要 gcloud CLI 版本 489.0.0

  4. 启用 Memorystore for Valkey API。
    Memorystore for Valkey API
  5. 如果您使用的是外部身份提供方 (IdP),则必须先 使用联合身份登录 gcloud CLI 。
  6. 确保您知道组织的 ID

分配角色

如需为实例使用自定义组织政策,您必须在您的 Google Cloud 项目中拥有以下 IAM 角色 之一:

  • roles/memorystore.admin(Memorystore Admin 角色)
  • roles/owner(Owner 角色)
  • roles/editor(Editor 角色)

此外,您还必须向用户或服务帐号授予 roles/orgpolicy.policyAdmin(组织政策管理员)角色和 memorystore.instances.create 权限。如需详细了解如何授予角色和权限,请参阅管理对项目、文件夹和组织的访问权限

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

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

您可以创建自定义限制条件,以定义受该限制条件约束的资源、方法、条件和操作。这些内容特定于您在其中强制执行组织政策的服务。

您可以使用 通用表达式语言 (CEL) 为自定义限制条件定义条件。如需详细了解如何使用 CEL 在自定义限制条件中构建条件,请参阅创建和管理自定义限制条件的 CEL 部分。

创建自定义限制条件后,您可以对其进行设置,以使其可用于组织中的组织政策。您可以使用 Google Cloud 控制台或 Google Cloud CLI 来执行此操作。

控制台

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

    转到组织政策

  2. 点击 Google Cloud 控制台菜单栏中的菜单,然后选择要为其创建和设置自定义限制条件的项目、文件夹或组织。
  3. 组织政策 页面上,点击自定义 限制条件
  4. 创建自定义 限制条件 页面的显示名称 字段中,为限制条件输入一个人类可读名称。此名称会在错误消息中使用,您也可以将其用于 识别和调试用途。此字段最多可包含 200 个字符。

  5. 限制条件 ID 字段中,输入自定义 限制条件的 ID。此限制条件必须以 custom. 开头,只能包含大写字母、小写字母或数字(例如 custom.restrictFiveShardInstances)。此值的最大长度为 70 个字符,不包括前缀。例如:organizations/123456789/customConstraints/custom.allowConstraint

  6. 说明 字段中,输入人类可读的 说明限制条件。当违反组织政策时,此说明将用作错误 消息。请包含有关发生违规的原因以及如何解决违规问题的详细信息。此字段最多可包含 2,000 个字符。

  7. 资源类型 菜单中,选择包含要限制的对象和字段的 Memorystore for Valkey 资源的名称(而非 URI)。例如:memorystore.googleapis.com/Instance
  8. 强制执行方法 菜单中,进行以下选择之一:
    • 在创建时强制执行:仅当您创建 Memorystore for Valkey 实例时,才会强制执行限制条件。
    • 在创建和更新时强制执行:当您创建和更新实例时,会强制执行限制条件。
  9. 如需定义针对受支持服务资源的表示形式 编写的 CEL 条件,请执行以下操作:

    1. 条件 字段中,点击修改
    2. 添加条件 对话框中,输入 CEL 条件。例如:resource.shardCount == 5

      此条件的最大长度为 1,000 个字符。如需详细了解可针对其编写条件的资源,请参阅 支持的自定义限制条件及操作

    3. 点击保存
  10. 操作 部分中,进行以下选择之一,以表示满足条件时要执行的操作:
    • 允许:如果条件计算结果为 true,则 允许执行创建或更新实例的操作。除了条件中明确列出的情况之外,其他所有情况都会被阻止。
    • 拒绝:如果条件计算结果为 true,则 创建或更新实例的操作会被阻止。
  11. YAML 配置 部分中,验证自定义限制条件的 YAML 配置是否正确。
  12. 点击创建限制条件

gcloud

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

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

    进行以下替换:

    • ORGANIZATION_ID:您的组织 ID,例如 123456789
    • CONSTRAINT_NAME:自定义 限制条件的名称。此限制条件必须以 custom. 开头,只能包含大写字母、小写字母或数字(例如 custom.restrictFiveShardInstances)。此值的最大长度为 70 个字符,不包括前缀。例如: organizations/123456789/customConstraints/custom.allowConstraint.
    • RESOURCE_NAME:包含要限制的对象和字段的 Memorystore for Valkey 资源的名称(而非 URI)。例如:memorystore.googleapis.com/Instance
    • CONDITION:针对 受支持服务资源的表示形式编写的 CEL 条件。例如: "resource.shardCount == 5"

      此字段的长度上限为 1,000 个字符。如需详细了解可针对其编写条件的资源,请参阅支持的自定义限制条件及操作

    • ACTION:满足条件时要执行的操作。此操作可以是下列值之一:
      • ALLOW:如果条件计算结果为 true,则允许执行创建或更新实例的操作。除了条件中明确列出的情况之外,其他所有情况 都会被阻止。
      • DENY:如果条件计算结果为 true,则创建或更新实例的操作会被阻止。
    • DISPLAY_NAME:限制条件的 直观易记名称。此名称会在错误消息中使用,您也可以将其用于 识别和调试用途。此字段最多可包含 200 个字符。
    • DESCRIPTION:人类可读的 限制条件说明。当违反组织 政策时,此说明将用作错误消息。请包含有关发生违规的原因 以及如何解决违规问题的详细信息。此字段最多可包含 2,000 个字符。
  2. 如需设置自定义限制条件,请使用 gcloud org-policies set-custom-constraint 命令:

    gcloud org-policies set-custom-constraint CONSTRAINT_PATH
    

    CONSTRAINT_PATH 替换为自定义 限制条件文件的完整路径(例如 /home/user/customconstraint.yaml)。

    设置自定义限制条件后,它会作为 组织政策显示在 Google Cloud 组织 政策列表中。

  3. 如需验证自定义限制条件是否存在,请使用 gcloud org-policies list-custom-constraints 命令:

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

强制执行自定义组织政策

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

控制台

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

    转到组织政策

  2. 在项目选择器中,选择要为其设置组织政策的项目。
  3. 组织政策页面上的列表中选择您的限制条件,以查看该限制条件的政策详情页面。
  4. 如需为该资源配置组织政策,请点击管理政策
  5. 修改政策页面,选择覆盖父级政策
  6. 点击添加规则
  7. 强制执行部分中,选择是否强制执行此组织政策。
  8. (可选)如需使组织政策成为基于某个标记的条件性政策,请点击添加条件。请注意,如果您向组织 政策添加条件规则,则必须至少添加一个无条件规则,否则无法保存政策。如需了解详情,请参阅 使用标记限定组织政策的范围
  9. 点击测试更改 以模拟组织政策的效果。如需了解详情,请参阅使用 Policy Simulator 测试组织政策更改
  10. 如需在试运行模式下强制执行组织政策,请点击设置试运行政策 。如需了解详情,请参阅 测试组织政策
  11. 验证试运行模式下的组织政策按预期运行后,点击设置政策来设置现行政策。

gcloud

  1. 如需创建包含布尔值规则的组织政策,请创建引用该限制条件的 YAML 政策文件:
  2. name: projects/PROJECT_ID/policies/CONSTRAINT_NAME
    spec:
      rules:
      - enforce: true
    
    dryRunSpec:
      rules:
      - enforce: true

    请替换以下内容:

    • PROJECT_ID:要对其强制执行您的限制条件的项目。
    • CONSTRAINT_NAME:您为自定义限制条件定义的名称。例如,custom.restrictFiveShardInstances
  3. 如需在试运行模式下强制执行组织政策,请运行以下带有 dryRunSpec 标志的命令:
  4. gcloud org-policies set-policy POLICY_PATH --update-mask=dryRunSpec

    POLICY_PATH 替换为组织政策 YAML 文件的完整路径。该政策最长需要 15 分钟才能生效。

  5. 验证试运行模式下的组织政策按预期运行后,使用 org-policies set-policy 命令和 spec 标志设置现行政策:
  6. gcloud org-policies set-policy POLICY_PATH --update-mask=spec

    POLICY_PATH 替换为组织政策 YAML 文件的完整路径。该政策最长需要 15 分钟才能生效。

测试自定义限制条件

如需测试 Memorystore for Valkey 的自定义组织政策限制条件,请尝试创建或更新不符合强制执行的政策的实例。

例如,假设某项限制条件禁止您创建具有五个分片的实例。您可以尝试创建该实例并将分片数设置为 5 来测试此限制条件。由于该实例不符合限制条件,因此 Memorystore for Valkey 不会创建该实例。

支持的自定义限制条件及操作

您可以使用以下 Memorystore for Valkey 自定义限制条件字段: 在 创建或更新实例

  • Memorystore for Valkey 实例
    • resource.name
    • resource.replicaCount
    • resource.shardCount
    • resource.nodeType
    • resource.engineVersion
    • resource.mode
    • resource.kmsKey
    • resource.simulateMaintenanceEvent
    • resource.engineConfigs
    • resource.persistenceConfig.mode
    • resource.persistenceConfig.rdbConfig.rdbSnapshotPeriod
    • resource.persistenceConfig.rdbConfig.rdbSnapshotStartTime
    • resource.persistenceConfig.aofConfig.appendFsync
    • resource.deletionProtectionEnabled
    • resource.maintenancePolicy.weeklyMaintenanceWindow.day
    • resource.maintenancePolicy.weeklyMaintenanceWindow.startTime
    • resource.automatedBackupConfig.automatedBackupMode
    • resource.automatedBackupConfig.fixedFrequencySchedule
    • resource.automatedBackupConfig.retention
    • resource.crossInstanceReplicationConfig.instanceRole
    • resource.crossInstanceReplicationConfig.primaryInstance
    • resource.crossInstanceReplicationConfig.secondaryInstances
    • resource.crossInstanceReplicationConfig.primaryInstance.instance
    • resource.crossInstanceReplicationConfig.secondaryInstances.instance
    • resource.zoneDistributionConfig.zone
    • resource.zoneDistributionConfig.mode
    • resource.transitEncryptionMode
    • resource.authorizationMode
    • resource.serverCaMode
    • resource.managedBackupSource.backup
    • resource.serverCaPool

自定义限制条件示例

下表提供了一个自定义限制条件示例,该限制条件可防止用户创建或更新具有五个分片的 Memorystore for Valkey 实例:

说明 限制条件语法
限制创建或更新具有五个分片的实例
    name: organizations/ORGANIZATION_ID/customConstraints/custom.restrictFiveShardInstances
    resourceTypes:
    - memorystore.googleapis.com/Instance
    methodTypes:
    - CREATE
    - UPDATE
    condition: "resource.shardCount == 5"
    actionType: DENY
    displayName: Restrict five-shard Memorystore for Valkey instances
    description: Prevent users from creating or updating instances that have
    five shards.

后续步骤