目录
Ansible是很火的一个自动化部署工具,在ansible控制节点内,存放着当前环境服务的所有服务的配置信息,其中自然也包括一些敏感的信息,例如明文密码、IP地址等等。
从安全角度来讲,这些敏感数据的文件不应该以明文的形式存在。
Ansible官方已经考虑到了这种情况,当我们的playbook中含有不能明文展示的文本时,ansible通过命令行「ansible-vault」给你目标文件/字符串进行加密。在执行playbook时,通过指定相应参数来给目标文件解密,从而实现ansible vault的功能。
ansible可以加密任何部署相关的文件数据,例如:
主机/组变量等所有的变量文件
tasks、hanlders等所有的playbook文件
命令行导入的文件(eg : -e @file.yaml ,-e @file.json)
copy,template的模块里src参数所使用的文件,甚至是二进制文件。
playbook里用到的某个字符串参数也可以加密(Ansible>=2.3
————————————————
那究竟应该如何操作呢?先来看看命令上的常规操作:
以下示范以Ansible的hosts主机列表文件为例:
1.创建加密文件
ansible-vault create hosts
2.使用密码文件创建
ansible-vault create --vault-password-file=vault-pass hosts
3.给现有文件加密
ansible-vault encrypt hosts
4. 编辑加密文件
ansible-vault edit hosts
# 这个命令会将该文件解密,并放到一个临时文件,编辑完后再保存到原文件。
5. 查看加密文件
ansible-vault view hosts
# 一行命令可以查看多个加密文件。
6. 更改密码
ansible-vault rekey hosts
# 先交互式输入旧的密码,然后再交互式输入两次新密码,即更改密码成功。
7. 取消加密(解密)
ansible-vault decrypt hosts
# 交互式输入密码,即取消加密成功。
8. playbook与ansible vault
ansible执行playbook时,可以通过交互式或指定密码文件的方式来解密文件。
- 交互式
执行playbook时在终端以交互式的形式输入密码,示例:
ansible-playbook --ask-vault-pass site.yaml
- 指定密码文件
另外一种使用方式,是将密码放在某个文件(password)内,执行playbook时,通过指定该密码文件进行解密。
可以使用「–vault-password-flie」参数:
ansible-playbook --vault-password-file=password site.yaml
注:
从ansible2.4版本开始,官方不再推荐使用”–vault-password-file”选项,官方开始推荐使用”–vault-id”选项代替”–vault-password-file”选项指定密码文件,也就是说,如下两条命令的效果是一样的。(推荐使用,不代表不能使用。_)
ansible-vault decrypt --vault-id=passwordfile site.yaml
ansible-vault decrypt --vault-password-file=passwordfile site.yaml
# 可不写等于号的,即 --vault-id passwordfile & --vault-password-file passwordfile