1、为什么要加密
当在使用ansible时,会涉及到一些敏感性的文件的操作,但实际需求中,我们并不希望ansible的用户可以对该文件进行查看,故需要对一些文件在ansible的使用过程中加密,以保证系统资料的安全性。
2、如何加密
ansible中的加密工具:ansible-vualt
加密方式:ansible-vualt使用的加密方式是在python中集成的,而非自己的加密方式。
2.1 创建加密文件:
#创建加密文件,产生新文件
[root@contral min]# ansible-vault create secret.yml
New Vault password: ##输入该加密文件的密码
Confirm New Vault password:
#创建加密文件的同时,将密码保存
[root@contral min]# cat serpass ##用文件进行加密时,需将密码提前写入
linux
[root@contral min]# ansible-vault create --vault-password-file=serpass secretp.yml
【注】用问价加密时,文件中的字符串均为加密密码
2.2 对原有文件进行加密:
#对现有文件加密
[root@contral min]# ll
total 12
-rw-r--r--. 1 root root 0 Apr 12 03:04 new_file.yml ##对该文件加密
-rw-------. 1 root root 355 Apr 12 02:46 secretp.yml
-rw-------. 1 root root 355 Apr 12 02:43 secret.yml
-rw-r--r--. 1 root root 6 Apr 12 02:46 serpass
[root@contral min]# ansible-vault encrypt new_file.yml ##加密
New Vault password:
Confirm New Vault password:
Encryption successful
[root@contral min]#
可以同时对多个现有文件加密
#对多个文件进行加密
[root@contral min]# ansible-vault encrypt file1 file2 ##加密file1 file2
#通过加密文件,对其进行加密
[root@contral min]# ansible-vault encrypt old_file.ymml file.yml --vault-password-file=secpass
Encryption successful ##此时两个问价密码相同
3、编辑加密文件(edit)
加密文件的编辑原理:在加密时,打开编辑器,会临时创建新的文本,当编辑完该文本后,系统会自动将该文本内容追加到加密文本下,并删除临时创建的文本,达到加密的目的。
#编辑加密文本
[root@contral min]# ansible-vault view old_file.ymml
Vault password: ##输入密码通过认证
4、查看加密文件(view)
当使用普通文件查看时,是一堆乱码,只有使用正确的查看方式,通过认证,才可查看文件内容,
#查看加密文件
[root@contral min]# ansible-vault view old_file.ymml
Vault password: ##进行认证
this is a secert file
#普通方式查看
[root@contral min]# cat old_file.ymml
$ANSIBLE_VAULT;1.1;AES256
34393265393666326337393363336639643861316565333334313232393533303735386339626465
3439326439626165666638363030613235633763326638300a633964663561366464633134663766
63653765326535646464303933636531653362646264353934383030643538333531613135346230
3536326364313962340a646230633230396634653864633834613332653434383761373463383837
32636530323534656463643332336564346432366130646234373162393761646235
5、密码更新(rekey)
5.1 直接更新
#通过交互式界面更新
[root@contral min]# ansible-vault rekey old_file.ymml ##一次性可更新多个文件
Vault password: ##输入原密码
New Vault password: ##两次更新新密码
Confirm New Vault password:
Rekey successful ##完成更新
【注】虽然一次性可更新多个文件,但要求多文件密码必须相同,否则不能通过认证并更新。
5.2 通过文件更新
#通过文件进行密码更新
[root@contral min]# ansible-vault rekey --new-vault-password-file=secpass old_file.ymml
Vault password: ##输入原始认证密码
Rekey successful
【注】文件中的字符全为密码,且同时可更新多个原密码相同文件
6、加密文件的使用
6.1 提供交互式的使用方式(--vault-id @prompt)
#playbook加密时,未输入密码
[root@contral secert]#ansible-playbook user.yml
ERROR! Attempting to decrypt but no vault secrets found
#playbook加密时,输入错误密码
[root@contral secert]# ansible-playbook --vault-id @prompt user.yml
Vault password (default):
ERROR! Decryption failed (no vault secrets were found that could decrypt) on /etc/ansible/secert/user.yml
#playbook加密时,输入密码,通过认证
[root@contral secert]# ansible-playbook --vault-id @prompt user.yml
Vault password (default):
PLAY [Configure User] *****************************************************************
TASK [Gathering Facts] ****************************************************************
ok: [servera.linux.com]
....
6.2 提供自动询问方式 (--vault-password-file=passwordfile)
#通过文件的方式进行认证
[root@contral secert]# ansible-playbook --vault-password-file=passwd user.yml
PLAY [Configure User] *****************************************************************
TASK [Gathering Facts] ****************************************************************
ok: [servera.linux.com]
TASK [Linux user] *********************************************************************
ok: [servera.linux.com]
....
7、解密(decrypt)
#对加密文件解密
[root@contral secert]# ansible-vault decrypt user.yml
Vault password: ##输入认证
Decryption successful
[root@contral secert]# cat user.yml
---
- name: Configure User
hosts: servera.linux.com
tasks:
- name: Linux user
user:
name: linux
uid: 1000
state: present
...
解密时可保留原文件,并进行文件更名输出
#查看原加密文件
[root@contral secert]# cat sec.yml
$ANSIBLE_VAULT;1.1;AES256
64376331643766343164666266626539633961643135623234613235353765393838623765316363
3066613232383365366539623930326561326663643733340a333664363866636434393237616136
65333231616662643631656663343732343764386332316133663965646131396562313566636139
3863623737306461310a626537623332306335373636353539653135633465323330393365666135
6237
#解密文件,并重定向输出
[root@contral secert]# ansible-vault decrypt sec.yml --output=nopasswd
Vault password: #密码认证
Decryption successful
#查看解密文件
[root@contral secert]# cat nopasswd
asfawsfa
对于我们保存的密码文件,可以通过权限设置使其对普通用户不开放,从而提高安全性