libvit 驱动程序启动使用无状态固件的实例¶
https://blueprints.launchpad.net/nova/+spec/libvirt-stateless-firmware
自 v8.6.0 版本起,libvirt 允许启动使用无状态固件的实例,这可以禁用超visor的潜在攻击面。这项工作旨在引入所需的功能,以便用户可以使用此功能。
问题描述¶
Libvirt v8.6.0 引入了启动使用无状态固件实例的新功能。当实例使用此功能启用以及 UEFI 启动时,实例使用只读固件镜像,不包含 NVRAM 文件。此功能对于机密计算用例很有用,因为它可防止从超visor向固件变量注入恶意代码。它还允许对实例启动链中涉及的元素的更完整测量,这是远程证明的关键要求。这在 libvirt 指南 中有描述。
然而,此 libvirt 功能无法在当前 nova 启动的实例中启用,因为 nova 没有设置无状态选项。此外,nova 始终将 nvram 文件注入到 libvirt 域 XML 中。
用例¶
作为云管理员,为了让我的用户对正在运行的实例的安全性更有信心,我希望允许我的用户为他们的实例强制使用无状态固件。
作为用户,我希望防止恶意软件通过超visor注入的固件变量造成的风险,特别是对于加载非常机密数据的实例。
提议的变更¶
我们建议添加一个新的镜像属性来请求无状态固件,以便用户可以使用无状态固件创建他们的实例。
在 os-traits 中添加新的
COMPUTE_SECURITY_STATELESS_FIRMWARE特性。使 libvirt 驱动程序检查 libvirt 的当前版本,并在版本等于或更新于 v8.6.0 时报告
supports_stateless_firmware功能。此功能应映射到COMPUTE_SECURITY_STATELESS_FIRMWARE特性。添加新的
hw_firmware_stateless镜像属性,该属性接受布尔值,默认值为false。如果将该属性设置为true,则 nova 将其转换为需要COMPUTE_SECURITY_STATELESS_FIRMWARE特性。更改 libvirt 驱动程序,以便在实例的实例元数据包含将
hw_firmware_stateless属性设置为true时,将stateless选项添加到 libvirt 域 XML 的loader元素中,并跳过注入 nvram 文件。
备选方案¶
无
数据模型影响¶
将使用一个新的特性和新的镜像属性来表示 libvirt 中无状态固件功能的可用性和请求。
REST API 影响¶
无
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
最终用户将能够通过现有的镜像属性机制为他们的实例使用无状态固件。
性能影响¶
无
其他部署者影响¶
为了让用户能够使用此功能,操作员需要在部署中部署 libvirt v8.6.0 或更高版本。
开发人员影响¶
无
升级影响¶
无
实现¶
负责人¶
- 主要负责人
kajinamit (irc: tkajinam)
- 其他贡献者
无
工作项¶
在 os-traits 中添加新的
COMPUTE_SECURITY_STATELESS_FIRMWARE特性。使 libvirt 驱动程序检查 libvirt 版本,并根据检测到的版本,将无状态固件的可用性作为
COMPUTE_SECURITY_STATELESS_FIRMWARE特性,在计算节点功能中呈现。将新的
hw_firmware_stateless镜像属性添加到 ImageMeta 对象更新调度器实用程序,以便在实例镜像属性中的
hw_firmware_stateless属性设置为true时,需要COMPUTE_SECURITY_STATELESS_FIRMWARE特性当实例镜像属性包含将
hw_firmware_stateless属性设置为true时,使 libvirt 驱动程序在 loder 元素中设置stateless="yes"。更新文档
更新 glance 中的镜像属性模式,以验证新的
hw_firmware_stateless属性。
应根据新的逻辑添加单元测试和功能测试。
未来工作¶
无
依赖项¶
Libvirt v8.6.0 或更高版本。
测试¶
fakelibvirt 测试驱动程序需要进行调整,以模拟低于 v8.6.0 版本的 libvirt 和 v8.6.0 或更高版本的 libvirt。
需要扩展或添加相应的单元/功能测试,以涵盖
libvirt 检测无状态固件支持
使用特性在域 XML 配置中包含额外的无状态加载器选项。
文档影响¶
参考资料¶
历史¶
发布名称 |
描述 |
|---|---|
2024.2 达尔马提安 |
引入 |