集成 Castellan 用于密钥管理

https://blueprints.launchpad.net/cinder/+spec/use-castellan-key-manager

Castellan 是一个密钥管理接口库,旨在与多个后端一起使用,包括 Barbican。Castellan 代码基于 Nova 和 Cinder 中存在的基本的密钥管理接口。现在密钥管理接口位于一个单独的库中,密钥管理代码可以从 Nova 和 Cinder 中移除,并使用 Castellan 作为密钥管理接口。

问题描述

随着 OpenStack 项目中加密功能的日益普及,这些项目通常需要一种与密钥管理器交互的方式。不同的部署者可能对密钥管理器有不同的要求,因此密钥管理接口也必须可配置,以支持不同的后端。Castellan 密钥管理接口基于 Cinder 和 Nova 中发现的密钥管理接口。现在共享密钥管理接口位于一个单独的库中,嵌入在 Cinder 中的原始密钥管理接口可以移除,并使用 Castellan 代替。

用例

Castellan 支持现有的功能,例如卷加密。

提议的变更

必须将 Castellan 添加到所需的库列表中。

Castellan 默认从 /etc/castellan 中的 Castellan 特定配置文件中提取配置选项,但也可以直接传递配置选项。密钥管理器的配置选项仍然可以在 cinder.conf 中指定,并传递给 Castellan。

旧的密钥管理接口代码和 cinder/keymgr 中的后端实现以及 cinder/tests/unit/keymgr 中的测试可以移除。Cinder 代码中调用密钥管理接口的任何位置都将替换为对 Castellan 的调用。Castellan 不包括 ConfKeyManager,这是一种从配置文件读取密钥的不安全固定密钥密钥管理器。ConfKeyManager 的实现将保留在 Cinder 中,但将被转换为 Castellan 插件,以执行相关的代码路径。

备选方案

另一种选择是保持密钥管理接口不变,但这意味着 Cinder 的密钥管理器将无法从 Castellan 中提供的更新、新功能和未来附加后端中受益。

数据模型影响

REST API 影响

安全影响

Castellan 的行为与当前的 Cinder 密钥管理器非常相似。Castellan 添加了改进和错误修复,这些改进和修复超出了 Nova 和 Cinder 密钥管理器中目前的功能,使其更加安全。Nova 和 Cinder 中发现的固定密钥密钥管理器对于部署来说是不安全的,但对于测试很有用。Castellan 不包括固定密钥密钥管理器,因此 ConfKeyManager 将转换为 Castellan 插件,并保留在 Cinder 代码中。

通知影响

其他最终用户影响

性能影响

其他部署者影响

应告知部署者默认密钥管理器后端已更改。Cinder 中当前的默认后端是固定密钥,但 Castellan 使用 Barbican 作为默认后端。这意味着部署者应确保 Barbican 正在运行,并将固定密钥添加到 Barbican,以便可以继续使用它。

Cinder 配置文件中卷加密的选项将发生变化。选项 ‘keymgr’ 将拼写为 ‘key_manager’。密钥管理器选项组仍然具有一个选项 ‘api_class’,用于指定所需的后端。在 ‘barbican’ 选项组中,将提供一些新的选项来提高后端的健壮性,例如检查密钥是否已成功创建的次数。

为了保持向后兼容性,旧选项仍将列为已弃用的选项。将遵循标准的弃用策略,这些旧选项应在下一个发布周期中移除。

开发人员影响

Cinder 开发者不应受到此更改的影响。如果开发者发现更多密钥管理器的用途,Castellan 应该像当前的 Cinder 密钥管理接口一样易于使用。

实现

负责人

主要负责人

Kaitlin Farr <kaitlin.farr@jhuapl.edu> kfarr on IRC

其他贡献者

工作项

  • 将 Castellan 添加到 Cinder 的需求中。

  • 将对 Cinder 密钥管理器的调用替换为对 Castellan 的调用。

  • 移除 Cinder 密钥管理器代码。

  • 更新文档。

依赖项

此更改依赖于 Castellan,版本 >= 0.2.0。Castellan 已经位于 OpenStack 的全局需求中。

测试

可以使用简单的内存后端对此更改进行单元测试。由于实际部署应使用 Barbican,因此也应使用 Barbican 后端对此功能进行测试。

文档影响

这些更改将被记录。Cinder 文档中的卷加密将更新为引用 Castellan [4]。

参考资料

[1] Castellan 源代码

https://github.com/openstack/castellan

[2] OpenStack 全局需求中的 Castellan

https://github.com/openstack/requirements/blob/master/global-requirements.txt

[3] 当前 Cinder 密钥管理器实现

https://github.com/openstack/cinder/tree/master/cinder/keymgr

[4] 卷加密配置参考

https://docs.openstack.org/liberty/config-reference/content/section_volume-encryption.html