本文档介绍了如何在 Google Distributed Cloud (GDC) 气隙环境中的虚拟机 (VM) 实例上启用安全启动或虚拟可信平台模块 (vTPM)。
本文档适用于平台管理员或应用操作员组中的开发者,他们负责在 Distributed Cloud 环境中的虚拟机上配置安全启动和 vTPM。如需了解详情,请参阅 GDC 网闸隔离配置文档的受众。
安全启动简介
安全启动是一项功能,它会验证所有启动组件的数字签名,并在验证失败时停止该过程,从而确保系统仅运行正版软件。它使用统一可扩展固件接口 (UEFI) 固件来管理制造商用于为系统固件、启动加载程序和加载的二进制文件签名的证书和密钥。
在每次启动时,UEFI 固件都会针对存储的已批准密钥验证每个组件的数字签名,并阻止任何未签名或签名不正确的组件。
如需在虚拟机实例上启用安全启动,您必须将虚拟机的 bootloader 类型设置为 uefi。
如需查看官方 UEFI 文档,请参阅 https://uefi.org/sites/default/files/resources/UEFI_Secure_Boot_in_Modern_Computer_Security_Solutions_2013.pdf。
虚拟可信平台模块简介
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 的所有命令都使用 gdcloud 或 kubectl CLI,并且需要操作系统 (OS) 环境。
获取 kubeconfig 文件路径
如需针对 Management API 服务器运行命令,请确保您拥有以下资源:
登录并生成 Management API 服务器的 kubeconfig 文件(如果您没有该文件)。
使用 Management API 服务器的 kubeconfig 文件的路径替换这些说明中的
MANAGEMENT_API_SERVER。
请求 IAM 角色
如需在虚拟机上启用安全启动或 vTPM,请与您的项目 IAM 管理员联系,以请求 Virtual Machine Project Admin (project-vm-admin) 角色。
所有虚拟机角色都必须绑定到虚拟机所在项目的命名空间。 请按照以下步骤验证 您的访问权限。
启用安全启动
为虚拟机启用安全启动。请对项目命名空间 (PROJECT_NAMESPACE) 中名为 VM_NAME 的虚拟机使用以下说明。
在应用补丁程序之前,请先停止正在运行的虚拟机。如果您尝试在虚拟机运行时修补
shieldConfig,API 会返回Forbidden错误:Changes to shieldConfig are not allowed while the VM is running。如需查看相关说明,请参阅停止虚拟机。-
kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT_NAMESPACE \ patch virtualmachines.virtualmachine.gdc.goog VM_NAME \ --type merge --patch $' spec: shieldConfig: bootType: uefi enableSecureBoot: true ' 验证您是否已启用安全启动。与虚拟机建立 SSH 连接 然后运行以下命令:
mokutil --sb-state如果您已成功启用安全启动,该命令会返回
SecureBoot enabled。如果
mokutil工具报告您尚未启用安全启动,请按照 问题排查安全启动配置部分中的步骤操作。
问题排查安全启动配置
在编辑器中打开虚拟机自定义资源:
kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT_NAMESPACE \ edit virtualmachines.virtualmachine.gdc.goog VM_NAME查找 “运行以下命令”的
spec字段中显示的缺失字段或值。这些字段或值是必需的。如果有任何字段或值缺失或不正确,请修改
spec以添加缺失的 字段并更正错误的值。保存文件。
按照重新启动虚拟机中的步骤操作。
如果上述步骤未能解决您的问题,请查看与虚拟机的操作系统 (OS) 对应的文档,以验证该操作系统版本是否支持安全启动。
启用 vTPM
为虚拟机启用 vTPM。请对项目命名空间 (PROJECT_NAMESPACE) 中名为 VM_NAME 的虚拟机使用以下说明。
在应用补丁程序之前,请先停止正在运行的虚拟机。如果您尝试在虚拟机运行时修补
shieldConfig,API 会返回Forbidden错误:Changes to shieldConfig are not allowed while the VM is running。如需查看相关说明,请参阅停止虚拟机。-
kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT_NAMESPACE \ patch virtualmachines.virtualmachine.gdc.goog VM_NAME \ --type merge --patch $' spec: shieldConfig: enableVtpm: true ' 验证您是否已启用 vTPM。与虚拟机建立 SSH 连接 ,然后运行以下命令:
dmesg | grep -i tpm如果您已成功启用 vTPM,该命令会将 TPM 模块作为 ACPI 表的一部分返回。输出类似于以下内容:
[ 7.620985] tpm_tis MSFT0101:00: 2.0 TPM (device-id 0x1, rev-id 1)如果
ACPI tables未显示 TPM 模块,请按照部分 问题排查 vTPM 配置中的步骤操作。
问题排查 vTPM 配置
在编辑器中打开虚拟机自定义资源:
kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT_NAMESPACE \ edit virtualmachines.virtualmachine.gdc.goog VM_NAME查找 运行以下命令的
spec字段中显示的缺失字段或值。这些字段或值是必需的。如果有任何字段或值缺失或不正确,请修改
spec以添加缺失的 字段并更正错误的值。保存文件。
按照重新启动虚拟机中的步骤操作。
如果上述步骤未能解决您的问题,请查看与虚拟机的操作系统 (OS) 对应的文档,以验证该操作系统版本是否支持 vTPM。