Concrete Logo
Hamburger button

Ansible – Mantendo seus playbooks em segurança

  • Blog
  • 6 de Junho de 2016
Share

O Ansible chegou chutando a porta e mostrando que não veio de brincadeira. Em pouco tempo já é uma das ferramentas mais utilizadas por DevOps do mundo todo quando chega a hora de provisionar a infra como código.

Hoje vamos mostrar como utilizar o Ansible Vault, um recurso para criptografar arquivos de configuração.

Primeiro, vamos analisar o playbook a seguir:

Nada de muito avançado. Este playbook utiliza os módulos nativos do Ansible para instalar o MySQL Server, iniciar o serviço e criar uma base de dados com um usuário e senha específicos.

Parece que tudo funciona como planejado:

O playbook rodou. Vamos ver no host se o banco foi criado?

Ótimo, realmente funcionou. Só tem um problema: Este playbook gerencia a nossa infra como código, e como sabemos, código deve ser testado, avaliado, versionado e armazenado em um repositório remoto que garanta sua disponibilidade. Várias pessoas poderão ter acesso a este código. Parece uma boa ideia salvar o usuário e a senha do banco de dados no arquivo de playbook?

Vamos refazer nosso playbook de uma forma mais bacana. Para não perder nosso primeiro playbook – que apesar de inseguro, funciona bem – vamos salvá-lo com outro nome. Vamos também criar um arquivo no qual colocaremos nossas variáveis secretas:

Agora precisamos extrair do playbook.yml a seção de variáveis e colocá-la no arquivo my_secrets.yml, sem o vars:. No arquivo playbook.yml vamos colocar o vars_files: com o my_secrets exatamente onde ficava o bloco de variáveis.

Olha como fica:

Isso que fizemos é uma boa prática: separamos as variáveis da lógica principal do playbook, facilitando e encorajando a sua reutilização. Vamos ver se ainda funciona?

Funciona! Mas espera aí… não adiantou nada! Ainda conseguimos ver as senhas no arquivo my_secrets.yml. É neste momento que o Ansible Vault entra em cena.

Vamos criptografar o arquivo my_secrets.yml:

Olha que show! Depois de colocar uma senha de criptografia (por favor, que não seja 12345, OK?) temos um arquivo ilegível.

Resolvemos nosso problema, mas será que o Ansible ainda consegue executá-lo? Vejamos:

Por mil ouriços! De que adianta criptografar um arquivo se não posso mais utilizá-lo? Isso não faz sentido. Vamos olhar o help do Ansible:

Mexilhões! Agora tudo faz sentido! Como o Ansible poderia abrir o arquivo se só nós sabemos a senha? Vamos passar a senha para o Ansible na hora da execução:

Para editar o arquivo depois de criado também é muito fácil. Basta exportar a variável EDITOR com o seu editor de texto favorito. Depois disso é só executar o ansible-vault com o parâmetro edit e o nome do arquivo, colocar a senha e fazer as alterações necessárias. Veja:

kate

Sucesso! Traz lá uma cerveja gelada porque agora nossos playbooks estão em segurança \o/\o/\o/ Mas lembre-se: utilize sempre uma senha segura e avalie se há realmente a necessidade de colocar algo muito secreto em um arquivo público.

Dúvidas? Sugestões? Deixe seu comentário 😉

É DevOps e tem interesse em trabalhar com a gente? Acesse aqui.