我看到过许多关于版本化配置管理系统的建议。您建议如何处理应用程序安全所需的密码?也对它们进行版本化?
答案1
如果您在配置文件中写入密码,那么在将配置文件签入修订控制时保留这些密码肯定更容易。这样做肯定不会比一开始就将它们放在配置文件中更不安全,只要对存储库应用适当的访问控制(存储库上的权限和存储库用于其后端的文件系统权限)。这样存储的密码肯定容易受到攻击,但通常您别无选择。
无论何时存储密码,最好确保密码已加密,并且对加密密码数据库的访问受到限制。我通常不会为此使用修订控制系统,因为它有相当多的开销和复杂性,实际上只会增加您的攻击面。
许多人将管理密码存储在电子表格和文档中。除非你喜欢被渗透测试人员羞辱,否则不要像他们一样。
最好的解决方案是使用加密密码的软件,如果可能的话,将它们存储在离线系统中。有很多软件可以做到这一点(其中一些可以根据需要主动更改密码并保留历史密码记录)。Hitachi ID Systems 为此制作了一款企业级产品(披露:我曾经为他们工作过);keepass 和 lastpass 也浮现在我的脑海中。
答案2
如果你只是需要一个安全的地方来存储密码并偶尔检索它们,请尝试使用类似秘密服务器。
如果您希望将密码与部署工件捆绑在一起作为自动化的一部分,那么请找到一个具有 API 的工具(如 Secret Server),该 API 可让您根据需要查询密码并将它们排除在(可能)不太安全的版本控制存储库之外。
答案3
如果你正在使用 Chef 之类的配置管理工具,那么你可以使用加密数据包
http://docs.opscode.com/essentials_data_bags_encrypt.html
另一方面,对于因环境而变化的事物,最好通过系统环境将它们传递给自动脚本。
http://www.12factor.net/config
任何 CI 或 CD 服务器产品都应允许您以加密形式存储值。例如,这是我工作的产品的文档。