Planejamos usar o cofre ansible em nosso projeto para evitar o vazamento de senhas ou chaves no git.
A idéia é colocar todos os nossos dados confidenciais em um arquivo simples e depois criptografá-lo com o ansible-vault usando uma senha antes de enviar para o git.
Para descriptografar o arquivo, temos que passar a senha do cofre para ansible, estou pensando em três possibilidades:
- Armazene-o dentro de uma variável de ambiente do servidor
- Passe-o como uma opção para o comando ansible-playbook
- Armazene-o em um arquivo sem versão.
Existe alguma outra opção, que é a melhor (e segura) maneira de armazenar a senha do ansible-vault, a documentação do ansible best practice não está dizendo nada sobre isso.
Respostas:
O significado de "todos" nesta frase deve ser analisado com muito cuidado antes de implementar a solução que você planeja.
O cofre Ansible é uma ferramenta muito útil, mas deve ser usada apenas para armazenar segredos que são:
O segundo ponto é crítico.
Muitas pessoas, e potencialmente toda a equipe do DevOps, terão acesso à senha do Ansible Vault e, portanto, a todos os segredos.
Portanto, para todos os segredos armazenados no cofre, deve-se manter uma condição para a qual uma pessoa ou máquina com acesso não autorizado a eles deve ser incapaz de usá-los, se assim o desejar.
Em termos concretos, se você usar o ansible para implantar um banco de dados e seus usuários, poderá armazenar as senhas no cofre, mas terá que ter muito cuidado (e provavelmente considerar outra solução) se esse serviço estiver disponível na Internet e sem a necessidade de autenticação VPN!
Os usuários (DevOps) expostos ao segredo devem ser incapazes de usar senhas "lembradas" se uma barreira de segurança lhes for imposta (por exemplo, o acesso VPN revogado). Além disso, o acesso ao repositório de código-fonte (onde o cofre está armazenado) também deve ser revogado antes que as senhas sejam alteradas.
Sob essas condições, o cofre ansible é uma ferramenta muito útil.
Tentar armazenar um segredo que pudesse ser usado por qualquer pessoa ou máquina na Internet no cofre seria um erro (por exemplo, credenciais de VPN dos usuários).
Nas condições do parágrafo anterior, acho que uma boa prática seria:
Mantenha uma convenção para usar segredos ! Você não poderá revisar alterações nos segredos e não poderá grep para variáveis ansible nos arquivos de segredos! Portanto, seja cuidadoso desde o início. Uma boa convenção é nomear todas as variáveis armazenadas no cofre ansible com um
secret_
prefixo. Quando você verá algo como:postgres.yml:
você saberá que o valor é armazenado no cofre ansible.
fonte
Como você ainda não implementou nada, você pode reconsiderar isso. O uso de um sistema como o Ansible Vault possui várias desvantagens de segurança:
Um sistema potencialmente muito mais seguro, embora mais complexo, que não tenha essas desvantagens é usar o Hashicorp Vault para armazenar seus segredos. Você ainda pode extrair valores dele quase tão facilmente quanto no Ansible vault usando https://github.com/jhaals/ansible-vault .
Você precisa gerenciar a autenticação no Hashicorp Vault, no entanto, e essa é a questão da tartaruga . Para humanos, acho que a melhor solução é solicitar uma senha periodicamente e expirar o token após um curto período de tempo; para máquinas, use o back - end de autenticação da AWS ou similar. Você nunca pode se livrar totalmente da necessidade de autenticação em algum lugar, mas pode dificultar o acesso de um invasor a ela.
Agora, se configurar e administrar um servidor secreto é demais para você, certamente você pode usar o Ansible Vault. Por que armazenar a senha em todas as máquinas individuais? Para uso interativo, basta solicitar a senha e os usuários podem armazená-la no gerenciador de senhas de sua escolha. O iTerm no OS X possui um gerenciador de senhas que se integra ao Keychain.app que torna isso particularmente fácil por lá.
fonte
Isso vai muito para quais políticas internas você possui ao lidar com dados confidenciais.
Gostaria de contar minha abordagem e explicar o que vejo como prós e contras. Eu mantenho a senha do Ansible Vault em um arquivo na máquina de controle e tenho uma variável de ambiente apontando para ela:
Tenho isso na minha estação de trabalho (como preciso testar e desenvolver playbooks), alguns colegas também o têm e, é claro, o temos na máquina de controle Ansible principal.
Prós:
Contras:
Os contras têm mitigações, mas, novamente, depende das políticas e regras que você adotou nas operações do dia a dia.
fonte
Dê uma olhada neste projeto para gerenciar suas senhas de criptografia de cofre ansible https://github.com/Smile-SA/ansible-vault-manager
Ele lida com várias plataformas de armazenamento de chaveiros com plug-ins (por enquanto, apenas o AWS SSM implementado). Além disso, a integração com um projeto Ansible atual é muito fácil ...
fonte