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