Оригинальный вопрос был о том, как хранить секреты в переменных среды. Об этом подробно говорится в книге Two Scoops of Django. Ниже приводится краткое изложение того, что они сказали, после чего следует оговорка об использовании этой техники.
Начиная со страницы 48 (Раздел 5.3) издания за 1.11:
Каждая операционная система, поддерживаемая Django (и Python), предоставляет возможность легко создавать переменные среды .
Вот преимущество использования переменной среды для секретных ключей:
- Сохранения тайны из настроек позволяет сохранять файл каждые настроек в системе управления версиями без колебаний. Весь ваш код Python действительно должен храниться в контроле версий, включая ваши настройки.
- Вместо того, чтобы каждый разработчик сохранял свою собственную копию и вставляемую версию local_settings.py.example для разработки, все используют те же параметры, что и для версии/local.py.
- Системные администраторы могут быстро развернуть проект без необходимости изменять файлы, содержащие код Python.
- Большинство платформ как сервис рекомендуют использовать переменные среды для конфигурации и имеют встроенные функции для настройки и , управляющие ими.
На следующей странице, книга продолжает:
Перед тем, как приступить к настройке переменных окружения, вы должны иметь следующее:
- способ управления секретной информации вы собираетесь хранить.
- Хорошее понимание того, как настройки bash работают на серверах или готовность вашего проекта размещаться на платформе как услуга.
Они описывают, как установить переменные среды локально, так и в производстве (с Heroku как пример - вам нужно будет проверить, если вы используете другой хост это только одна возможность):
Как установить переменные среды локально
экспорт SOME_SECRET_KEY = 1С3-cr3am-15-вкуснятина
Как установить переменные окружения я н Производство
Heroku конфигурации: установка SOME_SECRET_KEY = 1С3-cr3am-15-вкуснятина
Наконец, на странице 52, они дают указания о том, как получить доступ к ключу. Например, вы могли бы поставить первые две строчки ниже в файле настроек, чтобы заменить необработанный ключевую строку, которая ставится там по умолчанию:
>>> import os
>>> os.environ['SOME_SECRET_KEY']
'1c3-cr3am-15-yummy'
Этот фрагмент кода просто получает значение среды SOME_SECRET_KEY переменной от операционной системы и сохраняет его в переменной Python под названием SOME_SECRET_KEY.
Следуя этой схеме, весь код может оставаться в управлении версиями, и все секреты остаются в безопасности.
Примечание: в некоторых случаях это не сработает, например, если вы используете сервер Apache. Чтобы справиться с ситуациями, когда этот шаблон не будет работать, вы должны увидеть раздел 5.4 своей книги («Когда вы не можете использовать переменные среды»). В этом случае они рекомендуют использовать секретный файл.
По состоянию на конец 2017 года эта техника хранения секретов в переменных среды является рекомендуемой передовой практикой в двух совках и в шаблоне дизайна приложения Twelve Factor. Он также рекомендуется в документах Django. Однако есть некоторые угрозы безопасности: если какой-либо разработчик или какой-либо код имеет доступ к вашей системе, они будут иметь доступ к вашим переменным среды и могут непреднамеренно (или рекламировать) сделать их общедоступными. Этот пункт был сделан Майклом Рейнш здесь:
http://movingfast.io/articles/environment-variables-considered-harmful/
Принятый ответ был удален за плагиат, но я ставлю @ вклад нейросеть (в попытке исправить этот вопрос) в сообщество вики ниже. –
Удаление «с переменными окружения» из названия изменяет вопрос, достаточный от исходного Q, который, вероятно, не должен был быть выполнен. – neuronet