Manter seus segredos longe das 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 senhas ou chaves, com o Ansible Vault.
Leia adiante e mantenha olhos curiosos longe de seus segredos!
Pré-requisitos
Este tutorial será uma demonstração prática. Se você deseja 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 de sistemas, 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 isso não é seguro. E é por isso que o Ansible Vault é útil.
O Ansible Vault foi 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 configurar o editor padrão do Ansible Vault.
1. Abra o terminal e faça SSH para a 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 terminal é iniciada. Este script de shell inicializa uma sessão interativa de shell 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 utilizado sempre que você abrir uma nova sessão terminal.
Você pode configurar qualquer outro editor de texto que preferir, mas este tutorial utiliza o editor de texto nano.

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

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

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

3. Execute o comando cat para tentar visualizar o conteúdo do arquivo secret.yml sem a senha.
Podes verificar o conteúdo do ficheiro está encriptado se vires números aleatórios, como mostrado abaixo. O cabeçalho $ANSIBLE_VAULT;1.1;AES256 no topo do ficheiro indica que o ficheiro está encriptado com o Ansible Vault usando o cifrão AES256.
O Padrão de Encriptação Avançada (AES) é um algoritmo de chave simétrica que usa a mesma chave para encriptar e desencriptar dados.

Encriptar Ficheiros Existentes
Criaste um ficheiro do zero que é automaticamente encriptado. Mas e quanto à encriptação de ficheiros existentes? O Ansible também oferece o sub-comando encrypt para encriptar um ficheiro específico. Para ver como encriptar um ficheiro existente, vais encriptar um ficheiro específico que contém variáveis do Ansible.
Executa o seguinte comando para encriptar um ficheiro (vars.yml
).
Tal como quando criaste o ficheiro secret.yml pela primeira vez, ser-te-á pedido para forneceres uma palavra-passe para o ficheiro vars.yml.
O editor padrão não abrirá desta vez porque o ficheiro vars.yml já existe. Em vez disso, receberás a mensagem Encriptação bem-sucedida, indicando que o Ansible encriptou o ficheiro, como mostrado abaixo.

Agora, executa o comando cat abaixo para verificar se o Ansible encriptou o ficheiro vars.yml.

Desencriptar Dados do Ansible Vault
Você viu como criptografar arquivos, tornando-os seguros. Mas quando você precisa visualizar o conteúdo de seus arquivos, como descriptografá-los? 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 de descriptografia recebe o caminho de um arquivo criptografado como ú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 nenhuma criptografia. Neste ponto, você pode adicionar, editar ou excluir qualquer linha no arquivo conforme desejar.

3. Por fim, 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 Ansible Vault
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 conforme desejar.
Execute o seguinte comando para atualizar a senha do arquivo secret.yml
.
O sub-comando rekey recebe o caminho de um arquivo criptografado como seu único argumento.
Fornecer a senha atual do 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 de forma segura para sua aplicação, você 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 diz ao Ansible para procurar o 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 diz 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 neste tutorial, o arquivo é chamado de helloworld.yml.

Popule o código abaixo no arquivo helloworld.yml, salve as alterações e feche o editor.
Este código é um playbook básico do Ansible que imprime a mensagem de olá mundo 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 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 de olá mundo no terminal.
- unreachable e failed ambos são 0 – indica que nenhum host ficou 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 menos 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 outras pessoas sem se preocupar com a segurança de seus dados.
Se você usa o LastPass para gerenciar senhas, por que não armazenar a senha do seu Ansible Vault no LastPass e permitir que o Ansible a recupere automaticamente quando necessário?