LVM 后端临时存储加密

https://blueprints.launchpad.net/nova/+spec/lvm-ephemeral-storage-encryption

拟议功能将为附加到 VM 实例的 LVM 后端、libvirt 管理的临时存储设备提供静态数据安全。

问题描述

当前 LVM 临时存储的实现使得用户数据在实例关闭后易受攻击,原因包括磁盘块重用(如果数据未被安全擦除)、不当的存储介质处置以及物理设施泄露。

例如,如果计算节点在未正确处置活动实例的情况下宕机,当它重新启动时,保存了重启前实例数据的磁盘块将被重新分配给新实例。由于 LVM 存储在分配前未进行清理,这原则上允许恢复其他用户的数据。

提议的变更

用户数据可以通过使用唯一密钥加密临时存储磁盘来防止意外泄露,该密钥只能通过具有适当凭据的安全密钥管理器(目前很可能是正在孵化中的 Barbican)访问。在 Barbican 密钥管理器的状态最终确定之前,该功能将被标记为可选。

此功能是 OpenStack 中添加临时存储加密这一更大工作的一部分。

备选方案

不太可能存在另一个解决方案能够涵盖临时存储加密所涵盖的所有情况,例如意外的计算节点事件、阻止正确的实例关闭、不当的存储介质处置等。

例如,可以在将临时磁盘附加到实例之前对其进行清理,以防止因块存储重用而导致的数据泄露。但是,这无法保护用户数据免受不当存储介质处置的影响。此外,数据清理成本高昂,因为必须擦除整个临时磁盘,而临时磁盘可能很大。

数据模型影响

所有必要的数据对象和数据库更改均已完成。请参阅

REST API 影响

安全影响

此功能将通过为用户数据提供静态数据安全来提高 LVM 临时存储的安全性。

  • 在 compute.API._populate_instance_for_create() 中为每个实例(或批量启动情况下的批次实例)创建一个唯一的加密密钥,并使用密钥管理器(例如 Barbican)安全存储。

  • 在临时磁盘创建之前,立即使用其 UUID 和用户上下文检索密钥,以最大程度地减少暴露。

潜在的安全问题

  • 命令 cryptsetup 将添加到 rootwrap 过滤器中。

  • 用户上下文将从 LibvirtDriver._create_image() 传递给 imagebackend.Lvm.create_image()、LibvirtDriver.create_swap() 和 LibvirtDriver.create_ephemeral()。

通知影响

其他最终用户影响

某些实例操作

  • 实例救援

可能无法立即支持。

性能影响

根据在单节点 DevStack 云上使用 Phoronix 测试套件进行的测量,可选的加密层会使临时存储 I/O 性能降低约 10%。

其他部署者影响

  • LVM 临时存储加密由 ephemeral_storage_encryption 选项组中的 3 个选项控制。名称特意通用,因为相同的选项可以用于控制其他后端的加密。

    ephemeral_storage_encryption 选项组

    • enabled:Boolean – 启用/禁用 LVM 临时存储加密;

      默认值为 False

    • cipher:String – 要传递给 cryptsetup 的 cipher-mode 字符串;

      可用的 cipher-mode 组合集取决于内核支持;默认值为 aes-xts-plain64

    • key_size:Integer – 加密密钥长度(比特);默认值为 512

    已选择默认值以提供高水平的机密性。(请注意,在 XTS 模式下,只有一半的密钥位用于加密密钥。)

  • 加密使用 cryptsetup 实用程序实现,该实用程序在大多数 Linux 发行版中都作为一个软件包提供。

开发人员影响

实现

负责人

主要负责人

Dan Genin <daniel.genin@jhuapl.edu>

其他贡献者

工作项

构成该功能的三个组件中的两个

已合并到 Icehouse 中。

剩下的最后一项是实际将加密添加到 imagebackend.Lvm 中。

依赖项

依赖于 Barbican (https://review.openstack.org/#/c/94918/) 进行密钥管理。

依赖于 cryptsetup 的安装。

测试

我们将致力于为该功能实现 Tempest 测试。然而,Tempest 测试将需要 Tempest 对 LVM 后端临时存储以及 Barbican 进行密钥管理的支持。这些更改可能需要一些时间才能实现。

文档影响

必须记录临时存储加密配置选项及其依赖项,即 dmcrypt/cryptsetup 和 Barbican。

参考资料