Como usar o Ansible Vault para armazenar chaves secretas

Com a maioria da automação, as credenciais são necessárias para autenticar e usar recursos seguros. O que sempre foi um desafio é a melhor forma de armazenar essas credenciais com segurança. Ansible é um sistema de automação que fornece provisionamento de software, gerenciamento de configuração e implantações de aplicativos.
Como com qualquer sistema de automação, o Ansible precisa de uma maneira segura de armazenar segredos. No caso do Ansible, esse sistema é denominado Ansible Vault. O Ansible Vault oferece uma solução de plataforma cruzada para armazenar credenciais com segurança.
Apresentando o Ansible Vault
O Ansible Vault pode ser usado para criptografar qualquer arquivo ou variáveis de dentro de um manual. Por padrão, o AES é usado, uma criptografia baseada em segredo compartilhado. Os métodos de criptografia de arquivo e variável têm suas vantagens e desvantagens.
Criptografia de arquivo
Para criar um novo arquivo criptografado denominado secrets. yml, basta usar o seguinte comando ansible-vault.
ansible-vault criar secrets. yml
Depois de solicitar uma senha, o comando ansible-vault iniciará o editor de arquivos do sistema padrão, o que resultará em um arquivo criptografado ao salvar.
Publicidade
Da mesma forma, para criptografar um arquivo não criptografado anteriormente, use o seguinte comando ansible-vault. Observe que isso usa o parâmetro encrypt em vez do parâmetro create.
ansible-vault encrypt secrets. yml
A desvantagem de usar criptografia de arquivo é a legibilidade. Se você abrir o arquivo, verá que, sem descriptografar, é impossível decifrar o conteúdo.
Criptografia variável
Dentro de um manual, é possível usar uma variável criptografada precedendo os dados criptografados com a tag! vault. Executar o argumento encrypt_string do comando ansible_vault resultará em uma string criptografada que você pode usar em seus manuais.
ansible-vault encrypt_string 'secret_data' --nome 'my_secret'
Depois de solicitar uma senha, você obterá a seguinte string criptografada.
my_secret:! vault | $ ANSIBLE_VAULT; 1,1; AES256 37636561366636643464376336303466613062633537323632306566653533383833366462366662 6565353063303065303831323539656138653863353230620a653638643639333133306331336365 62373737623337616130386137373461306535383538373162316263386165376131623631323434 3866363862363335620a376466656164383032633338306162326639643635663936623939666238 3161
A criptografia variável é ótima para facilitar a leitura, mas a capacidade de usar recodificação de linha de comando é sacrificada ao usar esse método.
Usando o Ansible Vault na prática
Você pode perceber que usar o Ansible Vault na produção é um desafio. Para usar o Ansible Vault com eficácia, as técnicas a seguir tornam esse processo mais fácil.
- Descriptografia não solicitada
- Múltiplos cofres
- Nova digitação
Descriptografia não solicitada
Uma opção para descriptografar de forma transparente um arquivo ou variável ao usar o Ansible é armazenar a senha em um arquivo de senha protegido e sem versão. Para fazer referência a essa senha armazenada, basta passar o local do arquivo usando o parâmetro vault-password-file.
ansible-playbook --vault-password-file / path / vault-password-file secrets. yml
Publicidade
Isso irá descriptografar quaisquer arquivos criptografados incluídos ou variáveis usando a senha incluída.
É muito importante não enviar seu arquivo de senha em texto simples para o sistema de controle de versão. Da mesma forma, proteja este arquivo apenas para o usuário ou grupo que precisa acessar a senha armazenada no sistema de arquivos usando listas de controle de acesso (ACL &’ s).
Múltiplos Vaults
Embora seja conveniente ter um único cofre com todos os segredos criptografados, uma prática de segurança melhor é separar as credenciais seguras em cofres relevantes separados. Um exemplo disso seria separar um ambiente de produção e de desenvolvimento. Felizmente, o Ansible Vault nos permite criar vários cofres e referências que protegem os dados criptografados que vêm usando um rótulo.
ansible-vault create --vault-id prod @ prompt prod-secrets. yml
O código acima criará um cofre de produção e solicitará sua senha em tempo de execução (conforme observado pela string @prompt). Se você já tem um arquivo de senha que gostaria de usar, basta passar o caminho para o arquivo.
ansible-vault create --vault-id prod @ / path / prod-vault-password-file prod-secrets. yml
Digamos que desejamos criptografar a mesma variável my_secret, mas desta vez armazená-la em nosso arquivo de produção. Assim como antes, usar encrypt_string, mas com o vault-id relevante, permite o armazenamento do segredo no local especificado.
ansible-vault encrypt_string --vault-id prod @ / path / prod-vault-password-file 'secret_data' --name 'my_secret'
Publicidade
Você notará que após a string AES256, um novo trecho de texto, prod, é mostrado. Isso indica o cofre em que o texto criptografado está localizado.
my_secret:! vault | $ ANSIBLE_VAULT; 1,1; AES256; prod 37636561366636643464376336303466613062633537323632306566653533383833366462366662 6565353063303065303831323539656138653863353230620a653638643639333133306331336365 62373737623337616130386137373461306535383538373162316263386165376131623631323434 3866363862363335620a376466656164383032633338306162326639643635663936623939666238 3161
E se você quiser incluir vários cofres em um único manual? Você pode facilmente passar várias declarações de id de vault em uma linha de comando do ansible-playbook.
ansible-playbook --vault-id dev @ / path / dev-vault-password-file --vault-id prod @ / path / prod-vault-password-file site. yml
Rekeying
Finalmente, é importante repetir regularmente as suas senhas. Para arquivos criptografados, você pode usar a linha de comando abaixo. Passar o parâmetro new-vault-id facilita a alteração da senha com a qual os segredos são criptografados.
redigitação do ansible-vault --vault-id prod @ / path / prod-vault-password-file-old --new-vault-id prod @ / path / prod-vault-password-file-new site. yml
Conforme observado acima, a recriação de chaves de linha de comando não funciona para variáveis criptografadas. Nesse caso, você precisará criptografar novamente as strings individualmente e substituí-las em um determinado manual.
Práticas recomendadas
A segurança é difícil, especialmente quando se trata de usar segredos em sistemas de automação. Com isso em mente, a seguir estão várias práticas recomendadas para usar ao utilizar o Ansible Vault. Embora já tenhamos abordado alguns deles anteriormente, é prudente reiterar essas práticas.
- Arquivos de senha sem versão e protegidos por ACL Os arquivos de senha não devem ser armazenados em sistemas de controle de versão, como o GIT. Além disso, certifique-se de que apenas os usuários apropriados possam acessar o arquivo de senha.
- Vaults separadosNormalmente, muitos ambientes diferentes estão em uso. Portanto, é melhor separar as credenciais necessárias nos cofres apropriados.
- Arquivo regular e recriação de senha variável No caso de reutilização ou vazamento de senha, é melhor recodificar regularmente as senhas em uso para limitar a exposição.
Conclusão
Como em qualquer sistema de automação, é extremamente importante que os segredos sejam protegidos e controlados de maneira adequada. Com o Ansible Vault, esse processo é fácil e flexível. Usando as práticas recomendadas descritas acima, armazenar e usar segredos no Ansible é seguro e protegido.
Publicidade
Para estender o Ansible Vault ainda mais e levar este processo para o próximo nível, você pode usar scripts que se integram às soluções de gerenciamento de senha. Como você pode ver, o Ansible Vault é uma excelente maneira de usar os segredos dos manuais do Ansible.
Nenhum comentário