安全地启动虚拟机

安全启动会验证所有启动组件的数字签名,并在签名验证失败时停止启动过程,从而有助于确保系统仅运行正版软件。

Google Distributed Cloud (GDC) 网闸隔离配置使用统一的可扩展固件接口 (UEFI) 固件来管理用于为软件签名的证书和密钥。

UEFI 固件可安全地管理包含软件制造商用于为系统固件、系统引导加载程序及其加载的任何二进制文件签名的密钥的证书。如需查看 UEFI 文档,请访问 https://uefi.org/sites/default/files/resources/UEFI_Secure_Boot_in_Modern_Computer_Security_Solutions_2013.pdf

在每次启动时,UEFI 固件会针对已批准密钥的安全存储验证每个启动组件的数字签名。所有未正确签名或根本未签名的启动组件都不允许运行。如需启用安全启动,您必须将虚拟机的 bootloader 类型设置为 uefi

vTPM 是一种虚拟化的可信平台模块。如需详细了解 vTPM,请访问 https://trustedcomputinggroup.org/trusted-platform-module-tpm-summary/。 它是一种专用计算机芯片,可以保护用于对系统的访问进行身份验证的对象(如密钥和证书)。您还可以使用 vTPM 通过安全强化或密封功能来保护密钥。如需详细了解密封存储,请参阅 https://en.wikipedia.org/wiki/Trusted_Computing#SEALED-STORAGE。 如需查看如何使用 vTPM 实现此目的的 Go 语言示例,请参阅 GitHub 上的 Go-TPM 项目 - https://github.com/google/go-tpm

准备工作

如需使用 gdcloud 命令行界面 (CLI) 命令,请确保您已下载、安装并配置 gdcloud CLI。Distributed Cloud 的所有命令都使用 gdcloudkubectl CLI,并且需要操作系统 (OS) 环境。

获取 kubeconfig 文件路径

如需针对管理 API 服务器运行命令,请确保您拥有以下资源:

  1. 登录并生成管理 API 服务器的 kubeconfig 文件(如果您还没有)。

  2. 使用管理 API 服务器的 kubeconfig 文件路径替换这些说明中的 MANAGEMENT_API_SERVER

请求权限和访问权限

如需执行本页面中列出的任务,您必须具有 Project VirtualMachine Admin 角色。按照相关步骤验证您是否在虚拟机所在项目的命名空间中拥有 Project VirtualMachine Admin (project-vm-admin) 角色。

启用安全启动

为虚拟机启用安全启动。请按照以下说明操作,以在项目的命名空间 (PROJECT_NAMESPACE) 中为名为 VM_NAME 的虚拟机执行操作。

  1. 更新虚拟机自定义资源以启用安全启动

    kubectl --kubeconfig MANAGEMENT_API_SERVER patch virtualmachines.virtualmachine.gdc.goog VM_NAME -n PROJECT_NAMESPACE --type merge --patch $'
    spec:
     shieldConfig:
       bootType: uefi
       enableSecureBoot: true
    '
    
  2. 如果虚拟机正在运行,请按照重启虚拟机的说明重启它。

  3. 验证您是否已启用安全启动。与虚拟机建立 SSH 连接,然后运行以下命令:

    mokutil --sb-state
    

    如果您已成功启用安全启动,该命令会返回 SecureBoot enabled

    如果 mokutil 工具报告您尚未启用安全启动,请按照安全启动配置问题排查部分中的步骤操作。

排查安全启动配置问题

  1. 在编辑器中打开虚拟机自定义资源:

    kubectl --kubeconfig MANAGEMENT_API_SERVER edit virtualmachines.virtualmachine.gdc.goog VM_NAME -n PROJECT_NAMESPACE
    
  2. 查找缺失的字段或值,如“运行以下命令”中的 spec 字段所示。这些是必需的。

  3. 如果缺少任何字段或字段有误,请修改 spec 以添加缺少的字段并更正错误的值。

  4. 保存文件。

  5. 按照重启虚拟机中的步骤操作。

如果上述步骤无法解决您的问题,请查看与虚拟机的操作系统 (OS) 对应的文档,以验证该操作系统版本是否支持安全启动。

启用虚拟可信平台模块 (vTPM)

为虚拟机启用 vTPM。针对项目命名空间 (PROJECT_NAMESPACE) 中名为 VM_NAME 的虚拟机,请按照以下说明操作。

  1. 更新虚拟机自定义资源以启用 vTPM

    kubectl --kubeconfig MANAGEMENT_API_SERVER patch virtualmachines.virtualmachine.gdc.goog VM_NAME -n PROJECT_NAMESPACE --type merge --patch $'
    spec:
       shieldConfig:
          enableVtpm: true
    '
    
  2. 如果虚拟机正在运行,请按照重启虚拟机的说明重启该虚拟机。

  3. 验证您是否已启用 vTPM。与虚拟机建立 SSH 连接,然后运行以下命令:

    dmesg | grep -i tpm
    

    如果您已成功启用 vTPM,该命令会返回作为 ACPI 表一部分的 TPM 模块。输出类似于以下内容:

    [    7.620985] tpm_tis MSFT0101:00: 2.0 TPM (device-id 0x1, rev-id 1)
    

    如果 ACPI tables 未显示 TPM 模块,请按照排查 vTPM 配置问题部分中的步骤操作。

排查 vTPM 配置问题

  1. 在编辑器中打开虚拟机自定义资源:

    kubectl --kubeconfig MANAGEMENT_API_SERVER edit virtualmachines.virtualmachine.gdc.goog VM_NAME -n PROJECT_NAMESPACE
    
  2. 查找缺失的字段或值,如运行以下命令中的 spec 字段所示。这些是必需的。

  3. 如果缺少任何字段或字段有误,请修改 spec 以添加缺少的字段并更正错误的值。

  4. 保存文件。

  5. 按照重启虚拟机中的步骤操作。

如果上述步骤无法解决您的问题,请查看与虚拟机的操作系统 (OS) 对应的文档,验证该操作系统版本是否支持 vTPM。