托管式限制

托管式限制条件是基于现代平台构建的预定义组织政策,可让您以程序化方式集中控制 Compute Engine 资源。它们内置了对安全发布工具(例如 Policy Simulator 和预演)的支持。

托管式限制条件以 compute.managed.* 为前缀,可直接替代旧版 compute.* 限制条件。

优势

  • 安全发布和监控:利用完善的工具实施政策,更快地控制变更,并使用模拟和试运行功能逐步部署。
  • 一致的日志记录:强制执行日志记录和错误消息的统一性,从而简化集中式监控并简化审核。

政策继承

您在资源上设置的组织政策会由资源层次结构中该资源的后代继承。例如,如果您对某个文件夹强制执行一项政策, Cloud de Confiance by S3NS 会对该文件夹中的所有项目强制执行该政策。

价格

组织政策服务(包括预定义 [旧版]、托管式和自定义组织政策)可免费使用。

准备工作

  • 如果您尚未设置身份验证,请进行设置。身份验证用于验证您的身份,以便访问 Cloud de Confiance by S3NS 服务和 API。如需从本地开发环境运行代码或示例,您可以通过选择以下选项之一向 Compute Engine 进行身份验证:

    选择标签页以了解您打算如何使用本页面上的示例:

    控制台

    当您使用 Cloud de Confiance 控制台访问 Cloud de Confiance by S3NS 服务和 API 时,无需设置身份验证。

    gcloud

    1. 安装 Google Cloud CLI,然后 使用联合身份登录 gcloud CLI。 登录后,运行以下命令来初始化 Google Cloud CLI:

      gcloud init
  • 设置默认区域和可用区
  • REST

    如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭证。

      安装 Google Cloud CLI,然后 使用联合身份登录 gcloud CLI

    如需了解详情,请参阅 Cloud de Confiance 身份验证文档中的使用 REST 时进行身份验证

  • 请确保您知道您的组织 ID
  • 如果您尚未安装 gcloud CLI,请先安装,然后运行 gcloud init 对其进行初始化。
  • 为测试设置默认项目。

所需的角色

如需获得管理具有托管式限制的组织政策所需的权限,请让您的管理员为您授予以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

这些预定义角色包含管理具有托管式限制的组织政策所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

管理具有托管式限制的组织政策需要以下权限:

  • orgpolicy.constraints.list
  • orgpolicy.policies.create
  • orgpolicy.policies.delete
  • orgpolicy.policies.list
  • orgpolicy.policies.update
  • orgpolicy.policy.get
  • orgpolicy.policy.set
  • 如需测试限制条件,则需要具备以下权限:
    • 针对项目的 compute.instances.create 权限
    • 使用自定义映像创建虚拟机:针对映像的 compute.images.useReadOnly 权限
    • 使用快照创建虚拟机:针对快照的 compute.snapshots.useReadOnly 权限
    • 使用实例模板创建虚拟机:针对实例模板的 compute.instanceTemplates.useReadOnly 权限
    • 为虚拟机分配旧版网络:针对项目的 compute.networks.use 权限
    • 为虚拟机指定静态 IP 地址:针对项目的 compute.addresses.use 权限
    • 使用旧版网络时为虚拟机分配外部 IP 地址:针对项目的 compute.networks.useExternalIp 权限
    • 为虚拟机指定子网:针对项目或所选子网的 compute.subnetworks.use 权限
    • 在使用 VPC 网络时为虚拟机分配外部 IP 地址:针对项目或所选子网的 compute.subnetworks.useExternalIp 权限
    • 为虚拟机设置虚拟机实例元数据:针对项目的 compute.instances.setMetadata 权限
    • 为虚拟机设置标记:针对虚拟机的 compute.instances.setTags 权限
    • 为虚拟机设置标签:针对虚拟机的 compute.instances.setLabels 权限
    • 为虚拟机设置要使用的服务账号:针对虚拟机的 compute.instances.setServiceAccount 权限
    • 为虚拟机创建新磁盘:针对项目的 compute.disks.create 权限
    • 以只读或读写模式挂接现有磁盘:针对磁盘的 compute.disks.use 权限
    • 以只读模式挂接现有磁盘:针对磁盘的 compute.disks.useReadOnly 权限

