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

在本主题中,您将了解如何使用 Stackdriver 监控受防护的虚拟机实例的启动完整性、确定完整性验证失败的原因,以及更新完整性政策基准。

准备工作

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

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

查看完整性验证事件

  1. 转到 Stackdriver Monitoring
  2. 使用 Stackdriver Monitoring 控制台右上角的下拉菜单,选择包含虚拟机实例所在的 GCP 项目的 Stackdriver 帐号。
  3. 在左侧导航栏中,选择 Resources,然后选择 Metrics Explorer
  4. Find resource type and metric 字段中,输入 instance 并选择 GCE VM Instance 资源类型。
  5. 选择以下指标之一:

    • Early Boot Validation(前期启动验证)显示上次启动序列的前期启动部分的通过/失败状态。前期启动是从 UEFI 固件启动到它将控制传递给启动加载程序的启动序列。
    • Late Boot Validation(后期启动验证)显示上次启动序列的后期启动部分的通过/失败状态。后期启动是从启动加载程序到完成的启动序列,包括加载操作系统内核。
  6. (可选)应用过滤条件以限制显示的指标信息、对显示的指标信息进行分组,或汇总指标数据。如需了解详情,请参阅其他配置

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

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

  1. 转到 Stackdriver Monitoring
  2. 使用 Stackdriver Monitoring 控制台右上角的下拉菜单,选择包含虚拟机实例所在的 GCP 项目的 Stackdriver 帐号。
  3. 在左侧导航栏中,选择 Alerting,然后选择 Create a Policy
  4. 点击 Add Condition
  5. Try our new UI for creating alerting conditions 提示上,选择 Opt in 以使用新的提醒条件界面(必需)。
  6. 点击 Select 以选择 Metric Threshold/Rate Change/Absence
  7. Find resource type and metric 字段中,输入 instance 并选择 GCE VM Instance资源类型。
  8. 选择以下指标之一:

    • Early Boot Validation(前期启动验证)显示上次启动序列的前期启动部分的通过/失败状态。前期启动是从 UEFI 固件启动到它将控制传递给启动加载程序的启动序列。
    • Late Boot Validation(后期启动验证)显示上次启动序列的后期启动部分的通过/失败状态。后期启动是从启动加载程序到完成的启动序列,包括加载操作系统内核。
  9. Filter 设置为按 status=failed 过滤。

  10. 分组依据设置为按状态分组。

  11. 发生以下情况时触发条件设置为任何违反时间序列的情况

  12. 条件指定为超过 0 达 1 分钟

  13. 点击保存条件

  14. 添加一个或多个通知

  15. (可选)添加文档以帮助通知收件人了解如何处理提醒。

  16. 为政策命名

  17. 选择保存政策

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

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

自动响应完整性验证事件

您可以通过导出 Stackdriver 日志并在其他服务(如 Cloud Functions)中对其进行处理来自动响应启动验证事件。如需了解详情,请参阅日志导出概览

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

  1. 转到“虚拟机实例”页面
  2. 点击实例 ID 以打开虚拟机实例详细信息页面。
  3. 日志下,点击 Stackdriver 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 代表什么,并调查其是否为预期的更改。

更新完整性政策基准

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

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

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

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

gcloud

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

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

gcloud beta compute instances update my-instance \
    --shielded-vm-learn-integrity-policy

API

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

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

PATCH https://www.googleapis.com/compute/alpha/projects/my-project/zones/us-central1-b/instances/my-instance/setShieldedVmIntegrityPolicy?key={YOUR_API_KEY}
{
  "updateAutoLearnPolicy": true
}

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Compute Engine 文档