我想自动解密 ansible 保险库,而不必从命令行指定保险库位置或密码。
主要是,我正在寻找一种解决方案,它的工作方式类似于~/.netrc
工作方式。当您将凭据放在那里时,工具(如 curl、wget、...)将知道加载它们。
如果你不这样做,执行将有。
这非常重要,因为我需要能够自动执行这些 ansible playbook,因此提示输入密码显然不是一种选择。
另外,我不想--vault-password-file
为每个剧本添加参数。有任何想法吗?
我想自动解密 ansible 保险库,而不必从命令行指定保险库位置或密码。
主要是,我正在寻找一种解决方案,它的工作方式类似于~/.netrc
工作方式。当您将凭据放在那里时,工具(如 curl、wget、...)将知道加载它们。
如果你不这样做,执行将有。
这非常重要,因为我需要能够自动执行这些 ansible playbook,因此提示输入密码显然不是一种选择。
另外,我不想--vault-password-file
为每个剧本添加参数。有任何想法吗?
就像清单一样,如果vault-password-file
设置了可执行位,Ansible 将运行它并使用 stdout 作为密码。
这允许您编写一个脚本,将密码包装在 PGP 加密中,位于访问受限的 S3 存储桶中,使用 AWS KMS 或任何您喜欢的东西。
你可以vault_password_file
在你的ansible.cfg
.
但我认为这没有太多价值。查看 .netrc 联机帮助页,我看到凭据在 .netrc 文件中,并且也以纯文本形式编写。此外,它建议:
该文件位于启动文件传输的计算机上的用户主目录中。其权限应设置为不允许组和其他人进行读取访问。
对于 .netrc,它是有意义的,因为目标是提供对其他系统的访问。但您的目标是提供对文件的访问。
虽然加密一个文件然后简单地将用于解密的密钥放在同一主机上的另一个文件中并没有太大意义,该文件仅受chmod
. 首先,您可以简单地在 Ansible中保护chmod
您的秘密。这具有相同级别的安全性并避免了一些开销。
有几种方法:
按照建议,将您的密码文件存储在锁定中(例如 Azure 容器或使用 ssh 密钥可访问的任何其他位置)。在运行时获取它并使用 --vault-password-file 参数。之后您可以立即删除该文件。
如果您使用像 Jenkins 这样的自动化服务器,您可以将密码存储为 Jenkins Credential。即时检索密码并将其放入文本文件中。同样,使用 --vault-password-file 参数。我在詹金斯 Stroing Vault key上写了一篇关于它的小帖子