保护 OpenStack 明文密码自动化¶
- 日期:
2021-04-22 22:00
- 标签:
保护明文配置、oslo.config、castellan、vault、安全性
OpenStack 服务需要在配置文件中包含敏感数据。这些值用于各种配置选项,例如 password、transport_url、connection 等。OpenStack 服务的配置文件只是纯文本文件。因此,即使对这些文件设置了适当的文件权限,敏感数据目前也未受到任何保护地存储在其中。
Raildo Mascena de Sousa Filho [1] 创建了一个关于保护 OpenStack 明文密码的规范。此外,osloconfig 和 castellan 库支持以下配置文件的处理方案:oslo-config 可以借助 castellan 读取配置选项及其值,而 castellan 能够从受保护的密钥管理解决方案(例如 HashiCorp Vault)读取这些数据。
Moisés Guimarães de Medeiros 在他的代码 [2] 中实现了该方案的概念验证。因此,OpenStack 明文配置中保护敏感选项的问题几乎已经解决,但缺乏对此类安全配置的自动化。
问题描述¶
目前,oslo.config 允许我们在配置文件的 DEFAULT 部分指定 config_source,并使用 castellan 驱动程序从适当的配置文件部分读取配置选项
[DEFAULT]
config_source = secrets
[secrets]
driver=castellan
config_file=castellan.conf
mapping_file=mapping.conf
配置文件 castellan.conf 和 mapping.conf 包含有关如何从密钥存储读取配置选项值的信息。
castellan.conf 示例
[key_manager]
backend=vault
[vault]
kv_mountpoint=kv
vault_url='https://vault.enterprise.local:8200'
use_ssl=True
mapping.conf 示例
[oslo_messaging_notifications]
transport_url=6d1c6b6bd925418eb3c99523750bc4be
[database]
connection=20921387a863462dae4db253198156ec
… 其中 transport_url 和 connection 参数的值是 HashiCorp Vault 中相应记录的 ID。
问题在于系统管理员需要将适当的值插入到 HashiCorp Vault 或其他密钥存储中,然后手动或使用首选自动化工具重新配置 OpenStack 服务。目前没有解决方案可以从一开始就使用安全的配置文件启动 OpenStack。
考虑到所有这些,我们建议允许系统管理员使用安全的配置文件安装 OpenStack。
提议的变更¶
因此,保护 OpenStack 明文配置文件有两个部分
安装 HashiCorp Vault(如果尚未安装);
使用明文配置正确配置所有 OpenStack 服务。
本规范建议对 openstack-ansible [3] 进行以下添加
添加 HashiCorp Vault 安装 playbook;
向 OpenStack 服务 playbook 添加其他任务;
添加其他参数,以便系统管理员可以选择是否使用受保护的明文配置安装 OpenStack。
这些额外的参数是
vault_hosts– 可选参数,指示应安装 HasiCorp Vault 的主机。与其他 OpenStack 服务一样,HashiCorp Vault 应该具有高可用性安装;protected_configs和protected_configs_castellan_conf应添加到openstack_user_config.yml文件中。protected_configs参数应采用true或false值,默认值应为false。
如果系统管理员将值设置为 true,则 playbook 中执行其他步骤以解决以下问题
检查所需的 Python 库(例如
castellan)并在需要时安装它们;将适当的值添加到密钥存储中;
准备不包含敏感数据但包含
config_source选项和密码部分的 service 配置文件;将
castellan.conf添加到 service 配置文件目录;将
mapping.conf添加到 service 配置文件目录。
此更改不需要对 oslo.config 或 castellan 进行任何更改,因为目前已经支持所有内容。
备选方案¶
可以使用单独的 Ansible playbook 仅用于服务重新配置,在通过 opentack-ansible 使用不安全的配置文件安装 OpenStack 后,来实现明文密码的保护。
在这种情况下,应将要保护的服务的列表提供给 playbook,并且该 playbook 的任务应执行与上述几乎相同的步骤
安装并初始化 HashiCorp Vault;
检查所需的 Python 库(例如
castellan)并在需要时安装它们;将适当的值添加到密钥存储中;
准备不包含敏感数据但包含
config_source选项和密码部分的 service 配置文件;将
castellan.conf添加到 service 配置文件目录;将
mapping.conf添加到 service 配置文件目录;重新启动 OpenStack 服务。
Playbook/Role 影响¶
应添加有关 HashiCorp Vault 安装的额外角色。
应向 playbook 添加其他任务,以正确配置 OpenStack 服务。
升级影响¶
没有影响。
安全影响¶
敏感数据将从纯文本配置文件中删除,因此此更改将提高安全性。
性能影响¶
没有影响。
最终用户影响¶
没有影响。
部署者影响¶
如果部署者不想保护明文配置,则不会产生任何影响。否则,部署者将能够配置其他选项以删除纯文本配置中的敏感数据,如上所述。
开发人员影响¶
没有影响。
依赖项¶
以下是关于保护纯文本配置中敏感数据的初始蓝图
https://blueprints.launchpad.net/oslo.config/+spec/protect-plaintext-passwords
实现¶
负责人¶
- 主要负责人
yeremko <Alexander.Yeremko@walmart.com>
- 其他贡献者
工作项¶
实现对
openstack-ansible[3] 的更改实现对
openstack-ansible-tests[4] 的更改更新文档。
测试¶
需要对 openstack-ansible-tests [4] 进行额外的测试,以涵盖添加的功能。
文档影响¶
需要更新文档,以说明如何保护明文配置并进一步使用它们。
参考资料¶
[1] https://specs.openstack.org/openstack/oslo-specs/specs/stein/secret-management-store.html
[2] https://github.com/moisesguimaraes/ep19
[3] https://opendev.org/openstack/openstack-ansible