阻止创建使用容器元数据的虚拟机

为确保组织中的资源不使用已弃用的容器启动代理 (konlet) 和相关的 gce-container-declaration 元数据,Google 建议您强制执行组织政策。 强制执行受管限制条件 compute.managed.disableVmsWithContainerStartupAgent后,系统会禁止创建使用已弃用元数据的资源。

本文档介绍了如何执行以下操作:

  • 强制执行组织政策,以禁止创建使用容器启动代理的 Compute Engine 实例。
  • 通过在试运行模式下强制执行政策来监控组织政策的影响。
  • 使用 Logs Explorer 识别尝试使用已弃用的容器启动代理的项目。

强制执行组织政策,以禁止创建使用容器元数据的虚拟机

为防止创建使用已弃用的容器启动代理的资源, Google 建议您强制执行组织政策。 constraints/compute.managed.disableVmsWithContainerStartupAgent 限制条件可防止使用 gce-container-declaration 元数据键创建新资源。此限制条件不会影响现有实例或实例模板。

您可以使用 Google Cloud 控制台、 Google Cloud CLI 或 Compute Engine API 强制执行此限制条件。

控制台

如需使用控制台设置组织政策,请完成以下步骤:

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

    转到组织政策

  2. 从项目选择器中,选择要为其修改组织政策的项目、文件夹或组织。

    组织政策 页面会显示可用的组织政策限制列表。

  3. 从限制列表中选择禁止创建使用已弃用的容器启动代理 (konlet) 的 Compute Engine 实例 限制条件。随即显示的政策详情 页面会介绍该限制条件,并提供有关如何应用该限制条件的信息。

  4. 如需为该资源更新组织政策,请点击管理政策 。

  5. 在修改政策 页面上,点击替换父级的政策。

  6. 选择添加规则 。

  7. 在实施下,选择开启。

  8. (可选)如需在强制执行组织政策更改之前预览其影响,请点击测试更改 。如需详细了解如何测试 组织政策更改,请参阅 使用 Policy Simulator 测试组织政策更改。

  9. 如需在试运行模式下强制执行组织政策,请点击设置试运行政策 。如需了解详情,请参阅 从正式政策在试运行模式下创建组织政策。

  10. 验证试运行模式下的组织政策按预期运行后,点击设置政策 来设置现行政策。

gcloud

  1. 创建 YAML 文件以定义组织政策。

    name: RESOURCE_TYPE/RESOURCE_ID/policies/compute.managed.disableVmsWithContainerStartupAgent
    spec:
      rules:
      - enforce: true
    dryRunSpec:
      rules:
      - enforce: true
    

    替换以下内容:

    • 将 RESOURCE_TYPE 替换为 organizations、folders 或 projects。

    • 将 RESOURCE_ID 替换为您的组织 ID、文件夹 ID、项目 ID 或项目编号,具体取决于在 RESOURCE_TYPE 中指定的资源类型。

    以下示例展示了一个 YAML 文件,该文件对 ID 为 123456 的项目强制执行组织政策:

    name: projects/123456/policies/compute.managed.disableVmsWithContainerStartupAgent
    spec:
      rules:
      - enforce: true
    dryRunSpec:
      rules:
      - enforce: true
    

    (可选)如需使组织政策以标签为条件,请向 rules 添加 condition 代码块。如果您向组织政策添加条件规则,则必须至少添加一个无条件规则,否则无法保存政策。如需了解详情,请参阅 使用标签设置组织政策。

  2. 运行带有 dryRunSpec 标志的 org-policies set-policy 命令,以在 试运行模式下设置组织政策:

     gcloud org-policies set-policy POLICY_PATH \
       --update-mask=dryRunSpec
    

    将 POLICY_PATH 替换为组织政策 YAML 文件的完整路径。

    如需详细了解试运行组织政策,请参阅 在试运行模式下创建组织政策。

  3. 使用 policy-intelligence simulate orgpolicy 命令在强制执行组织政策更改之前预览其影响:

    gcloud policy-intelligence simulate orgpolicy \
      --organization=ORGANIZATION_ID \
      --policies=POLICY_PATH
    

    替换以下内容:

    • 将 ORGANIZATION_ID 替换为您的组织 ID,例如 1234567890123。不支持模拟对多个组织进行的更改。

    • 将 POLICY_PATH 替换为组织政策 YAML 文件的完整路径。

    如需详细了解如何测试组织政策更改,请参阅 使用 Policy Simulator 测试组织政策更改。

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

    gcloud org-policies set-policy POLICY_PATH \
      --update-mask=spec
    

    将 POLICY_PATH 替换为组织政策 YAML 文件的完整路径。

