保护 OpenStack 明文密码自动化

日期:

2021-04-22 22:00

标签:

保护明文配置、oslo.config、castellan、vault、安全性

OpenStack 服务需要在配置文件中包含敏感数据。这些值用于各种配置选项,例如 passwordtransport_urlconnection 等。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.confmapping.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_urlconnection 参数的值是 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_configsprotected_configs_castellan_conf 应添加到 openstack_user_config.yml 文件中。protected_configs 参数应采用 truefalse 值,默认值应为 false

如果系统管理员将值设置为 true,则 playbook 中执行其他步骤以解决以下问题

  • 检查所需的 Python 库(例如 castellan)并在需要时安装它们;

  • 将适当的值添加到密钥存储中;

  • 准备不包含敏感数据但包含 config_source 选项和密码部分的 service 配置文件;

  • castellan.conf 添加到 service 配置文件目录;

  • mapping.conf 添加到 service 配置文件目录。

此更改不需要对 oslo.configcastellan 进行任何更改,因为目前已经支持所有内容。

备选方案

可以使用单独的 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>

其他贡献者

<Misha.Vorona@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

[4] https://opendev.org/openstack/openstack-ansible-tests

[5] https://www.vaultproject.io/