Как защитить пароли и секретные ключи в файле настроек Django
Файл настроек django содержит конфиденциальную информацию, такую как секретный_ключ, пароль для доступа к базе данных и т.д., которую небезопасно хранить в жестком коде в файле настроек. Я встречал различные предложения о том, как можно хранить эту информацию более безопасным способом, включая размещение ее в переменных окружения или отдельных конфигурационных файлах. Суть в том, что это защищает ключи от контроля версий (помимо дополнительного удобства при использовании в различных средах), но при взломе системы эта информация все равно может быть доступна хакеру. Есть ли дополнительные преимущества с точки зрения безопасности, если конфиденциальные настройки хранятся в хранилище данных / менеджере паролей, а затем извлекаются во время выполнения программы при загрузке настроек?
Например, для включения в файл settings.py (при использовании pass):
import subprocess
SECRET_KEY=subprocess.check_output("pass SECRET_KEY", shell=True).strip().decode("utf-8")
Это порождает новый shell-процесс и возвращает вывод в Django. Это более безопасно, чем настройка через переменные окружения?
Я думаю, что решение хранилища данных/менеджера паролей - это вопрос передачи ответственности, но риск все равно остается.
При развертывании Django в продакшене, сервер должен рассматриваться так же важно, как хранилище данных. Firewall на месте, fail to ban, os up to date... должны быть на месте.
Тогда, на мой взгляд, нет ничего плохого или менее безопасного, чем иметь файл settings.py с парсером конфигурации, читающим файл config.ini (объявленный в вашем .gitignore!), где находится вся ваша конфиденциальная информация.