У меня есть простое приложение Django, которое должно использовать базу данных MySQL. Существует файл settings.py который содержит простой словарь Python, в который я должен ввести учетные данные MySQL, он выглядит так:

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

На сервере (Debian) я использую извлечение последней git-версии моего приложения. В этом git-репо у меня есть ветвь production которая содержит учетные данные базы данных, которые я выбрал для этого сервера.

Теперь я хотел бы полностью автоматизировать развертывание. В настоящее время я использую Ansible, чтобы сделать

git checkout production
git pull origin master
service apache2 restart

который работает. Проблема в том, что это исправление базы данных находится только на сервере. Я бы предпочел иметь этот патч централизованно.

  • Я думал, что смогу позволить Ansible развернуть версию vanilla, а затем использовать Ansible для обмена строк PASSWORD . Недостатком является то, что при следующем запуске Ansible обнаружит, что проверка была изменена, и переделает все, что делает его неэффективным.

  • Затем я подумал о пакете Debian для всего этого. Для этого потребуется либо вставить учетные данные в пакет, что я не могу сделать, так как пакет будет общедоступным (для использования Launchpad PPA).

В любом случае, мне, вероятно, нужно иметь учетные данные в каком-то месте, где это обнаружит развертывание vanilla, например /etc/myapp/db.ini .

Каков разумный способ сделать это?

1 ответ1

-1

Управление секретами - чрезвычайно сложная проблема. Вы никогда не хотите пароли в открытом виде в коде.

Есть несколько инструментов для обработки секретов, в том числе Ansible Vault, Hashicorp Vault и Keywhiz. Я лично храню секреты в S3, используя KMS для шифрования.

Это сложная проблема с несколькими инструментами, которые появляются, чтобы попытаться решить ее. Я бы не предполагал, что знаю лучшее решение для вас, но я бы посоветовал взглянуть на различные инструменты управления секретами и выбрать то, которое соответствует вашим потребностям.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .