Ansible Vault 加密敏感数据
加密与解密文件
为了配置被管理主机,Ansible可能会使用一些敏感数据,比如密码、Key等,通常来说这数据信息会以明文的形式保存在inventory文件或者ansible文件中,这样任何用户访问这些文件,都能看到这些数据,非常不安全。
Ansible使用ansible-vault命令创建、编辑、加密、解密和查看文件。
常用操作:
- encrypt(加密)
- decrypt(解密)
- view(查看)
代码示意如下:
# 新建测试文件
[root@pubserver ansible]# echo "Hi ni hao gou zi" > hello.txt
[root@pubserver ansible]# cat hello.txt
Hi ni hao gou zi
# 加密文件
[root@pubserver ansible]# ansible-vault encrypt hello.txt
New Vault password: 123456
Confirm New Vault password: 123456
Encryption successful
# 查看加密内容
[root@pubserver ansible]# cat hello.txt
$ANSIBLE_VAULT;1.1;AES256
32363533386462353339373264303438396664303137656462363563373461356662383631336436
6632646264636432613932353764626531646161313265660a396530356332613833656361343730
63323361366331396361623738613561626261356561313032363661353530343766646130616265
6532666631386661650a326439633066383237613139306566396531346339353035393864313233
33356632623434616661333431666635666232663433303034616532646333323736
# 通过密码,查看文件内容
[root@pubserver ansible]# ansible-vault view hello.txt
Vault password: 123456
Hi ni hao gou zi
# 解密文件
[root@pubserver ansible]# ansible-vault decrypt hello.txt
Vault password: 123456
Decryption successful
[root@pubserver ansible]# cat hello.txt
Hi ni hao gou zi
修改密码
ansible-vault rekey可以修改加密的密码,代码示意如下:
# 加密文件
[root@pubserver ansible]# ansible-vault encrypt hello.txt
New Vault password: 123456
Confirm New Vault password: 123456
Encryption successful
[root@pubserver ansible]# cat hello.txt
$ANSIBLE_VAULT;1.1;AES256
38366337376462393130396365396331366564656232623933613534396130306265656530316337
6161326262323563356532383661663833393036666464320a366631313963373161666135643630
32633065356532353766346264653936623532373230313236336237356362353463306230353265
3238663532316162340a303461303666316539383639616134343962623332613433306135656461
62323161323132343565626463303036393536663766316636353737326234626137
# 修改密码
[root@pubserver ansible]# ansible-vault rekey hello.txt
Vault password: 123456
New Vault password: abcde
Confirm New Vault password: abcde
Rekey successful
密码文件
加密、解密每次都输入密码很麻烦,可以使用密码文件进行加密解密,代码示意如下:
# 将密码写入文件
[root@pubserver ansible]# echo "lzlzyt" > pass.txt
# 创建明文文件
[root@pubserver ansible]# echo "hello zyttt" > data.txt
# 使用pass.txt中的内容作为密码加密文件
[root@pubserver ansible]# ansible-vault encrypt --vault-id=pass.txt data.txt
Encryption successful
# 查看文件内容
[root@pubserver ansible]# cat data.txt
$ANSIBLE_VAULT;1.1;AES256
64626562393863353439633062333034393135326465323562316466633734393639333166313462
3562393235333139343362396632353463323565616132640a656662646439633961343631656530
66363436353231316437643064633066383132613931346432343131666264313834343538646633
3033333839396335640a626165623164336633626663303530363166363337623732393934343562
6162
# 使用pass.txt中的内容作为密码解密文件
[root@pubserver ansible]# ansible-vault decrypt --vault-id=pass.txt data.txt
Decryption successful
# 查看文件
[root@pubserver ansible]# cat data.txt
hello zyttt
执行加密的playbook
使用Ansible管理远程主机,存储敏感数据时(如文件中包含密码)应该将其加密,代码示意如下:
1、编写有密码的playbook
[root@pubserver ansible]# vim user_ztt.yml
---
- name: create a user
hosts: webservers
tasks:
- name: create user ztt
user:
name: ztt
password: "{{'123'|password_hash('sha512')}}"
2、加密playbook
[root@pubserver ansible]# ansible-vault encrypt user_ztt.yml
New Vault password: 12345
Confirm New Vault password: 123456
Encryption successful
3、直接执行playbook,会报错
[root@pubserver ansible]# ansible-playbook user_ztt.yml
ERROR! Attempting to decrypt but no vault secrets found
4、使用 --ask-vault-password 选项,执行时输入加密密码
[root@pubserver ansible]# ansible-playbook --ask-vault-pass user_ztt.yml
Vault password: 123456