虚拟 TPM 启用¶
越来越多的应用程序和操作系统使用 TPM 设备来存储密钥。为了在虚拟机中运行这些应用程序,需要在虚拟机内部暴露一个虚拟 TPM 设备。
问题描述¶
需要访问 TPM 以进行密钥存储的虚拟机无法在 OpenStack Charms 部署的云中执行此操作。
提议的变更¶
从 Victoria 版本开始,Nova 能够为虚拟机提供虚拟 TPM 设备 [1], [2]。TPM 设备通过 swtpm 库提供给 libvirt/qemu 虚拟机。
nova-compute charm 应该能够安装和配置提供模拟 TPM 设备所需的库。对于新安装以及升级到启用此功能集的 nova-compute charm 版本的安装,它将默认执行此操作。这将导致本地机器上的 nova-compute 服务报告它具有 COMPUTE_SECURITY_TPM_1_2 和 COMPUTE_SECURITY_TPM_2_0 特性。
虽然计算节点将报告它们具有必要特性,但除非 flavor 和/或镜像配置了适当的属性,否则新实例将不会附加 TPM 设备。确定哪些镜像或 flavor 应该启用 TPM 设备被认为是管理决策,并且超出了此实现的范围。
上述内容也使得默认启用对于升级 charm 到具有此功能启用的版本的用户来说通常是安全的。虽然默认启用可能是安全的,但初始版本将默认禁用此功能,以防止在 charm 或 OpenStack 升级时发生软件包安装错误。
Charm 配置选项¶
以下配置选项将在 nova-compute charm 上可用
将引入一个新的配置选项以启用或禁用 vTPM 支持
enable-vtpm: type: boolean default: False description: | Enable emulated Trusted Platform Module support on the hypervisors. A key manager, e.g. Barbican, is a required service for this capability to be enabled.
配置文件¶
Ubuntu 中的 swtpm 包不使用 qemu、nova 等的默认 tss/tss 用户/组。相反,swtpm 包将用户/组配置为 swtpm/swtpm,因为 swtpm 用户不需要现有 tss 用户所具有的相同级别的权限。这需要在配置文件中进行一些额外的更改。
使用 OpenStack charms 启用虚拟 TPM 支持将需要更新以下配置文件
/etc/libvirt/qemu.conf - swtpm_user 和 swtpm_group 值需要设置为 swtpm 软件包期望的相同用户。这将导致 qemu 配置文件如下所示
########################################################################## # [ WARNING ] # Configuration file maintained by Juju. Local changes may be overwritten. ########################################################################## # File installed by Juju nova-compute charm cgroup_device_acl = [ "/dev/null", "/dev/full", "/dev/zero", "/dev/random", "/dev/urandom", "/dev/ptmx", "/dev/kvm", "/dev/kqemu", "/dev/rtc", "/dev/hpet", "/dev/net/tun", "/dev/vfio/vfio", ] swtpm_user = "swtpm" swtpm_group = "swtpm"
/etc/nova/nova-compute.conf - 与 qemu 配置更改类似,nova 服务需要指定应该为 qemu 实例在 libvirt 中配置哪个用户和组。它还将具有启用或禁用的全局标志
########################################################################## # [ WARNING ] # Configuration file maintained by Juju. Local changes may be overwritten. ########################################################################## [DEFAULT] compute_driver=libvirt.LibvirtDriver swtpm_enabled=True swtpm_user=swtpm swtpm_group=swtpm
非 Charm 配置¶
在 nova compute charm 中启用 vTPM 支持将导致 nova hypervisor 将 COMPUTE_SECURITY_TPM_1_2 和 COMPUTE_SECURITY_2_0 特性报告给 placement 服务。云操作员/管理员需要采取其他步骤才能通过在镜像或 flavor 上配置适当的属性来使此功能可用于虚拟机。
Nova 使用在 flavor 上配置的额外规格或在镜像上设置的属性中的信息来确定是否添加 vTPM 设备。因此,hypervisor 可以配置为暴露允许 vTPM 设备的必要特性,但除非操作员适当地配置镜像和/或 flavor,否则不会为虚拟机配置该设备。
请参阅 Nova 文档 [2],了解需要设置的特定额外规格和属性,以向虚拟机提供 vTPM 设备。
Barbican¶
提供模拟 TPM 设备的 swtpm 库在文件系统上的文件中本地加密密钥。Nova 使用 Barbican 密钥管理服务进行密钥存储,该服务已经作为 charmed 应用程序可用。
方便的是,Nova 的默认配置将使用 keystone 目录中的 barbican 服务来存储必要的密钥。这些密钥按项目划分范围,并且与密钥存储的交互将使用用户的适当上下文进行。因此,nova-compute charm 不需要额外的配置来配置 nova compute 服务,因此不需要额外的关系。
OpenStack 版本¶
此功能将为 Wallaby 和更高版本的 OpenStack 版本启用。
操作系统版本¶
此功能将为 Ubuntu 20.04 (focal) 和 Ubuntu 22.04 (jammy) 启用。
Juju 版本依赖项¶
此功能不依赖于 Juju 版本。
备选方案¶
在 charms 中,没有替代 vTPM 支持,它可以与 OpenStack 很好地集成,同时使用 OpenStack charms 进行部署。
实现¶
负责人¶
- 主要负责人
billy-olsen
Gerrit Topic¶
对于与此规范相关的所有补丁,请使用 Gerrit 主题“charm-vtpm”。
git-review -t charm-vtpm
工作项¶
将配置更改添加到 nova-compute charm
将功能测试添加到 zaza-openstack-tests
提供有关启用功能和如何使用的用户文档
仓库¶
这项工作不需要新的存储库。
文档¶
作为这项工作的一部分,需要更新以下文档
Charm 部署指南
Charm Readme
Charm 指南
发行说明
安全性¶
charm 中所需的更改不会引入超出 Nova 规范中概述的模拟 vTPM 设备的任何安全影响 [1]。
测试¶
将为该功能实现单元测试和功能测试。功能测试将验证各种 TPM 设备配置,并验证 TPM 设备是否在虚拟机内部可用。