Portuguese Language
Manter seus segredos longe de mãos erradas é uma prioridade máxima. Mas como exatamente você protege seus segredos? Salvá-los em um arquivo de texto local? Sem criptografia, essa opção é muito arriscada. Por que não usar o Ansible Vault para criptografar suas variáveis e arquivos?
Neste tutorial, você aprenderá como proteger conteúdo sensível, como suas senhas ou chaves, com o Ansible Vault.
Continue lendo e mantenha olhares curiosos longe de seus segredos!
Pré-requisitos
Este tutorial será uma demonstração prática. Se você quiser acompanhar, certifique-se de ter o seguinte.
- A Linux machine – This tutorial uses Ubuntu 20.04, but any Linux distribution will work.
- O Ansible instalado em sua máquina.
Configurando o Editor Padrão do Ansible Vault
Como administrador do sistema, você pode estar trabalhando em vários playbooks do Ansible contendo nomes de usuário e senhas de diferentes servidores. Você não pode enviar esses arquivos para o sistema de controle de versão em formato de texto simples porque não é seguro. E por esse motivo, o Ansible Vault é útil.
O Ansible Vault é projetado para ser integrado ao seu fluxo de trabalho existente para armazenar seus dados em um arquivo criptografado. Mas antes de criar seu primeiro Ansible Vault, você terá que definir o editor padrão do Ansible Vault.
1. Abra o terminal e faça SSH para sua máquina.
2. Em seguida, abra o arquivo ~/.bashrc usando um editor de texto. O arquivo ~/.bashrc é um script de shell que é executado sempre que uma nova sessão do terminal é iniciada. Este script de shell inicializa uma sessão de shell interativa e define variáveis de ambiente.
3. Adicione a seguinte linha ao final do arquivo ~/.bashrc, salve as alterações e saia do editor.
Esta linha define a variável EDITOR para o usuário atualmente conectado. A variável EDITOR garante que seu editor de texto preferido seja usado sempre que você abrir uma nova sessão do terminal.
Você pode definir qualquer outro editor de texto que preferir, mas este tutorial usa o editor de texto nano.

4. Por fim, execute os seguintes comandos para aplicar as alterações (source) sem fazer logout e login novamente, e imprima (echo) o editor de texto padrão atual do seu sistema.
Verifique se a variável EDITOR está definida para o seu editor preferido, como mostrado abaixo.

Criando e Criptografando Seu Primeiro Ansible Vault
Você definiu o editor padrão do seu cofre, então é hora de criar o seu primeiro cofre. Você vai criar e criptografar um arquivo que contém informações sensíveis, como nomes de usuário, senhas, chaves de acesso secreto, etc.
Você vai executar o comando ansible-vault, a principal interface para interagir com os Cofres do Ansible.
1. Execute o seguinte comando para criar o arquivo secret.yml. O Ansible usa o formato YAML, mais legível para humanos em comparação com outros formatos de dados como o JSON.
Você será solicitado a inserir e confirmar uma senha para o arquivo. Você usará essa senha para criptografar e descriptografar o arquivo secret.yml posteriormente, então certifique-se de escolher uma senha forte que você possa lembrar.

2. Após definir a senha do cofre, o seu editor de texto padrão abrirá um arquivo vazio. Insira as informações sensíveis que você deseja armazenar no arquivo, salve e feche o editor.
Este tutorial armazena as variáveis aws_access_key e aws_secret_key no arquivo secret.yml. Neste ponto, o Ansible criptografa o arquivo secret.yml, e mais ninguém pode ler o conteúdo do cofre a menos que saibam a senha do cofre.

3. Execute o comando cat para tentar visualizar o conteúdo do arquivo secret.yml sem a senha.
Pode verificar o conteúdo do arquivo está criptografado se você ver números aleatórios, como mostrado abaixo. O cabeçalho $ANSIBLE_VAULT;1.1;AES256 no topo do arquivo indica que o arquivo está criptografado com o Ansible Vault usando o cifra AES256.
O Padrão Avançado de Criptografia (AES) é um algoritmo de chave simétrica que utiliza a mesma chave para criptografar e descriptografar dados.

Como Criptografar Arquivos Existentes
Você criou um arquivo do zero que é automaticamente criptografado. Mas e quanto à criptografia de arquivos existentes? O Ansible também oferece o subcomando encrypt para criptografar um arquivo especificado. Para ver como criptografar um arquivo existente, você criptografará um arquivo específico que contém variáveis do Ansible.
Execute o seguinte comando para criptografar um arquivo (vars.yml
).
Assim como quando você criou o arquivo secret.yml pela primeira vez, você será solicitado a fornecer uma senha para o arquivo vars.yml.
O editor padrão não será aberto desta vez porque o arquivo vars.yml já existe. Em vez disso, você receberá a mensagem Encriptação bem-sucedida indicando que o Ansible criptografou o arquivo, como mostrado abaixo.

Agora, execute o comando cat abaixo para verificar se o Ansible criptografou o arquivo vars.yml.

Descriptografando Dados do Ansible Vault
Você viu como criptografar arquivos, tornando-os seguros. Mas quando você precisa visualizar o conteúdo de seus arquivos, como você os descriptografa? Descriptografar um arquivo é útil quando você deseja editar um arquivo criptografado ou ler seu conteúdo sem fornecer a senha toda vez. E o subcomando decrypt do Ansible será útil.
1. Execute o seguinte comando para descriptografar o arquivo secret.yml.
O subcomando decrypt aceita o caminho de um arquivo criptografado como seu único argumento.
Forneca a senha para o arquivo, e o conteúdo do arquivo será descriptografado e escrito no disco em texto simples.

