保护配置文件中的敏感数据,防止泄露

最好避免在配置文件中存储敏感信息,但有时这是不可避免的。对于这些情况,oslo.config 提供了一种有用的机制,可以通过该机制对这些敏感信息进行清理和保护。

为了触发此清理,必须在注册 oslo 配置时,将 ‘secret=True’ 标志添加到 ‘cfg.StrOpt()’ 函数中。

下面提供了一个该实践的示例。

错误

在下面的示例中,密码 ‘secrets!’ 将通过 cfg.StrOpt() 函数加载,否则它可能会被记录并泄露给任何有权访问日志文件的人(无论合法与否)。

cfg.StrOpt('password',
           help='Password of the host.'),

正确

正确的代码示例

cfg.StrOpt('password',
           help='Password of the host.',
           secret=True),

后果

如果敏感信息选项未被标记为 secret 就被记录,那么当 logger debug 标志被激活时,该敏感信息就会被暴露。

示例日志条目

2015-02-18 20:46:48.928 25351 DEBUG nova.openstack.common.service [-] Full set of CONF: _wait_for_exit_or_signal /usr/lib/python2.7/dist-packages/nova/openstack/common/service.py:166
2015-02-18 20:46:48.937 25351 DEBUG nova.openstack.common.service [-] Configuration options gathered from: log_opt_values /usr/lib/python2.7/dist-packages/oslo/config/cfg.py:1982
2015-02-18 20:46:51.482 25351 DEBUG nova.openstack.common.service [-] host.ip                 = 127.0.0.1 log_opt_values /usr/lib/python2.7/dist-packages/oslo/config/cfg.py:2002
2015-02-18 20:46:51.491 25351 DEBUG nova.openstack.common.service [-] host.port               = 443 log_opt_values /usr/lib/python2.7/dist-packages/oslo/config/cfg.py:2002
2015-02-18 20:46:51.502 25351 DEBUG nova.openstack.common.service [-] host.username           = root log_opt_values /usr/lib/python2.7/dist-packages/oslo/config/cfg.py:2002
2015-02-18 20:46:51.486 25351 DEBUG nova.openstack.common.service [-] host.password           = secrets! log_opt_values /usr/lib/python2.7/dist-packages/oslo/config/cfg.py:2002

参考