REST

如需设置组织政策,请使用 organizations.policies.create 方法。

POST https://orgpolicy.googleapis.com/v2/{parent=organizations/ORGANIZATION_ID}/policies

请求 JSON 正文包含组织政策的定义。 如果此限制条件不支持参数,请省略 rules 下的 parameters 代码块。

{
  "name": "RESOURCE_TYPE/RESOURCE_ID/policies/compute.managed.disableVmsWithContainerStartupAgent",
  "spec": {
    "rules": [
      {
        "enforce": true,
      }
    ]
  },
  "dryRunSpec": {
    "rules": [
      {
        "enforce": true,
      }
    ]
  }
}

替换以下内容:

  • 将 RESOURCE_TYPE 替换为 organizations、folders 或 projects。

  • 将 RESOURCE_ID 替换为您的组织 ID、文件夹 ID、项目 ID 或项目编号,具体取决于在 RESOURCE_TYPE 中指定的资源类型。

以下示例展示了一个请求正文,该正文对 ID 为 123456 的项目强制执行组织政策:

  {
    "name": "projects/123456/policies/compute.managed.disableVmsWithContainerStartupAgent",
    "spec": {
      "rules": [
        {
          "enforce": true,
        }
      ]
    },
    "dryRunSpec": {
      "rules": [
        {
          "enforce": true,
        }
      ]
    }
  }
  ```

Optionally, to make the organization policy conditional on a tag, add a
`condition` block to the `rules`. If you add a conditional rule to an
organization policy, you must add at least one unconditional rule or the
policy cannot be saved. For more details, see
[Setting an organization policy with tags](/resource-manager/docs/organization-policy/tags-organization-policy).

For more information about dry-run organization policies, see
[Create an organization policy in dry-run mode](/resource-manager/docs/organization-policy/dry-run-policy).

在试运行模式下强制执行政策,以监控已弃用元数据的使用情况

您可以采用试运行模式应用政策,而不是直接强制执行政策(这会阻止创建使用容器声明元数据的实例)。此设置可让您监控和记录政策可以阻止的任何操作,而不会实际干扰操作。如需了解详情,请参阅 在试运行 模式下创建组织政策。

当操作触发试运行政策时(例如,如果您尝试使用 gce-container-declaration 元数据键创建实例),系统会在 Cloud Audit Logs 中生成日志条目。

如需识别尝试使用已弃用的容器启动代理的项目,请完成以下步骤:

  1. 在 Google Cloud 控制台中,前往 Logs Explorer 页面。

    转到日志浏览器

  2. 在查询 窗格中,输入以下查询:

    protoPayload.metadata.dryRun="true"
    protoPayload.methodName="CheckOrgPolicy"
    protoPayload.resourceName =~ "/compute.managed.disableVmsWithContainerStartupAgent"
    
  3. 点击运行查询 。

  4. 通过查看日志条目,识别尝试使用已弃用的容器启动代理的项目。 试运行违规日志具有以下特征:

    • 它们与 orgpolicy.googleapis.com 相关。
    • protoPayload.metadata.dryRun 字段设置为 true。
    • 违规详情中包含 constraints/compute.managed.disableVmsWithContainerStartupAgent 限制条件。
  5. 查看审核日志中的信息,了解已弃用的容器启动代理仍在何处使用以及使用原因。此信息可指导您将这些工作负载迁移到受支持的替代方案。

  6. 验证试运行模式下的组织政策按预期运行后,将强制执行状态从试运行模式更改为正式模式,以强制执行政策。

如需详细了解如何使用 Logs Explorer,请参阅使用 Logs Explorer 查看日志。

后续步骤