模拟可信平台模块 (vTPM)

版本 22.0.0 中添加: (Victoria)

从 22.0.0 (Victoria) 版本开始,Nova 支持为虚拟机添加模拟的虚拟可信平台模块 (vTPM)。

启用 vTPM

以下要求适用于希望支持 vTPM 功能的每个计算主机

  • 目前,仅在使用 libvirt.virt_typekvmqemu 的 libvirt 计算驱动程序时才支持 vTPM。

  • 必须配置一个 密钥管理服务,例如 barbican,以存储用于加密静态虚拟设备文件的密钥。

  • swtpm 二进制文件和相关的

  • 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

镜像元数据

描述

hw:tpm_version

hw_tpm_version

指定 TPM 版本,1.22.0。如果请求 vTPM,则需要此项。

hw:tpm_model

hw_tpm_model

指定 TPM 模型,tpm-tis (默认) 或 tpm-crb (仅在版本 2.0 时有效)。

例如,要配置 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 相关的安全问题的全面分析和讨论超出了本文档的范围。

参考