Hyper-V vTPM 设备

https://blueprints.launchpad.net/nova/+spec/hyper-v-vtpm-devices

Windows / Hyper-V Server 技术预览版引入了将 vTPM 设备附加到 Hyper-V 虚拟机的功能,为用户提供了增强其安全性和系统完整性的可能性。

问题描述

目前,Hyper-V 驱动程序不支持将 vTPM 设备添加到实例。此蓝图旨在解决此问题。

用例

可信平台模块 (TPM) 技术旨在提供基于硬件的安全相关功能,并包含多种安全机制以使其防篡改。使用 TPM 技术的关键优势包括

  • 生成、存储和限制加密密钥的使用。

  • 使用 TPM 的唯一 RSA 密钥进行平台设备身份验证,该密钥已刻录到 TPM 中。

  • 通过获取和存储安全测量值来帮助确保平台完整性。

  • 基于 TPM 的虚拟智能卡。

受保护的虚拟机使用 vTPM 设备。在实例的安全性至关重要的情况下,应使用受保护的虚拟机。它们已加密(BitLocker 或其他方式),确保只有指定的所有者才能访问虚拟机。[2]

受保护的虚拟机的一些特性是

  • 无法检查磁盘。

  • 无法检查内存。

  • 无法检查进程。

  • 无法将调试器附加到系统。

  • 无法更改配置。

简而言之,即使超visor 主机的管理员受到损害,所有现有的虚拟机数据也是安全的。

有关 vTPM 的更多信息和用例,请参阅参考部分 [1]。

项目优先级

提议的变更

此功能在早于 Windows / Hyper-V Server 技术预览版中不可用。无法在早期版本上创建 vTPM 设备。

如果给定的实例需要 vTPM 设备,但它不包含 hw_machine_type=hyperv-gen2 镜像属性,则实例创建将失败,因为 vTPM 只能添加到第二代虚拟机。第二代虚拟机是在 Windows / Hyper-V Server 2012 R2 中引入的,并在 Kilo 版本中引入了对其的支持(请参阅依赖关系部分)。

由于并非所有客户都支持 vTPM,因此为不支持它的实例启用它是没有意义的。因此,通过将 os_vtpm 镜像属性或 os:vtpm flavor extra spec 设置为 required 来创建具有 vTPM 设备的实例。其他可能的值是:disabledoptional。flavor extra spec 值会覆盖镜像属性值。

镜像属性 os_vtpm_keys 包含一个逗号分隔的 UUID 列表,这些 UUID 是对 Barbican 存储的密钥的引用。由于 nova InstanceSystemMetadata 模型限制为 255 个字节,因此最多可以添加 6 个引用。这些密钥包含必须设置到 vTPM 的数据。对于受保护的虚拟机,这是强制性的。提供此镜像属性而不请求 vTPM 设备将导致异常。如果无法获取 Barbican 密钥之一,将引发异常。

调度由 ImagePropertiesFilter [5] 保证,它检查镜像属性 hypervisor_version_requires 是否满足给定主机。这是解决调度问题的初始方法。理想情况下,此问题将通过将此功能作为主机功能公开,并使 os_vtpm_device 镜像属性或 os:vtpm_device flavor extra spec 与主机功能匹配来解决。

要实现以下操作

  • 添加 Barbican 身份验证配置选项。

  • 使用 python-barbicanclient 和镜像属性 os_vtpm_keys(这是一个逗号分隔的 UUID 列表,是对 Barbican 密钥的引用)从 Barbican 中获取 vTPM 密钥。

  • 使用先前获取的加密密钥创建 Host Guardian Service KeyProtector,并在 Host Guardian 中注册它(如果提供了镜像属性 os_vtpm_keys)。

  • 将 vTMP 设备添加到第二代虚拟机,启用它并将先前创建的 KeyProtector 添加到它。

备选方案

数据模型影响

REST API 影响

安全影响

用户将能够使用 vTPM,这对于控制访问控制和身份验证非常有用。这可以提高 VM 的安全性。

VM 加密密钥必须受到保护。它们必须作为密钥存储在 Barbican 中,并确保服务已正确设置。有关更多信息,请参阅参考部分 [4]。

通知影响

