我们正在使用Ansible Vault将密码、证书私钥等存储在我们的 Ansible Playbook git 存储库中。我们现有的所有私有数据都是文本形式,因此我们可以将其存储在变量中。然后将它们用于模板或与content
复制模块的参数一起使用。
现在,我们有一个 Java KeyStore 文件,遗憾的是它采用的是二进制格式。因此,它不能存储在变量中——或者至少我不知道该怎么做。当我们的文件位于 git 中时,如何才能正确加密,但在运行时可用,最简单的方法是什么ansible-playbook
?
我已经尝试过但没有成功:
- 使用 base64 对二进制文件进行编码,将编码后的数据存储在变量中,然后使用模板模块
{{base64_data | b64decode}}
。导致结果文件中有大量EF BF BD
十六进制转储。这三个字节以 UTF-8 编码 Unicode 替换字符,因此将二进制数据解释为文本存在问题。 - 使用 base64 对二进制文件进行编码,将编码后的数据存储在变量中,然后使用复制模块
content="{{base64_data | b64decode}}"
。Ansible 抱怨“变量将新参数插入到模块参数中。”当使用单引号而不是双引号时,Ansible 抱怨“解析参数字符串时出错”,并将所有二进制数据的副本转储到终端...
答案1
您可以使用带有 base64 变量的 shell 命令来执行此操作。
- vars:
- myvar: "<my_base64_var>"
- name: Create binary file
shell: "echo '{{myvar}}' | base64 -d > /var/tmp/binary.dat"
埃里克
答案2
我们在 ansible 设置中这样做的方法是:
-我们使用以下方式加密单个敏感材料(我们存储库的一小部分)https://www.agwa.name/projects/git-crypt/ -我们总是使用 git sign 标签进行提交 -我们定期检查是否有任何未签名的文件
git-crypt 的优点在于,由于它依赖于 git 过滤器,因此加密是透明的。此外,您可以授予开发人员对存储库的访问权限,而不会泄露加密内容(如果无法获得解密密钥,它将忽略加密文件)。