该文档指出,由于Ansible 2.3,应该可以使用!vault |前缀对某些变量进行加密,而不是将变量和密钥放入Vault文件中并对其进行完全加密。


notsecret: myvalue
mysecret: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          66386439653236336462626566653063336164663966303231363934653561363964363833313662
          6431626536303530376336343832656537303632313433360a626438346336353331386135323734
          62656361653630373231613662633962316233633936396165386439616533353965373339616234
          3430613539666330390a313736323265656432366236633330313963326365653937323833366536
          34623731376664623134383463316265643436343438623266623965636363326136
other_plain_text: othervalue



当前结构如下:

ansible/group_vars/testing/vars
ansible/group_vars/testing/vault


将加密变量从Vault移动到vars目录时,运行ansible-vault decrypt ansible/group_vars/testing/vars会返回:

ERROR! input is not vault encrypted data for ansible/group_vars/testing/vars



使用提供的Vault密钥解密该Vault变量,并将
用作普通变量。 ansible-vault命令行支持
stdin和stdout即时加密数据,可以从您最喜欢的编辑器中使用它们
创建这些Vaulted变量。您只需
必须确保添加!vault标记,以便Ansible和YAML都
意识到需要解密。 |由于Vault加密会产生多行字符串,因此也是必需的。


问题



应该将变量设置为加密,使用命令行一一加密

重新构造Ansible旧结构的最佳做法是什么?例如。删除保管库文件并将所有
已加密的vars放入vars文件中?


#1 楼

最近,我与ansible Vault进行了相当多的合作(特别是关于加密内容以及如何在不使代码不可读的情况下加密那些东西),我发现在2.3中改变我的习惯的动机很小。

如果我要使用一系列加密的变量或文件,请将它们分开(我给它们加上vault_前缀),然后将其保留在那。

我已经使用了几次!保管库功能,但让我非常惊讶,因为仅是非常明确地了解秘密文件中的内容是什么,这似乎比较容易。这样,没有人可以编辑我的剧本来假设什么是敏感数据,哪些不是敏感数据。

#2 楼

我决定删除ansible/group_vars/testing目录,并将其替换为一个文件,即包含加密的var的文件ansible/group_vars/testing

mysecret: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          66386439653236336462626566653063336164663966303231363934653561363964363833313662
          6431626536303530376336343832656537303632313433360a626438346336353331386135323734
          62656361653630373231613662633962316233633936396165386439616533353965373339616234
          3430613539666330390a313736323265656432366236633330313963326365653937323833366536
          34623731376664623134383463316265643436343438623266623965636363326136


而不是运行ansible-vault edit ansible/group_vars/testing/vault,可以使用管道传递值需要加密到ansible-Vault,即printf mysecret | ansible-vault encrypt。后者将对mysecret进行加密,并且可以将输出添加到ansible/group_vars/testing文件中。如果将ansible-playbook运行,则如果指定了ansVault文件,则加密的变量将被解密。

如果需要调试加密的值,则可以使用以下代码:

- debug: msg="Decrypted value: {{ encrypted_var }}"