如何自动化ansible vault解密?

How to automate ansible vault decryption?

我想自动解密 ansible 保险库,而不必从命令行指定保险库位置或密码。

主要是,我正在寻找一种解决方案,其工作方式与 ~/.netrc 的工作方式类似。当您将凭据放在那里时,工具(如 curl、wget 等)将知道加载它们。

如果你不这样做,执行将有。

这非常重要,因为我需要能够自动执行这些 ansible 剧本,所以提示输入密码显然不是一个选项。

此外,我不想向每个剧本添加 --vault-password-file 参数。有什么想法吗?

您可以在 ansible.cfg 中定义 vault_password_file

但我认为这没有太多价值。查看 .netrc 联机帮助页,我看到凭据在 .netrc 文件中,并且也是以明文形式编写的。此外,它建议:

This file resides in the user's home directory on the machine initiating the file transfer. Its permissions should be set to disallow read access by group and others.

对于 .netrc 来说,这是有意义的,因为目标是提供对其他系统的访问。但是您的目标是提供对文件的访问权限。

虽然加密文件然后简单地将解密密钥放入同一主机上的另一个文件中并没有太大意义,但仅受 chmod 保护。首先,您可以简单地 保护 您在 Ansible 中的秘密 chmod 。这具有相同级别的安全性并避免了一些开销。

很像库存,如果 vault-password-file 设置了可执行位,Ansible will run it and use stdout as the password

这允许您编写一个脚本,将密码包装在 PGP 加密中,位于访问受限的 S3 存储桶中,使用 AWS KMS 或任何您喜欢的东西。

有几种方法:

  1. 按照建议,将您的密码文件锁定存储(例如 Azure 容器或任何其他可使用 ssh 密钥访问的位置)。在运行时获取它并使用 --vault-password-file 参数。您可以在那之后立即删除该文件。

  2. 如果您使用的是像 Jenkins 这样的自动化服务器,您可以将密码存储为 Jenkins 凭据。即时检索密码并将其放入文本文件中。再次使用 --vault-password-file 参数。我在这里写了一个小post Stroing Vault key in jenkins