数据加密

实施者可以选择加密租户数据,无论这些数据存储在磁盘上还是通过网络传输,例如下面描述的 OpenStack 卷加密功能。这超越了通常的建议,即用户在将其数据发送给提供商之前对其进行加密。

代表租户加密数据的必要性主要与提供商承担的风险有关,即攻击者可能访问租户数据。在政府层面可能存在相关要求,在私人合同中也可能存在基于策略的要求,甚至在公共云提供商的私人合同相关案例法中也可能存在要求。建议在选择租户加密策略之前进行风险评估并咨询法律顾问。

与按项目、按租户、按主机和按云聚合相比,按实例或按对象加密更为可取,顺序依次递减。此建议与实施的复杂性和难度成反比。目前,在某些项目中,实施加密的粒度即使达到按租户级别也可能很困难或不可能。我们建议实施者尽最大努力加密租户数据。

通常,数据加密与可靠地销毁租户和按实例数据的能力呈正相关,只需丢弃密钥即可。需要注意的是,在这样做时,可靠且安全地销毁这些密钥变得非常重要。

存在为用户加密数据的机会

  • 对象存储对象

  • 网络数据

卷加密

OpenStack 中的卷加密功能支持基于每个租户的隐私。截至 Kilo 版本,支持以下功能

  • 通过仪表板或命令行界面创建和使用加密卷类型

    • 启用加密并选择诸如加密算法和密钥大小等参数

  • 包含在 iSCSI 数据包中的卷数据已加密

  • 如果原始卷已加密,则支持加密备份

  • 仪表板指示卷加密状态。包括指示卷已加密,并包括诸如算法和密钥大小等加密参数

  • 通过安全包装器与密钥管理服务接口

    • 卷加密受后端密钥存储支持,以增强安全性(例如,硬件安全模块 (HSM) 或 KMIP 服务器可以用作 barbican 后端密钥存储)

临时磁盘加密

临时磁盘加密功能解决了数据隐私问题。临时磁盘是虚拟机操作系统使用的临时工作空间。如果没有加密,敏感的用户信息可能会在此磁盘上被访问,并且在磁盘卸载后可能会残留信息。截至 Kilo 版本,支持以下临时磁盘加密功能

  • 创建和使用加密的 LVM 临时磁盘(注意:目前 OpenStack Compute 服务仅支持加密 LVM 格式的临时磁盘)

    • 计算配置 nova.conf 在“[ephemeral_storage_encryption]”部分具有以下默认参数

      • 选项:‘cipher = aes-xts-plain64’

        • 此字段设置用于加密临时存储的密码和模式。AES-XTS 由 NIST 专门推荐用于磁盘存储,该名称是使用 XTS 加密模式的 AES 加密的简写。可用的密码取决于内核支持。在命令行中,键入“cryptsetup benchmark”以确定可用选项(并查看基准测试结果),或转到 /proc/crypto

      • 选项:‘enabled = false’

        • 要使用临时磁盘加密,请设置 选项:‘enabled = true’

      • 选项:‘key_size = 512’

        • 请注意,后端密钥管理器可能存在密钥大小限制,这可能需要使用“key_size = 256”,这将仅提供 128 位的 AES 密钥大小。XTS 除了 AES 所需的加密密钥外,还需要自己的“调整密钥”。这通常表示为单个大密钥。在这种情况下,使用 512 位设置,256 位将由 AES 使用,256 位将由 XTS 使用。(参见 NIST

  • 通过安全包装器与密钥管理服务接口

    • 密钥管理服务将通过为每个租户提供临时磁盘加密密钥来支持数据隔离

    • 临时磁盘加密受后端密钥存储支持,以增强安全性(例如,HSM 或 KMIP 服务器可以用作 barbican 后端密钥存储)

    • 使用密钥管理服务时,当不再需要临时磁盘时,只需删除密钥就可以代替覆盖临时磁盘存储区域

对象存储对象

对象存储 (swift) 支持在存储节点上静态加密对象数据。加密对象数据旨在减轻用户数据被未经授权方物理访问磁盘时被读取的风险。

静态数据加密由可能包含在代理服务器 WSGI 管道中的中间件实现。此功能是 swift 集群内部的,未通过 API 暴露。客户端不知道数据是否通过 swift 服务的内部功能进行了加密;内部加密的数据不应通过 swift API 返回给客户端。

以下数据在 swift 中静态加密

  • 对象内容。例如,对象 PUT 请求体的内容

  • 具有非零内容的对象的实体标签 (ETag)

  • 所有自定义用户对象元数据值。例如,使用 X-Object-Meta- 前缀的 PUT 或 POST 请求发送的元数据

未包含在上述列表中的任何数据或元数据均未加密,包括

  • 帐户、容器和对象名称

  • 帐户和容器自定义用户元数据值

  • 所有自定义用户元数据名称

  • 对象 Content-Type 值

  • 对象大小

  • 系统元数据

有关对象存储加密的部署、操作或实施的更多信息,请参阅 swift 开发人员文档中的 对象加密

块存储性能和后端

在启用操作系统时,OpenStack 卷加密性能可以通过使用 Intel 和 AMD 处理器中当前可用的硬件加速功能来提高。OpenStack 卷加密功能和 OpenStack 临时磁盘加密功能均使用 dm-crypt 来保护卷数据。dm-crypt 是 Linux 内核 2.6 及更高版本中的透明磁盘加密功能。启用卷加密后,加密数据将通过 iSCSI 发送到块存储,从而同时保护传输中的数据和静态数据。使用硬件加速时,两种加密功能的性能影响都将降至最低。

虽然我们建议使用 OpenStack 卷加密功能,但块存储支持各种替代后端来提供可挂载的卷,其中一些后端也可能提供卷加密。由于 后端 众多,并且必须从每个供应商处获取信息,因此本指南的范围不包括指定在任何后端中实施加密的建议。

网络数据

计算的租户数据可以通过 IPsec 或其他隧道进行加密。这并非 OpenStack 中的常见或标准功能,但对于积极且感兴趣的实施者来说是一种选择。

同样,加密的数据在通过网络传输时将保持加密状态。