Category: Ansible

Ansible Vault: Criptografando arquivos sensíveis

Ansible Vault: Criptografando arquivos sensíveis

A ideia desse post é ser breve porém falar sobre um importante mecanismo do ansible para quem precisa criptografar arquivos sensíveis contendo senhas ou chaves. Vamos falar do ansible vault.

Os comandos para o ansible vault são: create, decrypt, edit, encrypt, rekey, view

Abaixo estão alguns exemplos de utilização do ansible vault:

Para criar um novo arquivo criptografado:
ansible-vault create foo

Para criptografar um arquivo já existente:
ansible-vault encrypt foo

Para descriptografar um arquivo criptografado:
ansible-vault decrypt foo

Para editar um arquivo criptografado:
ansible-vault edit foo

Para alterar a senha de criptografia de um arquivo:
ansible-vault rekey foo

Para visualizar um arquivo criptografado:

ansible-vault view foo

Em um cenário real, isso é amplamente utilizado para mantermos a segurança de alguns arquivos contendo senhas de databases, por exemplo. Vou usar como exemplo a utilização do ansible vault na subida desse blog. Em uma das receitas utilizamos credenciais de acesso ao nosso banco de dados, para deixarmos essas senhas mais seguras, utilizamos o ansible vault da seguinte forma:

Criamos um arquivo dentro do diretório group_vars com variáveis contendo as credenciais de acesso ao nosso banco de dados (credentials);

Feito isso, criptografamos o arquivo utilizando
ansible-vaul encrypt credentials

Após concluído o processo de criptografia, basta fazer as chamadas das variáveis na main do playbook.

Na execução da receita existem algumas formas de especificar que você utilizou o ansible vault, uma delas é utilizar o parâmetro “–ask-vault-pass

ansible-playbook site.yml --ask-vault-pass

Esse método só é válido se todas as senhas de criptografias são iguais. Caso os arquivos foram criptografados com senhas diferentes você pode utilizar o parâmetro “–vault-password-file

ansible-playbook site.yml --vault-password-file ~/.vault_pass.txt

Nesse segundo método as senhas ficam especificadas em um arquivo local sendo interessante definir as permissões do arquivo por questões de segurança.

Esse é apenas um exemplo do que dá para ser feito com o ansible vault. Usem e adequem de acordo com sua necessidade.
Para mais informações acesse a documentação.

Espero que tenham gostado! Até mais =D

Criando um blog WordPress com Ansible

Criando um blog WordPress com Ansible

Olá pessoal! Sejam todos bem vindos ao primeiro post do nosso blog. Hoje vamos compartilhar com vocês como subir um blog WordPress usando uma receita Ansible, fazendo com que a subida de uma nova máquina para o ambiente seja feita de forma automática e consequentemente muito mais rápida e livre de erros.

Para começar, vou introduzir o que é o Ansible: uma ferramenta de código-livre que automatiza provisionamento de software, gerenciamento de configuração e deploy de aplicações. O Ansible é hoje usado em larga escala por grandes players do mercado para automatizar sua infraestrutura.

Uma grande vantagem do Ansible é que ele permite a configuração de hosts sem um agent local instalado. Tudo pode ser feito através de sua máquina local ou então de um servidor dedicado para rodar o Ansible.

Com isso dito, vamos começar a colocar a mão na massa!

Pré-Requisitos

  • Criação de uma instância EC2 na AWS (pode ser t2.micro para este lab) com a tag Name como meu_blog (explicaremos mais para frente porquê);
  • Criação de uma instância RDS MySQL na AWS (pode ser db.t2.micro para este lab);
  • Pacote do Ansible instalado localmente (siga esse link para instalar em seu SO);
  • Pacote awscli instalado e configurado localmente com Access Key ID e Secret Access Key (o mínimo de permissão necessária é EC2 read-only para fazer a leitura do inventário dinâmico).

Estrutura de diretórios

O Ansible possui uma estrutura de diretórios bem definida que ajuda a segmentar cada role para o deploy de sua configuração. As roles são divididas por serviço/pacote. Elas permitem manter a estrutura organizada para sabermos qual serviço será instalado e configurado em cada etapa. Por exemplo em nosso caso, para termos um WordPress rodando precisamos instalar e configurar o nginx, o banco (MySQL nesse caso), o php-fpm (responsável pela interpretação de códigos PHP), além do próprio WordPress. Cada uma dessas tarefas é dividida em roles, e quando rodamos a receita podemos definir qual será a ordem de execução delas.

Para podermos seguir com o tutorial, baixe ou clone esse repositório, que já contém a receita pronta, sendo apenas necessário a configuração de dados de acesso ao RDS.

Com o repositório baixado, vamos entender o seu conteúdo:

Diretório group_vars: nesse diretório podemos armazenar variáveis que serão utilizadas pelas receitas. No arquivo baixado você encontra as credenciais de acesso ao banco de dados do wordpress. Em um post futuro mostraremos como podemos criptografar esses dados para maior segurança utilizando o ansible-vault;

Diretório inventory: nesse diretório temos o arquivo que contém os hosts onde a receita rodará. É possível especificar os hosts por IP, nome de domínio, ou então através de um inventário dinâmico. Na instância EC2 que foi criada anteriormente, você deve ter incluído a tag Name como meu_blog. Agora, nesse arquivo hosts indicamos que o Ansible deve procurar por hosts que contenham a tag Name como meu_blog, e rodará a receita em todas as máquinas que atendam esse critério;

Diretório roles: contém cada role para cada serviço a ser configurado. Cada role contém sua estrutura de diretórios, que entre outras opções conterá o arquivo que será responsável por executar a receita dessa role e também os templates que serão usados em cada host;

Arquivo site.yml: arquivo responsável pela execução da receita.

Alterações necessárias para rodar a receita

Já com a receita baixada em sua máquina, serão necessárias algumas configurações para que ela rode corretamente. Teremos que mexer em dois arquivos apenas:

./group_vars/all

Esse arquivo contém variáveis que são usadas durante a execução da receita:

db_root: nome do usuário root que foi usado durante a criação do RDS;
db_root_pw: senha do usuário root que foi criado durante a criação do RDS;
db_host: endpoint do RDS
wp_db_name: nome do banco que o wordpress armazenará seus dados;
wp_db_user: usuário wordpress para acessar o banco;
wp_db_password: senha do usuário wordpress para acessar o banco.

./roles/wordpress/templates/wp-config.php

Nas linhas 23, 26, 29 e 32 deve-se alterar, respectivamente, para o conteúdo das variáveis wp_db_name, wp_db_user, wp_db_password db_host. Desse modo, os dados que forem carregados nas variáveis da receita, devem ser os mesmos dados que o arquivo de configuração do wordpress utilizará para acessar o banco posteriormente.

Rodando a receita

Feito isso, podemos rodar a receita. Em sua pasta raiz (isto é, onde temos o arquivo site.yml), rode o comando abaixo, substituindo o caminho da chave PEM usada na criação da instância EC2.

ansible-playbook é responsável pela execução das receitas. O atributo -i indica o arquivo que contém os hosts para rodar a receita e site.yml é o nome do arquivo que contém as chamadas de cada role.

Após o término da execução da receita você deve ter um WordPress rodando ao acessar o host através do browser.

Esse foi um post introdutório para começar a utilizar o Ansible. Há diversas opções que permitem personalizar ainda mais o deploy e tornar o processo adequado as suas necessidades.

Se ficou qualquer dúvida, não hesite em comentar abaixo ou então acessar a documentação.

Grande abraço e até mais!