天天看点

Ansible下的机密文件管理

1、为什么要加密

当在使用ansible时,会涉及到一些敏感性的文件的操作,但实际需求中,我们并不希望ansible的用户可以对该文件进行查看,故需要对一些文件在ansible的使用过程中加密,以保证系统资料的安全性。

2、如何加密

ansible中的加密工具:ansible-vualt

加密方式:ansible-vualt使用的加密方式是在python中集成的,而非自己的加密方式。

2.1 创建加密文件:

#创建加密文件,产生新文件

[[email protected] min]# ansible-vault create secret.yml
New Vault password:                    ##输入该加密文件的密码
Confirm New Vault password: 

#创建加密文件的同时,将密码保存

[[email protected] min]# cat serpass  ##用文件进行加密时,需将密码提前写入
linux
[[email protected] min]# ansible-vault create --vault-password-file=serpass secretp.yml
           

【注】用问价加密时,文件中的字符串均为加密密码

2.2 对原有文件进行加密:

#对现有文件加密
[[email protected] 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
[[email protected] min]# ansible-vault encrypt new_file.yml  ##加密
New Vault password: 
Confirm New Vault password: 
Encryption successful
[[email protected] min]# 
           

可以同时对多个现有文件加密

#对多个文件进行加密
[[email protected] min]# ansible-vault encrypt file1 file2  ##加密file1 file2

#通过加密文件,对其进行加密
[[email protected] min]# ansible-vault  encrypt old_file.ymml file.yml --vault-password-file=secpass
 Encryption successful  ##此时两个问价密码相同

           

3、编辑加密文件(edit)

加密文件的编辑原理:在加密时,打开编辑器,会临时创建新的文本,当编辑完该文本后,系统会自动将该文本内容追加到加密文本下,并删除临时创建的文本,达到加密的目的。

#编辑加密文本
[[email protected] min]# ansible-vault view old_file.ymml 
Vault password:               ##输入密码通过认证
 
           

4、查看加密文件(view)

当使用普通文件查看时,是一堆乱码,只有使用正确的查看方式,通过认证,才可查看文件内容,

#查看加密文件
[[email protected] min]# ansible-vault view old_file.ymml  
Vault password:                       ##进行认证
this is a secert file

#普通方式查看
[[email protected] min]# cat old_file.ymml 
$ANSIBLE_VAULT;1.1;AES256
34393265393666326337393363336639643861316565333334313232393533303735386339626465
3439326439626165666638363030613235633763326638300a633964663561366464633134663766
63653765326535646464303933636531653362646264353934383030643538333531613135346230
3536326364313962340a646230633230396634653864633834613332653434383761373463383837
32636530323534656463643332336564346432366130646234373162393761646235
           

5、密码更新(rekey)

5.1 直接更新

#通过交互式界面更新
[[email protected] min]# ansible-vault rekey old_file.ymml  ##一次性可更新多个文件
Vault password:                ##输入原密码
New Vault password:            ##两次更新新密码
Confirm New Vault password: 
Rekey successful               ##完成更新
           

 【注】虽然一次性可更新多个文件,但要求多文件密码必须相同,否则不能通过认证并更新。

5.2 通过文件更新

#通过文件进行密码更新
[[email protected] min]# ansible-vault rekey --new-vault-password-file=secpass old_file.ymml 
Vault password:    ##输入原始认证密码
Rekey successful
           

 【注】文件中的字符全为密码,且同时可更新多个原密码相同文件

6、加密文件的使用

6.1 提供交互式的使用方式(--vault-id @prompt)

#playbook加密时,未输入密码
[[email protected] secert]#ansible-playbook user.yml 
ERROR! Attempting to decrypt but no vault secrets found

#playbook加密时,输入错误密码
[[email protected] 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加密时,输入密码,通过认证
[[email protected] 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)

#通过文件的方式进行认证
[[email protected] 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)

#对加密文件解密
[[email protected] secert]# ansible-vault decrypt user.yml 
Vault password:        ##输入认证
Decryption successful
[[email protected] secert]# cat user.yml 
---
- name: Configure User
  hosts: servera.linux.com      
  tasks:
    - name: Linux user
      user:
        name: linux
        uid: 1000
        state: present
...

           

解密时可保留原文件,并进行文件更名输出

#查看原加密文件
[[email protected] secert]# cat sec.yml 
$ANSIBLE_VAULT;1.1;AES256
64376331643766343164666266626539633961643135623234613235353765393838623765316363
3066613232383365366539623930326561326663643733340a333664363866636434393237616136
65333231616662643631656663343732343764386332316133663965646131396562313566636139
3863623737306461310a626537623332306335373636353539653135633465323330393365666135
6237

#解密文件,并重定向输出
[[email protected] secert]# ansible-vault decrypt sec.yml --output=nopasswd
Vault password:        #密码认证
Decryption successful

#查看解密文件
[[email protected] secert]# cat nopasswd 
asfawsfa

           
对于我们保存的密码文件,可以通过权限设置使其对普通用户不开放,从而提高安全性

继续阅读