您也可以使用自定义角色或其他预定义角色来获取这些权限。

可用的托管式限制

Compute Engine 提供以下受管理的组织政策限制条件:

分层元数据评估

依赖于预定义元数据键(例如 OS Login 或串行端口访问权限)的托管式限制支持分层评估。当 Compute Engine 评估这些限制条件时,它会检查在虚拟机实例、项目或可用区级层设置的元数据值。

通过在项目级或可用区级设置元数据值,您可以大规模管理虚拟机实例。不过,限制强制执行仅在虚拟机实例创建或更新 API 调用期间发生。因此,对项目或区域元数据的更改仅在创建或更新虚拟机实例时才会影响该实例的限制条件合规性。

基于元数据的限制和级别

限制条件 元数据键 元数据层次结构级别
compute.managed.disableSerialPortAccess serial-port-enable 项目、可用区、实例
compute.managed.requireOsLogin enable-oslogin 项目、可用区、实例
compute.managed.disableGuestAttributesAccess enable-guest-attributes 项目、可用区、实例
compute.managed.requireOsConfig enable-osconfig 项目、可用区、实例
compute.managed.disallowGlobalDns VmDnsSetting 项目、实例

安全发布:政策生命周期

为防止在逐步实施新限制时出现服务中断,Google 建议您按照以下步骤实施托管式限制:

使用 Policy Simulator 进行分析

在强制执行政策之前,请使用 Policy Simulator 查看哪些现有资源违反了该政策。请按照以下步骤操作:

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

    转到组织政策

  2. 在过滤栏中搜索您的限制条件,然后点击该限制条件的名称以前往其政策详情页面。

  3. 点击测试更改以生成模拟报告。

  4. 分层元数据更改可能需要几个小时才能反映在虚拟机元数据设置限制的模拟报告中。

  5. 查看报告,重新配置不合规的资源或申请豁免。

通过试运行进行验证

试运行模式会将违规行为记录到 Cloud Logging 中,但不会强制执行限制。

如需测试限制条件,请使用 gcloud org-policies set-policy 命令,如下所示:

  1. 创建一个包含 dryRunSpec 的 YAML 格式的政策文件(例如 dry-run-policy.yaml):

    name: projects/PROJECT_ID/policies/compute.managed.requireOsLogin
    dryRunSpec:
      rules:
      - enforce: true
    

    PROJECT_ID 替换为您的项目 ID。

  2. 应用政策:

    gcloud org-policies set-policy dry-run-policy.yaml
    

全面强制执行

模拟和测试政策后,您可以对资源强制执行该政策。 政策更改最长可能需要 15 分钟才能在所有Cloud de Confiance by S3NS 系统中传播。

测试限制条件执行情况

设置政策后,您可以使用 gcloud CLI 验证政策执行情况。例如,如需测试 compute.managed.requireOsLogin 限制条件,请按以下步骤操作:

  1. 列出现有政策以确认您的配置:

    gcloud org-policies list --project=PROJECT_ID
    
  2. 使用 YAML 文件应用强制执行政策:

    gcloud org-policies set-policy enforce_managed_constraint.yaml
    
  3. 通过调用 mutation API 来验证强制执行情况。尝试创建具有不合规元数据的虚拟机实例应会失败:

    gcloud compute instances create VM_NAME \
        --machine-type=MACHINE_TYPE \
        --image-family=IMAGE_FAMILY \
        --image-project=IMAGE_PROJECT \
        --metadata=enable-oslogin=false
    

    替换以下内容:

    • VM_NAME:新虚拟机实例的名称。
    • MACHINE_TYPE:有效的机器类型,例如 e2-micro
    • IMAGE_FAMILY:有效的映像系列,例如 debian-11
    • IMAGE_PROJECT:映像系列的项目,例如 debian-cloud
  4. 查看错误消息。您应该会看到一条拒绝消息,其中指明了违反的具体限制:ERROR: (gcloud.compute.instances.create) Could not fetch resource: - Operation denied by org policy: [constraints/compute.managed.requireOsLogin]

