Libvirt:QEMU 通过原生 LUKS 文件和主机设备解密¶
https://blueprints.launchpad.net/nova/+spec/libvirt-qemu-native-luks
QEMU 2.6 [1] 和 Libvirt 2.2.0 [2] 允许 QEMU 原生解密 LUKS 文件和块设备。本文档概述了在 Libvirt Nova virt 驱动程序中使用此新功能所需的更改以及这样做可能带来的好处。
问题描述¶
Nova 当前支持使用 os-brick 提供的加密器类来使用 LUKS 和 纯文本 dm-crypt 加密卷。这些前端加密器类使用 cryptsetup 在计算主机上解密加密卷。这会在主机上创建一个解密的块设备,然后将其符号链接到原始卷路径并附加到实例。
使用 cryptsetup 和其他外部工具一直是 Nova 和 os-brick 中许多错误的根源,并且是持续的维护开销。
用例¶
用户应该能够从或附加任何文件或主机块设备卷类型的加密 LUKS 卷到实例,而无需使用主机命令行实用程序,例如 cryptsetup,从而避免在主机上留下未加密的块设备。
提议的变更¶
当给定的 Libvirt 计算主机尝试附加具有 luks 加密提供程序的加密卷并且主机上存在所需的 QEMU 和 Libvirt 版本时,将使用 QEMU 2.6 提供的原生 LUKS 支持。然后将创建所需的 Libvirt 磁盘加密 XML 和密码 secret,从而允许 QEMU 解密并将卷附加到域。
如果不存在所需的 QEMU 和 LIbvirt 版本,Nova 将回退到当前使用 cryptsetup 解密卷的 LuksEncryptor 加密器。
在分离时,将检查与卷关联的 LibvirtConfigGuestDisk 对象,使用加密属性的存在来确认使用上述哪种方法解密了卷。
如果此属性为 None,将使用原始的 cryptsetup 方法分离卷,从而允许在 Nova、QEMU 或 Libvirt 升级期间分离加密卷。
备选方案¶
继续使用当前的 cryptsetup 前端加密器。
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
与使用 cryptsetup 的情况一样,将不再在主机上留下解密的块设备,如果主机受到损害,这可能导致据称加密的租户数据暴露。
通知影响¶
无
其他最终用户影响¶
此更改对于现有的 LuksEncryptor 用户应该是透明的。用户应该继续像以前一样使用此加密提供程序,允许 Nova 决定何时使用 QEMU 2.6 提供的原生 LUKS 支持或原始的 cryptsetup 加密器。
性能影响¶
无
其他部署者影响¶
应告知部署者,鉴于所需的 QEMU 和 Libvirt 版本,nova 现在将使用不同的方法来解密加密卷。突出显示此更改的简单发布说明就足够了。
开发人员影响¶
Libvirt virt 驱动程序将具有 os-brick 当前提供的加密器之外的唯一加密器实现。
虽然这意味着此实现不可用于其他 virt 驱动程序或 OpenStack 项目,但很难看出它如何在 Libvirt virt 驱动程序之外提供任何好处。
实现¶
负责人¶
- 主要负责人
lyarwood
工作项¶
扩展 nova/virt/libvirt/volumes/ 卷驱动程序,以将卷的加密属性传递给 LibvirtConfigGuestDisk。
扩展 LibvirtConfigGuestDisk 类以配置磁盘设备的加密元素 [3] 并创建密码所需的 Libvirt secret。
仅当计算主机上附加卷时存在所需的 QEMU 和 Libvirt 版本时,才尝试使用 QEMU 原生解密给定的 LUKS 卷。
否则回退到 cryptsetup 加密器解密卷的方法。
仅当与卷关联的 LibvirtConfigGuestDisk 对象缺少加密属性时,才使用 cryptsetup 分离 LUKS 卷。
依赖项¶
两者已作为 Ubuntu 17.04 [4] [5] [6] 和 Fedora 25 发布的一部分 [7] [8] 。
以下 devstack 更改现在通过 Ubuntu Cloud Archive 为基于 Xenial 的 OpenStack CI 作业提供 QEMU 2.8 和 Libvirt 2.5.0,从而可以在 gate 中测试此功能
使用 UCA 进行 libvirt 2.5.0 测试 https://review.openstack.org/#/c/451492/
测试¶
单元测试。
如果存在所需的 Libvirt 和 QEMU 版本,现有的 tempest 测试将触发此新功能的使用。
文档影响¶
对 Cinder 卷加密文档的更改有限 [9],因为不再需要在计算主机上使用 cryptsetup。
参考资料¶
历史¶
发布名称 |
描述 |
|---|---|
Pike |
引入 |
Queens |
重新提出 |