监控安全强化型虚拟机的完整性

本主题介绍了如何使用 Cloud Monitoring 监控已启用完整性监控安全强化型虚拟机实例的启动完整性,确定完整性验证失败的原因,并更新完整性政策基准。

使用 Monitoring 监控虚拟机启动完整性

使用 Cloud Monitoring 查看完整性验证事件并为其设置提醒,使用 Cloud Logging 查看这些事件的详细信息。

查看完整性验证事件

如需使用 Metrics Explorer 查看受监控资源的指标,请执行以下操作:

  1. 在 Google Cloud 控制台中,转到 Metrics Explorer 页面:

    进入 Metrics Explorer

    如果您使用搜索栏查找此页面,请选择子标题为监控的结果。

  2. 指标元素中,展开选择指标菜单,在过滤栏中输入 Boot Validation,然后使用子菜单选择一个特定资源类型和指标:
    1. 活跃资源菜单中,选择虚拟机实例
    2. 活跃指标类别菜单中,选择实例
    3. 活跃指标菜单中,选择前期启动验证后期启动验证
      • Early Boot Validation(前期启动验证)显示上次启动序列的前期启动部分的通过/失败状态。前期启动是从 UEFI 固件启动到它将控制传递给启动加载程序的启动序列。
      • Late Boot Validation(启动后期验证):显示上次启动序列的启动后期部分的通过/失败状态。后期启动是从启动加载程序到完成的启动序列,包括加载操作系统内核。
    4. 点击应用
  3. 如需从显示结果中移除时序,请使用过滤条件元素

  4. 如需组合时序,请使用聚合元素上的菜单。例如,如需根据虚拟机所在的可用区显示虚拟机的 CPU 利用率,请将第一个菜单设置为平均值,并将第二个菜单设置为可用区

    聚合元素的第一个菜单设置为未聚合时,系统会显示所有时序。聚合元素的默认设置由您选择的指标类型决定。

  5. 对于配额和每天报告一个样本的其他指标,请执行以下操作:
    1. 显示窗格中,将微件类型设置为堆叠条形图
    2. 将时间段设置为至少一周。

为完整性验证事件设置提醒

如果希望在虚拟机实例启动验证失败时收到通知,请为前期启动验证后期启动验证指标值设置提醒。如需了解如何设置提醒,请参阅提醒简介

查看完整性验证事件详细信息

  1. 转到“虚拟机实例”页面
  2. 点击实例 ID 以打开虚拟机实例详情页面。
  3. 日志下,点击 Cloud Logging
  4. 找到您要查看的 earlyBootReportEventlateBootReportEvent 日志条目。
  5. 根据需要展开日志条目 > jsonPayload > earlyBootReportEventlateBootReportEvent。在这部分中,policyEvaluationPassed 元素标识启动序列的给定部分是否通过了完整性政策基准的验证。
  6. 展开 actualMeasurements 部分及其中带编号的元素,以查看从最新启动序列保存的平台配置寄存器 (PCR) 值。PCR 值保存在带编号元素中的 value 元素中。PCR 值用于标识最新启动序列使用的启动组件和组件加载顺序,并与完整性政策基准进行比较,以确定虚拟机实例启动序列中是否经过了任何更改。如需详细了解 PCR 值代表的含义,请参阅完整性监控事件
  7. 展开 policyMeasurements 部分以查看为完整性政策基准保存的 PCR 值。

自动响应完整性验证事件

您可以导出 Cloud Logging 日志并在其他服务(如 Cloud Run 函数)中对其进行处理以自动响应启动验证事件。如需了解详情,请参阅路由和存储概览以及自动响应完整性验证失败

确定启动完整性验证失败的原因

  1. 转到“虚拟机实例”页面
  2. 点击实例 ID 以打开虚拟机实例详情页面。
  3. 日志下,点击 Cloud Logging
  4. 找到最新的 earlyBootReportEventlateBootReportEvent 日志条目,并查看哪个条目的 policyEvaluationPassed 值为 false
  5. 根据需要展开日志条目 > jsonPayload > earlyBootReportEventlateBootReportEvent
  6. 展开 actualMeasurementspolicyMeasurements 部分及其中带编号的元素,以分别查看从最新启动序列和完整性政策基准保存的平台配置寄存器 (PCR) 值。PCR 值用于标识最新启动序列和完整性政策基准使用的启动组件和组件加载顺序。
  7. 比较 actualMeasurementspolicyMeasurements 部分中的 PCR 值,以确定最新启动序列和完整性政策基准之间发生更改的位置。会产生不同值的比较就是导致验证失败的原因。请注意,这些部分中的元素编号几乎不与 PCR 编号相对应,而且 actualMeasurementspolicyMeasurements 中类似编号的元素可能代表不同的 PCR。例如,在 Windows 和 Linux 的前期启动序列中,actualMeasurements 中的 3 元素和 policyMeasurements 中的 2 元素均代表 PCR7。

  8. 检查完整性监控事件以确定更改的 PCR 代表什么,并调查其是否为预期的更改。

更新完整性政策基准

初始完整性政策基准来源于创建实例时的隐式可信启动映像。更新基准会使用当前实例配置更新完整性政策基准。更新基准时,虚拟机实例必须正在运行。

您应在实例配置中的任何计划的特定于启动的更改(如内核更新或内核驱动程序安装)完成之后更新基准,因为这些更改会导致完整性验证失败。如果意外出现完整性验证失败,应该调查失败的原因并准备好在必要时停止实例。

您必须具有 setShieldedInstanceIntegrityPolicy 权限才能更新完整性政策基准。

请按以下步骤更新完整性政策基准。

gcloud

使用带有 --shielded-learn-integrity-policy 标志的 compute instances update 命令更新虚拟机实例的完整性政策基准。

以下示例重置 my-instance 虚拟机实例的完整性政策基准:

gcloud compute instances update INSTANCE_NAME \
    --zone=ZONE --shielded-learn-integrity-policy

替换以下内容:

  • INSTANCE_NAME:虚拟机的名称。
  • ZONE:虚拟机所在的可用区。

API

使用含有 setShieldedInstanceIntegrityPolicy 方法的 updateAutoLearnPolicy 请求正文内容更新虚拟机实例的完整性政策基准。

以下示例重置虚拟机实例的完整性政策基准。

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/setShieldedInstanceIntegrityPolicy?key=YOUR_API_KEY
{
  "updateAutoLearnPolicy": true
}

替换以下内容:

  • PROJECT_ID:虚拟机所在的项目的 ID。
  • INSTANCE_NAME:虚拟机的名称。
  • ZONE:虚拟机所在的可用区。
  • YOUR_API_KEY:用于访问该 API 的 API 密钥。

后续步骤