在GitHub环境中,有效管理ansible-vault的加密参数的技巧是什么?

首先

在实际场景中,我认为人们会使用GitHub或Bitbucket等平台来管理和共享Ansible的Playbook。
在这种情况下需要注意的是机密信息如密码的管理。
无论是公开还是私有仓库,都不应该上传这些信息。

为了应对这些问题,Ansible提供了一个名为ansible-vault的功能,它可以在Playbook执行时自动解密加密过的文件。非常方便!

然而,由于ansible-vault的加密是以文件为单位的,所以根据使用方式的不同,可能会导致管理变得困难的情况。

经常出现的情况

当想要将密码嵌入到模板中时

password={{ password }}

将名为”password”的参数记录在secret.yml中进行加密。

password: XXXXXXXX

加密后 huà

$ANSIBLE_VAULT;1.1;AES256
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...

上述的问题 de

新的成员会注意到模板中有一个名为“password”的参数,但即使在存储库内进行搜索,也会发现密钥都被加密,所以自然找不到它。

如果是一个人开发,那个人自己会了解到,所以应该没有问题。但是如果是团队开发,当有新成员加入时可能会引起混乱(就是我)。

解決方案

将变量分层,将普通变量与加密变量的层次分开。

通过这种方式,您可以指定value的不同层级变量,因此只需对value进行加密(参数password本身可搜索)。

样品

user={{ my_vars.user }}
password={{ my_vars.password }}
---
my_vars:
  user: username
  password: "{{ secret.password }}"
---
secret:
  password: XXXXXXX

加密之后

$ANSIBLE_VAULT;1.1;AES256
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...

在vars.yml文件中,参数password本身并没有与参数user一起加密,因此搜索也很容易。
只需查看其value,即使无法知道具体的值,也能知道它是在secret.password中定义的。

剩下的是,要是在加密文件的文件名中加上” _secret “之类的命名规则,就能避免新成员的困惑了(依我看)。

请参考

在执行ansible-playbook时,可以通过输入密码进行解密,但考虑到实际操作,这种方式并不现实。相反,我们可以将加密时使用的密码存储在文件中,并在ansible-playbook运行时进行引用。

$ ansible-playbook -i hosts site.yml --vault-password-file /PATH/TO/.vault_password

这个也可以,但是如果你在ansible.cfg中的[defaults]部分进行如下配置,就不需要使用–vault-password-file选项了。

[defaults]
vault_password_file = /PATH/TO/.vault_password

只需将/PATH/TO/.vault_password在成员之间共享,就可以像平常一样使用ansible-playbook命令来执行。

一般情况下对加密文件进行的操作

现有文件的加密

也许使用 ansible-vault create 来创建新文件是更合适的做法,但在我的情况下,我通常在开发过程中不进行加密,而是在推送到代码库之前进行加密。

$ ansible-vault --vault-password-file /PATH/TO/.vault_password encrypt secret.yml

编辑加密文件

$ ansible-vault --vault-password-file /PATH/TO/.vault_password edit secret.yml

解密(个人很少使用)

$ ansible-vault --vault-password-file /PATH/TO/.vault_password decrypt secret.yml
广告
将在 10 秒后关闭
bannerAds