Ansible : Segurança com o Ansible Vault

Neste post será apresentado como utilizar o Ansible Vault para variáveis que guardam dados sensíveis (ex. chaves SSH, certificados SSL e  tokens API) .

 

1) Ambiente

10.0.0.90 Ansible server

10.0.0.91 Ansible client

 

Deixei no meu repositório Ansible a role que iremos utilizar neste post.

 

https://github.com/fabioabreureis/Ansible/tree/master/roles/adduser

 

2) Criando o ambiente

2.1) Criando a role

Em nosso teste será criado um playbook para incluir usuários no servidor cliente.

 


cd  /opt/ansible/playbooks/roles

mkdir -p adduser/{defaults,files,handlers,tasks,templates,vars}

 

Criando o arquivo main.yml dentro de /opt/ansible/roles/adduser/tasks

vim /opt/ansible/playbooks/roles/adduser/tasks/main.yml


---
- name: Create user
user:
name: linuxuser

- name: Change user password
shell: "echo {{ linuxuser }} | passwd linuxuser --stdin"

 

Criando o arquivo main.yml dentro de /opt/ansible/roles/adduser/vars

vim /opt/ansible/roles/adduser/vars/main.yml

---
linuxuser: redhat147

 

Encriptando o arquivo /opt/ansible/playbooks/roles/adduser/vars/main.yml

ansible-vault encrypt /opt/ansible/playbooks/roles/adduser/vars/main.yml
 

 

 

Verificando o arquivo

[root@devops-01 roles]# cat /opt/ansible/playbooks/roles/adduser/vars/main.yml
$ANSIBLE_VAULT;1.1;AES256
34386664343039393837313636633439613837303033393239666531383830333935356366666635
6266323066623434353137373930336265383734393534630a383833373863636236656231303262
32666138626438613966663831626239633931393030363235326433666639356361323139343066
3464636365616562660a303435393037333036666661303561656132663265393330326237396437
31363531633335646332363461386636306637316239383536663738323339353239
 

 

 

 

2.2) Outras ações com o ansible-vault

 

Descritpando  o arquivo

ansible-vault decrypt /opt/ansible/playbooks/roles/adduser/vars/main.yml

 

 

Editando   o arquivo

ansible-vault edit /opt/ansible/playbooks/roles/adduser/vars/main.yml

 

 

Encriptando apenas uma string

 ansible-vault encrypt_string

 

Com a string gerada podemos setar em um arquivo yml , exemplo :

Na string1 estamos aplicando o ansible-vault enquanto na string2 está apenas com texto plano.

string1: !vault |
 $ANSIBLE_VAULT;1.1;AES256
 62633437346432383964353931633830393564353564343632386461306161363734636234623536
 3039363132366163306161346534613930383262323639390a613435623563303135376166343362
 66316333316366386261396361653932356438613134663861663834326235633066633264383565
 3435303362346266640a396466346239343664613730383861366366633163376563333432326132
 6362

string2: teste

 

 

Podemos criar um arquivo com senha para encriptar e decriptar o  arquivo :

 

Criando o arquivo


echo "teste" > vaultpass

 

Decriptando o arquivo com o parâmetro –vaul-password-file

 

ansible-vault --vault-password-file=vaultpass edit /opt/ansible/playbooks/roles/adduser/vars/main.yml 

 

2.3) Criando o playbook

cd /opt/ansible/playbooks/roles/
vim adduser-playbook.yml

---
- name: Create user
user:
name: linuxuser

- name: Change user password
shell: "echo {{ linuxuser }} | passwd linuxuser --stdin"

 

 

Executando o playbook para o grupo linuxhosts com o parâmetro –ask-vault-pass para pedir a senha do arquivo com vault aplicado.

 ansible-playbook -i /etc/ansible/hosts --ask-vault-pass adduser-playbook.yml 

 

 

Validando a execução :

 

Acessando via ssh com o usuário criado pelo playbook

 

 

 

 

 

 

 

 

Referência

http://docs.ansible.com/ansible/latest/vault.html#rekeying-encrypted-files