将 ConfKeyManager 加密密钥 ID 迁移到 Barbican

https://blueprints.launchpad.net/cinder/+spec/migrate-fixed-key-to-barbican

通过将与 ConfKeyManager 关联的现有密钥迁移到 Barbican 来支持向 Barbican 的过渡。ConfKeyManager 密钥使用与 cinder.conf 中 key_manager 部分的 fixed_key 配置参数关联的全零密钥 ID。

问题描述

传统的 ConfKeyManager 不安全,首选的加密密钥管理器是 Barbican。在新部署中使用 Barbican 很容易,但在将部署从 ConfKeyManager 切换到 Barbican 时,如果存在使用 ConfKeyManager 加密的现有卷,则会比较困难。

用例

用户有一个基于 ConfKeyManager 的部署。他们希望切换到 Barbican,但存在使用 ConfKeyManager 加密的现有卷。当 Barbican 是密钥管理器时,这些现有卷必须继续正常工作。用户需要一个迁移到 Barbican 的路径,该路径不会破坏现有的加密卷。

提议的变更

本规范建议将 ConfKeyManager 密钥的所有实例(由全零密钥 ID 标识)替换为存储在 Barbican 中的相同密钥。这是可能的,因为 Barbican 提供了一种机制来存储现有的加密密钥。

将使用 cinder-volume 线程在数据库中搜索与 ConfKeyManager 的全零 ID 匹配的加密密钥 ID 实例。该线程将被称为密钥迁移线程。

  • 密钥迁移线程将在卷表中搜索与全零 ConfKeyManager 密钥 ID 匹配的 encryption_key_id 条目。对于卷表中的每个匹配条目,将创建一个新的 Barbican 密钥 ID,该 ID 使用 ConfKeyManager 使用的 fixed_key 配置值派生的完全相同的密钥。卷表将使用新的 Barbican 密钥 ID 进行更新。

  • 线程只会迁移与属于该主机的卷关联的密钥。这将避免在存在多个 cinder-volume 主机时发生争用。

  • 密钥迁移线程还会查找存储在元数据表中的 ConfKeyManager 密钥。在适当的情况下,这些条目将使用存储在相应卷表中的 Barbican 密钥 ID 进行更新。否则,将创建一个新的 Barbican 密钥 ID。

  • 只要同时满足以下两个条件,密钥迁移线程将在启动时生成

    1. 配置了 ConfKeyManager 的“fixed_key”

    2. key_manager 的“backend”(以前是“api_class”)不是 ConfKeyManager

  • 密钥迁移线程将生成日志,指示已将密钥 ID 迁移到 Barbican。它还会生成一条日志,指示线程已运行完毕,但未找到与 ConfKeyManager 关联的任何密钥 ID。

用户负责决定何时从部署中删除 fixed_key。建议用户使用上述日志消息来确定密钥迁移过程何时完成。一旦用户从配置中删除 fixed_key,密钥迁移线程将不会在启动时生成。

密钥迁移线程将与 Castellan 和/或 Barbican 的增强一起工作。在迁移过程中,cinder 服务可能仍然会在数据库中遇到 ConfKeyManager 的密钥 ID(全零)。这不是有效的 Barbican 密钥 ID,如果要求提供与该 ID 关联的密钥,Barbican 将抛出错误。该增强功能基本上会拦截对全零密钥 ID 的请求,并返回 ConfKeyManager 的响应。所有这些对于 Cinder 的其余代码来说都是完全透明的。简而言之,即使 Barbican 是指定的密钥管理器,全零密钥 ID 仍将继续工作。

备选方案

与其使用单独的迁移线程,不如让每一段获取和使用加密密钥 ID 的代码负责将密钥迁移到 Barbican。但是,代码需要在多个地方处理密钥 ID,并且每个实例都需要更新才能执行迁移。这种方法将涉及更多的代码更改,并且需要更多的长期维护。

我们也可以根本不将密钥迁移到 Barbican,而只是允许 Castellan-Barbican 增强功能处理对全零密钥 ID 的请求。但是,这将要求用户在配置中保留 fixed_key 值,这实际上错过了迁移到 Barbican 的目的。

数据模型影响

无。包含 ConfKeyManager 加密密钥 ID 的现有数据库条目将使用 Barbican 密钥 ID 的引用进行更新,但数据库结构不会更改。

REST API 影响

无。

安全影响

此更改应被视为一项安全增强功能,因为它有助于将现有的 ConfKeyManager 部署迁移到 Barbican。

通知影响

无。

其他最终用户影响

无。

性能影响

最小。密钥迁移线程不会占用大量 CPU,并且其他 cinder 操作不需要阻塞直到迁移线程完成。

其他部署者影响

无。

开发人员影响

无。

实现

负责人

主要负责人

Alan Bishop<abishop@redhat.com>

工作项

  • 开发代码框架,用于扫描需要迁移到 Barbican 的 encryption_key_id 的表

  • 开发实用代码,用于使用 ConfKeyManager 的密钥生成新的 Barbican 密钥 ID

  • 添加/更新单元测试

  • Update documentation

依赖项

Castellan 和/或 Barbican 将得到增强,以帮助迁移过程。该增强功能将允许使用 ConfKeyManager 的密钥 ID 加密的卷在迁移过程中正常工作。

测试

  • 添加和更新单元测试。

文档影响

文档将更新,说明使用 ConfKeyManager 加密的卷在切换到 Barbican 后将继续正常工作。用户需要确信迁移到 Barbican 是无缝且自动的。

更改将解释用户负责从部署中删除 ConfKeyManager 的 fixed_key,建议根据密钥迁移线程生成的日志消息来指导做出此决定的依据。这些消息将指示仍在迁移密钥,以及迁移过程何时完成。

参考资料

无。