2. Em seguida, execute o comando cat para visualizar o conteúdo descriptografado do arquivo secret.yml.
Você pode ver abaixo o conteúdo do arquivo secret.yml impresso no terminal sem qualquer criptografia. Neste ponto, você pode adicionar, editar ou excluir qualquer linha no arquivo conforme desejar.

3. Por último, execute o comando abaixo para criptografar o arquivo secret.yml e forneça uma senha para manter o conteúdo do arquivo seguro.

Atualizando a Senha do Vault do Ansible
Você viu que precisa inserir uma senha cada vez que criptografa e descriptografa arquivos. Mas talvez você queira apenas atualizar a senha do arquivo sem descriptografá-lo. Se for o caso, você precisará usar o subcomando rekey
. Este subcomando permite que você altere a senha do seu arquivo à vontade.
Execute o seguinte comando para atualizar a senha do arquivo secret.yml
.
O subcomando rekey recebe o caminho de um arquivo criptografado como seu único argumento.
Fornecer a senha atual para o arquivo seguida da nova senha, como mostrado abaixo.
Neste ponto, a senha antiga não funcionará mais para descriptografar o arquivo.

Agora, execute o comando abaixo para tentar descriptografar o secret.yml
.
Fornecer a senha antiga quando solicitado e você verá uma mensagem de erro dizendo que a Descriptografia falhou, como mostrado abaixo. Esta saída confirma que a senha para o arquivo foi atualizada com sucesso.

Usando Dados Seguros em Playbooks e Módulos
Você viu que executar comandos para criptografar e descriptografar arquivos funciona. Mas se você planeja automatizar o processo com segurança para sua aplicação, precisará usar playbooks e módulos.
1. Abra o arquivo de configuração do Ansible (~/.ansible.cfg) em seu editor, que contém as configurações para o Ansible.
Copie e cole o seguinte código no final do arquivo ~/.ansible.cfg, salve as alterações e feche o editor. Este código indica ao Ansible para procurar pelo arquivo de inventário (~/.ansible-hosts).
2. Em seguida, abra o arquivo ~/.ansible-hosts, que contém o inventário de hosts que seu nó de gerenciamento Ansible pode gerenciar.
Preencha o arquivo ~/.ansible-hosts com a seguinte linha de código, salve as alterações e feche o arquivo. Este código indica ao Ansible que ele pode gerenciar o localhost via o tipo de conexão local.
3. Execute o comando abaixo para criar um novo arquivo criptografado. Você pode nomear o arquivo como quiser, mas o arquivo é nomeado helloworld.yml neste tutorial.

Popule o código abaixo para o arquivo helloworld.yml, salve as alterações e feche o editor.
Este código é um playbook básico do Ansible que imprime a mensagem hello world em todos os hosts em seu inventário. O símbolo — no topo do bloco de código denota o início de um documento YAML.
4. Por fim, execute o comando ansible-playbook abaixo seguido das opções -ask-vault-pass para executar o playbook helloworld.yml em todos os hosts do seu inventário.
Forneca a senha para o arquivo helloworld.yml quando solicitado. Como você pode ver abaixo, a execução do seu playbook foi bem-sucedida.
- ok=2 – indica que ambas as suas tarefas foram executadas com sucesso.
- changed=1 – indica que sua tarefa fez uma alteração no estado do seu sistema. Neste caso, escreveu uma mensagem hello world no shell.
- unreachable e failed são ambos 0 – indica que nenhum host estava inacessível ou falhou durante a execução.

Usando o Ansible Vault com um Arquivo de Senha
Embora inserir manualmente uma senha ao executar tarefas pontuais funcione, não é prático para uso no mundo real.
A better way to provide the password for encrypting and decrypting files is to use a password file. This way, you can store the password in a secure location, and Ansible will read the password from the file needed.
1. Execute o comando abaixo para armazenar a senha do Ansible Vault em um arquivo chamado .vault_pass. Substitua my_vault_password pela sua senha real do vault.
2. Em seguida, execute cada comando abaixo para alterar a propriedade (chown) do arquivo para root e alterar as permissões do arquivo .vault_pass. Esses comandos garantem que apenas você (o usuário root) possa ler e escrever no arquivo.
3. Por fim, execute o comando ansible-playbook abaixo, seguido da opção –vault-password-file para executar um playbook (helloworld.yml) usando um arquivo de senha (.vault_pass).
Observe abaixo que o Ansible executou o playbook sem solicitar a senha do arquivo criptografado.

Conclusão
Neste tutorial, você aprendeu como usar o Ansible Vault para criptografar e descriptografar dados sensíveis para playbooks e tarefas do Ansible. Você armazenou a senha do Ansible Vault em um local seguro usando um arquivo de senha. Esse comportamento é útil para reduzir a intervenção do usuário ao executar um playbook.
Com esse conhecimento recém-adquirido, agora você pode criptografar dados sensíveis com confiança e compartilhar seus playbooks com outros sem se preocupar com a segurança de seus dados.
Se você usa o LastPass para gerenciamento de senhas, por que não armazenar sua senha do Ansible Vault no LastPass e fazer com que o Ansible a recupere automaticamente quando necessário?