Estou usando o ansible em um ambiente vagrant gerenciando uma caixa debian. Devido a vários provisionadores ansible com dados criptografados do cofre (por exemplo, senha raiz do banco de dados), tenho que inserir a senha do cofre uma vez pelo primeiro provisionador. Atualmente, essa senha é armazenada em /tmp
, lida por script em cada provisionador ansible e substituída /dev/null
e excluída pelo último provisionador.
O Ansible é capaz de chamar um script que retorna a senha do cofre. Portanto, este script será executado em um shell separado.
Se um invasor conseguir invadir a VM, ele terá a oportunidade de recuperar qualquer arquivo temporário e obter a senha do cofre.
Embora esses ambientes vagrant sejam usados na produção, estou procurando uma abordagem mais segura. O que primeiro me veio à mente é ler e escrever na memória de alguma forma. Portanto, uma reinicialização da VM limparia a memória. Eu sei que os dados mencionados podem de alguma forma ser trocados no disco. Mas acho que é mais difícil obter esses dados do que a abordagem de arquivo temporário.
Editar
Esqueci de mencionar o risco de segurança se um provisionador falhar. Em seguida, o último provisionador não será executado e o arquivo temporário permanecerá no sistema de arquivos.
Forneci uma resposta adicional mostrando a solução integrada apenas para quem estiver interessado na solução do problema de origem que levou a essa pergunta.
Para criar um disco de 1 MB de RAM usando
tmpfs
:O
ramfs
disco RAM não troca, mas a troca pode ser desativada e ativada durante o uso dotmpfs
disco RAM:swapoff -a
eswapon -a
, respectivamente, se for necessário garantir que nenhuma troca ocorreu durante o uso dotmpfs
disco RAM. Para desmontar:Talvez eu tenha perdido alguma coisa, mas não vejo o benefício de descrever o disco RAM em
/etc/fstab
; mas, se for necessário, algo como o seguinte deve ser suficiente para fazer com que o disco RAM fique disponívelroot
apenas para o usuário (mode=0700
):Além da resposta do @Christopher, gosto de mostrar como integrei a solução no meu Vagrantfile para que ela funcione com meu ansible povisioning.
Que alguém tropece nisso.
Vagrantfile
/vagrant/ansible/scripts/vault-password.sh
Embora seja uma VM Debian, primeiro executo o playbook
ansible
que adiciona o repositório ansible do Ubuntu e, em seguida, instalo o arquivoansible
. Isso é pelo menos necessário para fornecer o argumento--vault-id
aoansible-playbook
chamado de Vagrant. (No momento deste postDebian Stretch
vem comansible 2.2
o que não suporta esse argumento.)Em seguida, a senha do cofre é solicitada com a classe
AnsibleVaultPassword
. Otmpfs
será criado posteriormente e a senha será passada para o scriptvault-password.sh
para armazená-la notmpfs
mount.A senha será então solicitada pelo ansible por meio do script
vault-password.sh
em cada playbook que fornece dados criptografados do cofre.E no final a senha será excluída primeiro, depois a
tmpfs
montagem será desmontada.Eu acho que esta é uma solução muito segura para fornecer a senha do cofre ansible por meio de um armazenamento de memória temporário que pode ser apagado. Assim, um sistema em execução pode ser provisionado e uma reinicialização não é mais necessária.