其他最终用户影响

性能影响

其他部署者影响

为了使此功能可用,必须启用 Host Guardian Service,并且主机必须受到保护(Guardian Service 密钥必须导入到本地主机)。[2]

需要 Barbican 才能正确使用此功能 [4]。它将用于将 VM 加密密钥作为密钥存储。为了能够使用它,必须在 compute 节点的 nova.conf 文件中的 [barbican] 部分设置有关 Barbican 身份验证的配置选项。将提供一个示例。(进行中)

具有 vTPM 的 VM 无法从一个 Active Directory 迁移到另一个或迁移到 Unguarded Host。为了确保调度程序不会选择当前 Active Directory 之外的主机,应将 Active Directory 中的所有 Guarded Host 添加到同一个聚合中。

此功能仅在 Windows / Hyper-V Server 技术预览版中可用,并且为了确保正确的调度,应将 hypervisor_version_requires 镜像属性设置为 >=10.0

必须准备好镜像以用于受保护的虚拟机。例如,准备镜像的 VM 必须是第二代 VM,具有带有 Host Guardian Service KeyProtector 设置的 vTPM 设备。附加的驱动器必须使用 BitLocker 或任何加密程序进行加密 [2]。然后,密钥数据必须存储到 Barbican 作为密钥。[4]

为了创建附加了 vTPM 设备的实例,用户必须以以下方式请求它

  • 镜像属性 os_vtpm 设置为 required

  • 镜像属性 os_vtpm 设置为 optional 并且 flavor extra spec os:vtpm 设置为 required

矛盾的镜像属性和 flavor extra spec 将导致实例创建失败。

任何密钥数据都应存储到 Barbican 作为密钥,并创建镜像属性 os_vtpm_keys,其中包含对密钥的逗号分隔引用(由于长度限制 - 最大 255 个字符,最多 6 个引用),否则实例将在 vTPM 中生成而没有存储任何数据。示例值:UUID1,UUID2,UUID3

如果设置了 os_vtpm_keys 镜像属性,则镜像属性 os_vtpm 或 flavor extra spec os:vtpm 必须设置为 required,否则实例将不会生成。

镜像创建示例

glance image-create –property hypervisor_type=hyperv

–property hw_machine_type=hyperv-gen2 –property hypervisor_version_requires=’>=10.0’ –property os_vtpm=required –property os_vtpm_keys=$key_refs –name im-secure –disk-format vhd –container-format bare –file path/to/image.vhdx

或者

glance image-update –property hw_machine_type=hyperv-gen2 win-secure

glance image-update –property hypervisor_version_requires=’>=10.0’ im-secure

glance image-update –property os_vtpm=required im-secure

glance image-update –property os_vtpm_keys=$key_refs im-secure

镜像属性 os_vtpm 的可接受值是:disabled, optional, required。如果未定义该属性,则将使用 disabled 作为默认值。optional 值表示图像客户操作系统可以使用 vTPM,但需要 flavor extra spec 才能创建具有 vTPM 设备的实例。

Flavor extra spec 示例

nova flavor-key m1.your.flavor set “os:vtpm=required”

开发人员影响

实现

负责人

主要负责人

Claudiu Belu <cbelu@cloudbasesolutions.com>

工作项

如“拟议的变更”部分所述。

依赖项

Hyper-V VM 第 2 代 nova 规范。功能合并在 Kilo 中。

https://review.openstack.org/#/c/103945/5

测试

  • 单元测试。

  • 该功能将由 Hyper-V CI 进行测试。

文档影响

必须记录新的镜像属性和 flavor extra spec。必须记录新的 Barbican 凭据配置选项。

参考资料

[1] 可信平台模块技术概述

https://technet.microsoft.com/en-us/library/jj131725.aspx

[2] 受保护的虚拟机和 Guarded Fabric 验证指南

https://gallery.technet.microsoft.com/Shielded-VMs-and-Guarded-44176db3

[3] 加强 Fabric:保护 Hyper-V 中的租户密钥

https://channel9.msdn.com/Events/Ignite/2015/BRK3457

[4] Barbican 存储密钥

https://github.com/cloudkeep/barbican/wiki/Barbican-Quick-Start-Guide

历史