模拟可信平台模块 (vTPM)¶
版本 22.0.0 中添加: (Victoria)
从 22.0.0 (Victoria) 版本开始,Nova 支持为虚拟机添加模拟的虚拟可信平台模块 (vTPM)。
启用 vTPM¶
以下要求适用于希望支持 vTPM 功能的每个计算主机
目前,仅在使用
libvirt.virt_type为kvm或qemu的 libvirt 计算驱动程序时才支持 vTPM。将
libvirt.swtpm_enabled配置选项设置为True。这将启用对 TPM 版本 1.2 和 2.0 的支持。
在满足上述要求后,通过检查计算节点资源提供商上的特性来验证 vTPM 支持
$ COMPUTE_UUID=$(openstack resource provider list --name $HOST -f value -c uuid)
$ openstack resource provider trait list $COMPUTE_UUID | grep SECURITY_TPM
| COMPUTE_SECURITY_TPM_1_2 |
| COMPUTE_SECURITY_TPM_2_0 |
配置 flavor 或镜像¶
可以通过 flavor 附加规格或镜像元数据属性在服务器上请求 vTPM。支持两个版本 - 1.2 和 2.0 - 和两种模型 - TPM 接口规范 (TIS) 和命令响应缓冲区 (CRB)。CRB 模型仅支持版本 2.0。
Flavor extra_specs |
镜像元数据 |
描述 |
|---|---|---|
|
|
指定 TPM 版本, |
|
|
指定 TPM 模型, |
例如,要配置 flavor 使用 TPM 2.0 和 CRB 模型
$ openstack flavor set $FLAVOR \
--property hw:tpm_version=2.0 \
--property hw:tpm_model=tpm-crb
如果 flavor 和镜像提供冲突的值,或者请求版本 1.2 时模型为 tpm-crb,则调度将失败。
成功启动后,服务器应该会看到一个 TPM 设备,例如 /dev/tpm0,可以像使用硬件 TPM 一样使用它。
限制¶
由于需要用户的凭据才能解锁主机上的虚拟设备文件,因此仅支持由服务器所有者执行的服务器操作。因此,管理员可能需要决定是否授予用户额外的策略角色;如果不是,则这些操作实际上被禁用。
目前不支持带有 vTPM 的服务器的实时迁移、撤离、搁置和救援。
安全¶
使用硬件 TPM 时,信任的根源是只有 TPM 用户才知道的密钥。相反,模拟的 TPM 包含磁盘上的一个文件,libvirt 守护程序必须能够将其呈现给虚拟机。静态时,该文件使用存储在密钥管理服务中的密码短语进行加密。密钥管理程序中的密码短语与服务器所有者的凭据(最初创建服务器的用户)相关联。libvirt 检索密码短语并在每次启动服务器时用于解锁模拟的 TPM 数据。
虽然上述机制使用一个 libvirt secret,该 secret 既是 private(无法通过 libvirt API 或 virsh 显示)又是 ephemeral(仅存在于内存中,从不在磁盘上),但理论上,权限足够高的用户可以从内存中检索 secret 和/或 vTPM 数据。
对模拟 TPM 相关的安全问题的全面分析和讨论超出了本文档的范围。