Como gerenciar as credenciais do MySQL do servidor de produção?

0

Eu tenho um aplicativo Django simples que precisa usar um banco de dados MySQL. Existe um arquivo settings.py que contém um dicionário Python simples onde eu tenho que inserir as credenciais do MySQL, se parece com isto:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django',
        'USER': 'django',
        'PASSWORD': 'django',
        'HOST': 'localhost',
     }
 }

No servidor (Debian) eu uso um checkout da última versão git do meu aplicativo. Nesse repositório do git, eu tenho uma filial production que contém as credenciais do banco de dados que eu escolhi para este servidor.

Agora, gostaria de automatizar completamente a implantação. Atualmente, eu uso o Ansible para fazer um

git checkout production
git pull origin master
service apache2 restart

que funciona. O problema é que essa correção de credencial do banco de dados está apenas no servidor. Eu prefiro muito mais esse patch centralmente.

  • Eu pensei que eu poderia deixar Ansible fazer a implantação da versão baunilha e, em seguida, usar Ansible para trocar a linha PASSWORD . A desvantagem é que a próxima execução do Ansible detectaria que o checkout foi alterado e refazer tudo, tornando-o ineficiente.

  • Então pensei em um pacote Debian para a coisa toda. Isso exigiria que as credenciais fossem colocadas no pacote, o que não posso fazer, pois o pacote será público (para usar um PPA do Launchpad).

De qualquer forma, eu provavelmente preciso ter as credenciais em algum local onde a implantação de baunilha encontraria isso, como /etc/myapp/db.ini .

O que é uma maneira razoável de fazer isso?

    
por Martin Ueding 18.11.2014 / 19:59

1 resposta

-1

O gerenciamento de segredos é um problema extremamente difícil. Você não quer nunca senhas em texto puro no código.

Existem algumas ferramentas para lidar com segredos, incluindo Ansible Vault, Hashicorp Vault e Keywhiz. Eu pessoalmente armazeno segredos no S3 usando o KMS para criptografia.

É um problema difícil com várias ferramentas surgindo para tentar resolvê-lo. Eu não presumo saber a melhor solução para você, mas aconselho a olhar para as várias ferramentas de gerenciamento de segredos e selecionar uma que atenda às suas necessidades.

    
por 23.08.2015 / 17:24