需求:

有些敏感的信息不易暴露,所以需要加密存储

机密的文件,在执行的时候加解密,如何实现

文档简介:

有两种更安全的方式来存储这类数据:

1.ansible的命令行工具ansible-vault可以加密和解密任何ansible使用的文件。

2.使用第三方的密钥管理服务来存储数据。

 

ansible-vault可以创建,编辑,加密,解密和查看文件。ansible vault可以加密任何ansible使用的文件,包含inventory变量,playbook中调用的变量文件,通过参数传递给playbook的变量文件,ansible-roles定义的变量文件。

 

ansible vault使用的是外部的Python工具实现的加密。文件使用AES256加密(对称加密算法),并且你需要提供一个密码作为加密密钥。

以下是官方文档中提到,目前支持的唯一加密算法AES256

ansible将本机压缩包解压到其他机器 ansible 解压_加解密

 

功能描述:

以下两种方法是需要密码文件的形式进行自动化执行的过程

相比密码交互式输入的方式,带来更多的便利,因此密码文件(秘钥)需要妥善保管,做好权限管理

playbook整体进行加解密

加解密密码文件

[root@ansible fang]# cat pwdfile

aaaa

对playbook加密命令

[root@ansible fang]# ansible-vault encrypt --vault-id pwdfile test1.yml        

Encryption successful

[root@ansible fang]# cat test1.yml

$ANSIBLE_VAULT;1.1;AES256

37663739346130326334396531333437323637393132383334313837366633336266343237313166

3965343434326664396163333562343133653736616331640a623337376439306539393031626532

31333263376639383831326561623035303063336438336431366338613566363334323431373764

3564623739323063360a326531366535303763373135316230393737313438313037626165653665

63323864633730613232396633346237313933393838343233613166623233303063656265396233

62613736353034623566393739333834623934396461643139353361356637653464613063613962

32633461303366363338646536623532626266646637616164303233343161663435653336313537

66353438643964393136353136353464663735323662633432633338613734376162353131623031

38623430376366383237333462396266663838666635663735663864646263616232633662346133

63363966393639376565623933656635636138323438346637326336353031616139366434313036

33353134313238623533633935386537613730656664366364333033663538333965373034346264

62636335336134663935316233663732343933643263646666366262626561343566343462326366

36633466376363323166663933343966386261373062613833306335376433313965623664633261

34613736343539616266643836336131643865636434373333316436303865363830323635333639

34636165643862316533343131633535643662386265646432646266386535393962383230376134

61393832343334346363

对playbook解密命令

[root@ansible fang]# ansible-vault decrypt --vault-id pwdfile test1.yml

Decryption successful

[root@ansible fang]# cat test1.yml

---

- hosts: 192.168.10.101

  remote_user: root

  gather_facts: no

  vars_files:

    - pwd.yml

  tasks:

    - name: display

      debug: msg={{item.name }} #| password_hash('sha512')}}

      with_items:

        - "{{ new}}"

[root@ansible fang]#

 

对playbook个别字段加解密

对密码加密:

Pwdfile密码文件的内容是aaaa

 

ansible-vault encrypt_string --vault-id pwdfile 123456

!vault |

          $ANSIBLE_VAULT;1.1;AES256

          33613964386634623533626636……………………

 

Playbook中的内容:

ansible将本机压缩包解压到其他机器 ansible 解压_加密算法_02

 

执行结果:

 

ansible将本机压缩包解压到其他机器 ansible 解压_加密算法_03

 

对ssh秘钥文件进行加解密:

以下是对秘钥文件进行加密的过程

配合执行以下Playbook进行验证加密后的执行情况

 

ansible将本机压缩包解压到其他机器 ansible 解压_ansible-vault_04

加密:

 

ansible将本机压缩包解压到其他机器 ansible 解压_加密算法_05

尝试执行playbook:

 

ansible将本机压缩包解压到其他机器 ansible 解压_加密算法_06

提示秘钥文件已经被加密,所以无法执行,需要解密

解密

 

ansible将本机压缩包解压到其他机器 ansible 解压_ansible-vault_07

尝试执行playbook:

执行成功, 并在受控端产生了常见的文件夹

ansible将本机压缩包解压到其他机器 ansible 解压_加密算法_08

 

总结:

Ansible的加解密,如果做到自动化执行,必须以密码文件的形势进行加解密操作

所以密码文件必须做好权限管理和严格的保存

加密的文件可以有多个, 目的是使敏感信息不泄露,比如ssh的秘钥管理

 

 

参考网址:https://blog.51cto.com/stuart/2299307?source=dra