VolumeEncryption
- Launchpad Entry: Grizzly
- Created: 2012年11月29日
- Updated: 2013年2月5日
- Contributors: Bruce Benjamin, Joel Coffman, Laura Glendenning, Nate Reller
简介
目前OpenStack不提供自动加密块存储的支持。这使得托管虚拟机卷的平台成为高价值目标,因为攻击者可以入侵一个卷托管平台并读取许多不同虚拟机的的数据。另一个问题是物理存储介质可能被盗,重新挂载并从另一台机器访问。该蓝图解决了这两个漏洞。
该蓝图的目标是在数据写入磁盘之前对虚拟机的的数据进行加密。这将允许在存储设备上保持数据的隐私。这个想法类似于自加密驱动器的工作方式。这个新特性向虚拟机呈现一个正常的块存储设备,但在写入磁盘之前会在虚拟化主机上加密字节。请注意,必要的设计更改仅在虚拟化主机和密钥管理实体中进行。块服务器在读取和写入未加密的块时操作方式完全相同。不需要对存储设备进行任何修改。
现有的工具允许用户在虚拟机内部加密数据,但这些解决方案需要手动配置。透明地加密数据消除了依赖于最终用户手动配置加密所带来的潜在风险。Cinder卷目前提供的安全性很低,iSCSI [1] 本身并不提供传输中的数据保护,尽管可以添加外部网络安全。为了解决这些问题,此新功能提供的加密将在调用iSCSI命令之前发生。通过网络发送到远程Cinder服务器的数据是加密的,并且在磁盘上保持加密状态。
系统架构
下图说明了块加密功能的系统架构。设置加密的过程始于用户在仪表板上选择加密卷。过程的下一步是调用Nova的attach_volume命令。Nova会将设备作为虚拟化主机中的块设备映射。这种映射与之前的OpenStack版本相同。
在卷在虚拟化主机中挂载后,Nova将使用我们称之为Volume Encryptor设置加密。Volume Encryptor负责为块设备设置加密。参考实现将是Dm-Crypt Volume Encryptor,但抽象层允许其他选择。
Volume Encryptor将被调用以加密块设备,为此它必须具有加密驱动器的适当密钥。Volume Encryptor通过调用Key Manager获得此密钥,Key Manager负责检索适当的密钥。我们最终的目标是使用实现OASIS Key Management Interoperability Protocol (KMIP) [2] 的密钥管理服务器,该协议定义了行业范围内通用的密钥管理标准。但是,我们最初的参考实现使用Nova数据库来存储密钥。
Key Manager会将密钥返回给Volume Encryptor,然后Volume Encryptor将设置块设备的加密。当使用dm-crypt [3] 作为Volume Encryptor时,这将包括在挂载的卷上设置一个环回设备,并使用环回设备的加密密钥设置dm-crypt。Volume Encryptor然后会将设备名称返回给Nova,Nova将使用该设备映射到虚拟机。最后一步与之前的版本相同。
计划扩展此架构以解决另一个存储目标。它将加密名为“ephemeral storage”(临时存储)的磁盘镜像,其中包含虚拟机的操作系统和其他额外的本地存储。
系统设计
Nova架构只需要进行轻微的修改即可提供对块加密功能的支持。新的主要接口将是VolumeEncryptor,它负责加密块设备。Nova已被修改为直接调用此接口。此功能是Nova中的一个选项,因此如果不需要加密,则Nova将正常运行。UML类图显示了这个新的接口。
VolumeEncryptor与KeyManager交互,KeyManager将密钥返回给VolumeEncryptor。
KeyManager是一个接口,允许使用不同类型的密钥管理器。初始接口仅定义了一种检索密钥的方法(get_key),但未来的修订将包含更多用于创建、更新和删除密钥的方法(通过KMIPKeyManager,或等效方法)。由于当前版本不包含创建密钥的方法,如果KeyManager在调用此方法时没有可用的密钥,则DBKeyManager的当前实现将创建一个随机密钥。此功能是为了方便测试而提供的,可能不会保留在生产实现中。
关于加密设备如何与其他OpenStack功能交互,还有一些未知的因素。例如,需要调查导出/快照卷和实时迁移。
此设计中的配置文件管理器仅作为参考实现包含,仅应用于测试目的。同样,数据库密钥管理器不应在生产环境中使用。计划的未来功能是扩展Horizon上的下拉菜单,以支持可用于卷加密的几种加密模式选择。
时间表
本次首发版,旨在用于Grizzly,本质上是对加密能力的一个概念验证。它具有一个简单的密钥管理能力,旨在测试概念验证的实现。此初始版本将依赖于OpenStack现有的身份验证机制、API调用和数据库访问,这可能会限制安全性。
计划后续版本将基于一些基本的密钥管理能力,这些能力将与密钥管理互操作性协议(KMIP)兼容。该计划是通过使用KMIP服务器来卸载实现密钥管理的复杂性。它将与虚拟化主机通信,以提供安全的链接,在需要时提供适当的密钥。KMIP服务器还需要依赖Keystone来提供授权凭证,以验证正确的用户是否正在访问块存储设备,并验证正在访问的密钥是否正确。当Keystone完全实现PKI时,这将增强此密钥管理能力的安全。
范围
请注意,支持此规范的大多数更改都在Nova的libvirt驱动程序中。如果正在使用不同的虚拟化驱动程序,则此规范中的功能将无法工作。请注意,修改其他驱动程序可能相对容易,以便允许使用此功能。在libvirt驱动程序中,attach语句中的两行额外的代码和detach语句中的一行额外的代码被修改。
参考文献
[1]http://www.ietf.org/rfc/rfc3720.txt (Internet Small Computer Systems Interface - iSCSI)
[2]https://www.oasis-open.org/committees/kmip/ an specifications http://docs.oasis-open.org/kmip/spec/v1.0/cs01/kmip-spec-1.0-cs-01.pdf
[3]http://www.saout.de/misc/dm-crypt/
[4]http://csrc.nist.gov/publications/nistpubs/800-38E/nist-sp-800-38E.pdf (NIST SP800-38E)