有条件的豁免(使用标记)

您可以根据业务需求,使用标记为特定资源授予例外权限。在此示例中,我们使用名为 osLoginOptional 的标记来标识免于遵守 OS Login 要求的资源。当您将此标记与值为 true 的资源绑定时,组织政策允许该特定资源在未启用 OS Login 的情况下存在,即使该政策在您的环境中的其余部分仍处于严格强制执行状态。

如需使用标记授予例外情况,请按以下步骤操作:

  1. 创建标记:使用 gcloud CLI 创建标记键和标记值。

    1. 创建标记键:

      gcloud resource-manager tags keys create osLoginOptional \
          --parent=organizations/ORGANIZATION_ID
      
    2. 创建标记值:

      gcloud resource-manager tags values create true \
          --parent=organizations/ORGANIZATION_ID/tagKeys/osLoginOptional
      

    ORGANIZATION_ID 替换为您的组织 ID。

  2. 将标记绑定到资源。如需使项目免受 compute.managed.requireOsLogin 限制条件的约束,请使用 gcloud resource-manager tags bindings create 命令osLoginOptional=true 标记绑定到项目:

    gcloud resource-manager tags bindings create \
        --tag-value=ORGANIZATION_ID/osLoginOptional/true \
        --parent=//cloudresourcemanager.googleapis.com/projects/PROJECT_ID \
        --location=global
    

    ORGANIZATION_ID 替换为您的组织 ID,并将 PROJECT_ID 替换为您要豁免的项目 ID。

    如需了解如何将标记绑定到其他资源,请参阅将标记绑定到资源

  3. 更新政策:创建或更新政策 YAML 文件(例如 policy.yaml),以添加条件规则。

    name: projects/PROJECT_ID/policies/compute.managed.requireOsLogin
    spec:
      rules:
      - condition:
          expression: "resource.matchTag('ORGANIZATION_ID/osLoginOptional', 'true')"
        enforce: false
      - enforce: true
    

    替换以下内容:

    • PROJECT_ID:您的项目 ID。
    • ORGANIZATION_ID:您的组织 ID。
  4. 应用政策:使用以下 gcloud CLI 命令激活配置:

    gcloud org-policies set-policy policy.yaml
    

从旧版限制迁移

迁移时请注意,托管式限制在旧版政策的基础上有所改进,但并不能完全复制旧版政策的行为。托管式限制仅在创建或修改资源的 API 请求期间检查违规情况,因此可提供更高的可预测性。如果请求违反了限制条件,API 调用会失败并显示明确的错误。这与旧版政策不同,旧版政策可在操作的各个阶段强制执行,也可用作资源属性,因此强制执行行为的可预测性较低。

从旧版 compute.* 约束条件改用新版 compute.managed.* 等效约束条件时,请按以下步骤操作,以防止意外收紧限制:

  1. 发现:确定新的托管式限制替代方案。
  2. 分析和验证:使用 Policy Simulator 和试运行,如前所述。
  3. 强制执行受管理的限制条件:将新的受管理的限制条件与旧的限制条件一起应用。
  4. 删除旧版政策:
    • 前往 Cloud de Confiance 控制台中的“资产清单”,按 orgpolicy.Policy 和旧版限制条件名称进行过滤,以识别使用旧版限制条件的所有政策。
    • 删除使用旧版限制条件的所有政策。删除政策会将相应限制条件的政策重置为 Google 管理的默认行为。

后续步骤