集成 Castellan 用于密钥管理¶
https://blueprints.launchpad.net/nova/+spec/use-castellan-key-manager
Castellan 是一个密钥管理接口库,旨在与多个后端一起使用,包括 Barbican。Castellan 代码基于 Nova 和 Cinder 中现有的基本密钥管理接口。现在密钥管理接口位于一个单独的库中,密钥管理代码可以从 Nova 和 Cinder 中删除,并使用 Castellan 作为密钥管理接口。
问题描述¶
随着 OpenStack 项目中加密功能的日益普及,这些项目通常需要一种与密钥管理器交互的方式。不同的部署者可能对密钥管理器有不同的要求,因此密钥管理接口也必须可配置,以支持不同的后端。Castellan 密钥管理接口基于 Cinder 和 Nova 中发现的密钥管理接口。现在共享密钥管理接口位于一个单独的库中,嵌入在 Nova 中的原始密钥管理接口可以删除,并使用 Castellan 代替。
用例¶
Castellan 支持现有的功能,例如临时存储加密和卷加密。
提议的变更¶
Castellan 默认从 /etc/castellan 中的 Castellan 特定配置文件中提取配置选项,但如果直接传递配置选项,也可以接受配置选项。密钥管理器的配置选项仍然可以在 nova.conf 中指定,并传递给 Castellan。
nova/keymgr 中的旧密钥管理接口代码和后端实现以及 nova/tests/unit/keymgr 中的测试可以删除。Nova 代码中调用密钥管理接口的任何位置都将替换为对 Castellan 的调用。Castellan 不包括 ConfKeyManager,这是一种从配置文件读取密钥的不安全固定密钥密钥管理器。ConfKeyManager 的实现将保留在 Nova 中,因为 Nova 社区认为它提供了一个有价值的测试工具。
备选方案¶
Castellan 已集成到 Nova 中,但 ConfKeyManager 仍然保留在 Nova 源代码中。有一些选项可以改进集成。确定前进方向的目标如下
将 Castellan 保持为生产就绪后端密钥管理接口
弃用基于类的加载
找到一个后端作为加密功能的测试工具
然而,基于类的加载是 Castellan 的功能,因此弃用基于类的加载的规范应位于 Castellan/Barbican 规范中。以下是解决一个或多个目标的可能替代方案
删除并替换 ConfKeyManager
一种前进的策略是弃用并删除 ConfKeyManager,并找到一个适合测试的替代后端。ConfKeyManager 后端从配置文件读取单个固定密钥。它不存在于 Castellan 中,因为 ConfKeyManager 非常不安全,仅适用于测试。它仅适用于使用单个密钥的基本加密功能测试,例如 Cinder 卷加密。如果任何管理员决定在他们的生产部署中使用 ConfKeyManager,他们将能够在弃用后作为迁移的一部分将固定密钥存储在新后端中。其他安全功能,例如 Glance 镜像签名和验证,使用证书,不能使用 ConfKeyManager 进行测试。更接近于生产中使用的后端将提供更好的测试。以下是替换 ConfKeyManager 的选项
选项 1:KMIP Castellan 后端
密钥管理互操作性协议 (KMIP) 是一种用于与密钥管理器交互的标准化协议。PyKMIP 库 [6] 不仅包含与 KMIP 硬件设备交互所需的客户端代码,还包含具有 Keystone 身份验证的 KMIP 软件服务器,这对于功能测试非常有用,在无法使用硬件设备的情况下。KMIP Castellan 后端的工作已经开始 [7],但需要完成此选项。PyKMIP 软件服务器已经用于 Barbican 功能门。可以配置新的 DevStack 门检查以使用 PyKMIP 服务器进行加密 Tempest 测试,或者可以修改现有的测试。此选项满足上述所有三个目标。
选项 2:Barbican Castellan 后端
Castellan 已经存在 Barbican 后端。此选项包括编辑 DevStack 门作业和/或 DevStack 本身以配置和启动 Barbican。此选项有益,因为它将测试加密功能,就像它们应该在生产中使用一样,因为 Barbican 是推荐的后端。然而,只有 2% 的生产部署使用 Barbican [4],因此可能没有必要将其包含在所有门中。此选项将满足上述所有三个目标。
选项 3:新的数据库后端
此选项是创建一个新的 Castellan 测试工具后端,该后端可以将多个对象存储在数据库中。虽然此选项不会提供一个生产就绪的后端,但它将比 ConfKeyManager 更好,并且能够支持需要检索证书的签名镜像验证等功能的测试。这是从使用 ConfKeyManager 的改进,因为它将允许密钥管理测试代码更接近于部署配置的样子。然而,此后端尚不存在,并且需要进行工作来实现数据库交互。选项 1 或选项 2 需要更少的 Castellan 开发工作。完成后,此选项将满足三个目标中的两个。
将 ConfKeyManager 移动到其他位置
社区对 ConfKeyManager 位于 Nova 代码库中表示担忧,但将 ConfKeyManager 移动到 Castellan 并不受欢迎。以下是如果无法弃用 ConfKeyManager 的选项
选项 4:将 ConfKeyManager 移动到 Tempest
Tempest 测试是唯一应该使用 ConfKeyManager 的地方,因此可以将后端移动到 Tempest。只要 Castellan 提供在弃用基于类的加载后注册后端,此选项就可以满足上述所有三个目标。
选项 5:将 ConfKeyManager 移动到 Castellan
这不是一个推荐的选项。ConfKeyManager 不支持使用证书的签名镜像验证等功能的测试 [8]。将 ConfKeyManager 移动到 Castellan 会将缺乏足够的测试后端的问题推迟下去。
撤销 Castellan 集成补丁
选项 6:恢复到 nova/keymgr
这不是一个推荐的选项。密钥管理接口将保持在 nova/keymgr 中的状态,但这意味着 Nova 的密钥管理器将无法从 Castellan 中提供的更新、新功能和未来附加后端中受益。密钥管理接口不会在 Nova 中统一,因为卷加密功能和加密临时存储功能将使用 nova/keymgr,但镜像签名验证功能已经使用 Castellan。
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
Castellan 的行为与当前的 Nova 密钥管理器非常相似。Castellan 添加了改进和错误修复,这些改进和错误修复超出了 Nova 和 Cinder 密钥管理器中的当前范围,使其更加安全。Nova 和 Cinder 中发现的固定密钥密钥管理器对于部署不安全,但它对于测试很有用。Castellan 不包括固定密钥密钥管理器,因此 ConfKeyManager 将保留在 Nova 中。
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
无
其他部署者影响¶
应告知部署者默认密钥管理器后端发生了变化。Nova 中的当前默认后端是固定密钥,但 Castellan 使用 Barbican 作为默认后端。这意味着部署者应确保 Barbican 正在运行,并且固定密钥已添加到 Barbican,以便可以继续使用它。
磁盘加密的 Nova 配置文件中的选项将发生变化。选项组“keymgr”将被拼写为“key_manager”。密钥管理器选项组仍然将有一个选项“api_class”来指定所需的后端,但将不再提供指定固定密钥的选项。在“barbican”选项组中,将提供一些新的选项来提高后端的健壮性,例如检查密钥是否已成功创建的次数。
为了保持向后兼容性,旧选项仍将列为已弃用的选项。将遵循标准的弃用策略,并且这些旧选项应在下一个发布周期中删除。
开发人员影响¶
Nova 开发人员不会受到此更改的影响。如果开发人员发现更多密钥管理器的用途,Castellan 应该像当前的 Nova 密钥管理接口一样易于使用。
实现¶
负责人¶
- 主要负责人
Kaitlin Farr <kaitlin.farr@jhuapl.edu> kfarr on IRC
- 其他贡献者
无
工作项¶
用对 Castellan 的调用替换对 Nova 密钥管理器的调用。
删除 Nova 密钥管理器代码。
更新文档。
依赖项¶
此更改依赖于 Castellan,版本 >= 0.2.0。Castellan 已经存在于 OpenStack 的全局需求中。
测试¶
可以使用简单的内存后端对这些更改进行单元测试。由于实际部署应使用 Barbican,因此也应使用 Barbican 后端进行测试。
文档影响¶
这些更改将被记录。Nova 磁盘加密文档将更新为引用 Castellan [5]。
参考资料¶
- [1] Castellan 源代码
- [2] Castellan 在 OpenStack 的全局需求中
https://github.com/openstack/requirements/blob/master/global-requirements.txt
- [3] 当前 Nova 密钥管理器实现
- [4] 2016 年 4 月 OpenStack 用户调查
https://openstack.org/assets/survey/April-2016-User-Survey-Report.pdf
- [5] 磁盘加密配置参考
https://docs.openstack.org/liberty/config-reference/content/section_volume-encryption.html
- [6] PyKMIP 源代码
- [7] Castellan 的 KMIP 后端
- [8] Glance 镜像签名和验证规范
历史¶
发布名称 |
描述 |
|---|---|
Mitaka |
引入 |
Newton |
修订 |