Сохранение секретов в приложении Django, работающем с docker на DigitalOcean

#docker #deployment #docker-compose #digital-ocean #django-3.0

#docker #развертывание #docker-создать #цифровой океан #django-3.0

Вопрос:

Мне любопытно, каков наилучший способ безопасного хранения секретов (паролей, секретных ключей и т.д.) В приложении Django на сервере.

Ранее я использовал Heroku с Git, и все секреты хранились в среде Heroku с использованием веб-интерфейса. Тогда я мог бы просто использовать os.environ['secret_key'] для получения секретов.

Сейчас я пытаюсь выполнить развертывание на сервере DigitalOcean с помощью Docker-Compose. Я читал о секретах docker, но это оказалось небезопасным.

Я также могу сохранить их в файле JSON, но я не уверен, что это также безопасно. Вероятно, тогда они должны быть закодированы.

Ответ №1:

Переменные среды — обычная практика для хранения секретов приложения. Тем не менее, значения для этих переменных не должны храниться в вашем (контролируемом исходным кодом) docker-compose.

Чтобы указать, что переменная должна быть передана с хоста в контейнер, вы просто используете имя переменной без значения:

 # docker-compose.yml
version: '3'

services:
  web:
    build: .
    environment:
      DATABASE_URL: 
      SECRET_KEY:
  

Затем вы можете выбрать различные способы размещения этих переменных на вашем сервере. Один из способов — создать .env файл с этими значениями. Например:

 # .env
SECRET_KEY=123
DATABASE_URL=postgresql://admin:s3cr3tz@db/mydb
  

Этот файл, конечно, не передан в репозиторий git и хранится в тайне.

Используя приведенные выше docker-compose.yml и .env , вы можете запустить docker-compose config , чтобы увидеть полный результат:

 $ docker-compose config
services:
  web:
    build:
      context: /vagrant/temp
    environment:
      DATABASE_URL: postgresql://admin:s3cr3tz@db/mydb
      SECRET_KEY: '123'
version: '3.0'
  

Комментарии:

1. Большое спасибо. Похоже, мне нужно просто выбрать способ, которым я могу настроить этот env-файл на моем сервере.