保护配置文件中的敏感数据,防止泄露¶
最好避免在配置文件中存储敏感信息,但有时这是不可避免的。对于这些情况,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