保护明文密码

bp 保护明文密码 https://blueprints.launchpad.net/oslo.config/+spec/protect-plaintext-passwords

问题描述

当前的 OpenStack 服务需要明文密码和凭据用于各种访问,例如数据库、keystoneauth 等。

即使在这些文件上设置了适当的文件权限,在故障排除过程中,这些配置文件经常会通过电子邮件发送,而密码没有被正确地删除。

此外,跨多个节点更改密码的能力严重依赖于所选的部署工具(ansible、fuel 等)。

提议的变更

首先,为了正确保护这些配置文件中的密码,我们应该实现一个 oslo.config 驱动程序,如 oslo spec https://specs.openstack.org/openstack/oslo-specs/specs/queens/oslo-config-drivers.html 中描述的。

阶段 0

使用 HTTP 和 HTTPS URL 作为密码的引用

作为一种基本但有用的解决方案,我们建议使用外部 URL 指向 HTTP 或 HTTPS URL 来访问这些密码。

注意:此阶段 0 已合并到 oslo.config 的 Rocky 版本中。

阶段 1

目前,在 OpenStack 中,我们有一个名为 Castellan 的通用密钥管理器接口,这意味着 Castellan 的工作原理是基于您的配置提供一个抽象的密钥管理器。 这样,可以通过单个接口支持多种不同的管理服务。 将 Castellan 与 oslo.config 集成需要在 oslo.config 驱动程序中定义 Castellan 实现。

之后,我们将能够使用 Castellan 引用这些密码,并使用适当的密钥存储后端存储它们。 目前,Castellan 支持 Barbican 和 Hashicorp Vault 作为后端选项。 对于此场景,我们将考虑使用 Vault 作为选定的解决方案,因为我们可以指向外部 Vault 服务器,而无需依赖于其他 OpenStack 服务的内部依赖关系,以及用于身份验证和验证方法,因为 Barbican 需要 Keystone 令牌作为身份验证方法,我们还需要存储 Barbican 和 Keystone 密钥存在于其配置文件中。

阶段 2

最后,我们应该使用一些部署工具,如 Ansible,来创建这些密码并正确地存储在 Vault 中,遵循 Castellan 接口,并将这些密码注入到配置文件中。 因此,以后我们将能够在配置文件中正确地恢复它,而无需任何手动步骤。

Consuming projects

任何在配置文件中具有一些密码的 OpenStack 服务,例如 Glance、Nova、Keystone、Mistral 等。

备选方案

  • 加密配置文件

需要解密密钥,使得更新配置变得困难

  • 配置管理数据库 (CMDB)

需要保护数据库连接凭据

  • 其他类型的提供程序可以作为密钥存储解决方案,因为这些提供程序实现了 Castellan 接口,例如 Vault 或 KMIP 设备

安全影响

此更改旨在使 OpenStack 服务的密码和凭据管理更加安全,通过使用安全且加密的替代方案,遵循 Castellan 接口进行密码管理,从而删除 OpenStack 服务配置文件的明文密码。

Configuration Impact

对于这项工作的第一阶段,操作员可以更新他们的配置文件以指向密码引用,而不再使用明文密码。 但是,在第二阶段,通过 Puppet 和/或 Ansible,这些更改将由这些工具自动完成。

实现

负责人

主要负责人

raildo

其他贡献者

dhellmann moguimar spilla

里程碑

我们正在将阶段 0 定位到 Rocky-3,并将阶段 1 和阶段 2 定位到 Stein。

工作项

  • 实现 oslo.config 驱动程序用于 URI

  • 实现 oslo.config 驱动程序用于 Castellan

  • 文档

文档影响

我们应该记录如何更新 OpenStack 服务的配置文件以使用适当的密码引用,而不是明文密码。

参考资料

Oslo PTG 讨论:https://etherpad.openstack.org/p/oslo-ptg-queens 会议记录:https://etherpad.openstack.org/p/oslo-config-plaintext-secrets Rocky 版本中的阶段 0:https://docs.openstack.org/oslo.config/latest/reference/drivers.html

注意

本作品采用知识共享署名 3.0 非移植许可协议授权。 http://creativecommons.org/licenses/by/3.0/legalcode