这个想法是把我们所有的敏感数据[...]
在实施您计划的解决方案之前,应非常仔细地分析这句话中“全部”的含义。
Ansible保管库是一个非常有用的工具,但仅应用于存储以下机密:
- Ansible部署特别需要
- 对于不知道它们的所有者而言,很容易变得毫无用处,但可能会非法“记住”它们(通常是离职的员工)
第二点很关键。
许多人,甚至可能是整个DevOps团队,都将有权使用安全的Vault密码,从而可以访问所有机密信息。
因此,对于存储在金库中的所有机密,应满足以下条件:如果需要,未经授权访问它们的个人或机器应无能力使用它们。
具体来说,如果您使用ansible部署数据库及其用户,则可以将密码存储在Vault中,但是如果可以从Internet获得该服务,则必须非常小心(并且很可能考虑其他解决方案)。而且不需要任何VPN验证!
如果对用户(DevOps)施加了一个安全屏障(例如,撤销了VPN访问),则暴露给该秘密的用户(DevOps)应该不能使用“记住的”密码。除此之外,在更改密码之前,也应撤消对源代码存储库(存储金库的位置)的访问。
在这种情况下,ansible库是非常有用的工具。
试图在保管库中存储Internet上任何人或机器都可以使用的秘密将是一个错误(例如,用户的VPN凭据)。
是否还有其他选择,这是存储ansible-Vault密码的最佳(和安全)方法
在上一段的条件下,我认为一个好的做法是:
- 将文件库密码存储在外部安全文件库中(例如HashiCorp的文件库或用于凭据管理的任何SaaS)
- 允许访问DevOps的外部保管库项目(他们将需要密码进行测试)以及CI / CD系统或Ansible控制器
遵守约定使用秘密!您将无法查看对机密的更改,也无法grep机密文件中的ansible变量!因此,从一开始就要彻底。一个好的约定是用一个secret_
前缀命名存储在ansible保管库中的所有变量。当您看到如下内容时:
postgres.yml:
postgres_password: "{{ secret_postgres_password }}"
您将知道该值存储在ansible保管库中。