[英]How to pass ansible vault password as an extra var?
我有能力使用另一种机制(Azure 管道秘密功能)加密变量,所以我想在那里保存一个 ansible-vault 密码(在 Azure 管道中)并将其作为额外的 var 传递给剧本执行。
我可以知道是否可以这样做吗?
我期待什么/如何的一个例子是
ansible-playbook --extra-vars "vault-password=${pipelinevariable}"
Vault 密码不能作为额外的 var 传递。 有几种方法可以提供它,这些方法都包含在文档中:
基本上你的选择是:
--ask-vault-pass
选项以交互方式提供它--vault-password-file /path/to/vault
选项ANSIBLE_VAULT_PASSWORD_FILE
环境变量(例如export ANSIBLE_VAULT_PASSWORD_FILE=/path/to/vault
)。上面的文档中还有很多要学习的内容,尤其是如何使用带有 id 的多个保险库密码,如何使用客户端脚本从密钥库中检索密码......
我可以知道是否可以这样做吗?
不熟悉Ansible Vault
,但根据Zeitounator共享的文档,您至少有两个方向。
1.首先使用CMD 任务创建具有纯文本内容的 vault-password-file。 (不确定是否可以通过这种方式创建 Vault-password-file,它可能不起作用。)
( echo $(SecretVariableName)>xxx.txt
)
然后你可以使用新创建的 xxx.txt 文件作为ansible-playbook --vault-password-file /path/to/my/xxx.txt xxx.yml
。
2.在运行管道之前创建一个对应的Vault-password-file,添加到版本控制中。 (您当前管道的相同源代码库)
然后,当 vault-password-file 可用时,您可以轻松使用ansible-playbook --vault-password-file
。 Also you can store the password file in private github repo, fetch the repo via git clone https://{userName}:{userPassword}@github.com/xxx/{RepoName}.git
, copy the needed password file to the directory您在其中通过Copy Files 任务运行 ansible-playbook 命令。 无论direction 1
是否支持,该方向都应该有效。
尽管这不使用额外的变量,但我相信它可以满足您的要求:
可选/仅一次性:询问密码并将其设置为环境变量:
read -s ansible_vault_pass && export ansible_vault_pass
现在在 ansible 命令中使用该变量:
ansible-playbook your-playbook.yml --vault-password-file <(cat <<<"$ansible_vault_pass")
<(cat <<<"")
技术的功劳和解释在另一个 StackOverflow 答案中: Forcing cURL to get a password from the environment 。
感谢您对此主题的确认和评论。
所有这些建议都类似于我一直在尝试的,以便根据原始问题完成对我预先生成的保管库文件的解密。
我还继续阅读替代方案,在剧本运行之前设置环境变量。 但这仅在您具有动手访问权限时才有效,主要是在测试我的 ansible 剧本、部署到远程主机等时。所有这些都有效,即使在您设置 ansible.cfg 时使用脚本,其中的条目如下:(取决于env 变量是预设的)
[默认值] vault_password_file =./Orchestration/ansible_get_sec.py 或 vault_password_file =./Orchestration/ansible_get_sec.sh
我希望传入“-e sec-param=${jenkins-secret}”并在上面的脚本中使用“$sec-param”。 同样,当 env 变量首先 [exported] 时有效,这在直接从 Jenkins-calling-ansible 自动化时不容易完成,是的,我仍然不知道我是否想要那样。 但我想尝试验证行为。 但是,一旦 playbook 命令执行,首先执行的是 [vault_password_file] 的 [defaults] 加载,以解析在 group_vars/all/vault.yml 中定义的 vault 变量。
请注意,不需要在“deploy-repo”文件中预先设置 ansibel_vault_password,因为我们的存储库中不允许使用任何类型的明文密码。 另请注意有关创建文件的建议(使用 $sec-param),但是如何在通过 ansible.cfg 加载 vault_password_file 之前注入/停止剧本进程以将其写出?
因此,我目前不鼓励使用 Vault。 或者,我用额外的 jenkins-secret-credentials 参数重载了我的命令
==> ansible-playbook -i /inventory. . . “-e sec1=**** sec2=*** 等等等等。”
我真的很想使用 ansible-vault,因为它打开了更安全的选择之门。 使用上面 Zeitounator(2020 年 7 月 3 日 7:21)提到的推荐的 [ansible/latest/modules] 可能实际上可以解决这个问题。 仍然需要与我们的 devSecOps 人员一起解决。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.