虚拟 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_2COMPUTE_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_userswtpm_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_2COMPUTE_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 设备是否在虚拟机内部可用。

依赖项

  • Nova Wallaby 版本或更高版本。

  • swtpm TPM 模拟器 [3] [4]

  • Focal-Wallaby 支持取决于 swtpm 包被回移植到 Wallaby Ubuntu Cloud Archive 或 Focal。Ubuntu 开发人员表示愿意将 swtpm 回移植到 Focal。