Ошибка при передаче секретов докеров в веб-приложение Azure 'Нет такого файла или каталога:' / run / secrets / '

Я относительно новичок в Docker и в настоящее время создаю многоконтейнерное dockerized веб-приложение на Azure (во флаконе). Однако у меня возникают некоторые трудности с секретным менеджментом. Я успешно создал версию, в которой секреты приложений хранились через переменные среды. Но, основываясь на недавнем чтении, я обратил внимание на то, что это не очень хорошая идея. Я пытался обновить свое приложение, чтобы использовать Docker Secrets, но безуспешно.

Я успешно создал секреты на основе этого поста:

как управлять секретными значениями с помощью docker-compose v3.1?

Я развернул стек и убедился, что секреты доступны в обоих контейнерах в / run / secrets /. Однако когда я запускаю приложение в лазурном режиме, я получаю сообщение об ошибке.

Вот шаги, которые я предпринял для запуска приложения в лазурном цвете.

docker swarm init --advertise-addr XXXXXX
$ echo "This is an external secret" | docker secret create my_external_secret 
docker-compose build
docker push
docker stack deploy -c *path-to*/docker-compose.yml  webapp

Затем я перезапущу веб-приложение Azure, чтобы получить последние изображения.

Базовая структура docker-compose представлена ​​ниже.

version: '3.1'
services:
  webapp:
    build: .
    secrets:
      - my_external_secret
    image: some_azure_registry/flask_site:latest

  celery: 
    build: .
    command: celery worker -A tasks.celery --loglevel=INFO -P gevent
    secrets:
      - my_external_secret
    image: some_azure_registry.azurecr.io/flask_site_celery:latest


secrets:                        # top level secrets block
    - my_external_secret
      external: true

Однако, когда я запускаю приложение в лазурном цвете, я получаю:

Нет такого файла или каталога: '/ run / secrets / my_external_secret

Я могу прикрепить оболочку к контейнеру и успешно запустить:

python
open('/run/secrets/*my_external_secret*', 'r').read().strip()

Но когда указанная выше строка выполняется веб-приложением, происходит сбой с ошибкой отсутствия файла или каталога. Любая помощь будет принята с благодарностью.


person UCAB    schedule 16.08.2019    source источник


Ответы (1)


К сожалению, секрет на верхнем уровне docker-compose не поддерживается в веб-приложении Azure для контейнера. Взгляните ниже:

Поддерживаемые варианты

  • команда
  • точка входа
  • окружающая обстановка
  • изображение
  • порты
  • начать сначала
  • Сервисы
  • тома

Неподдерживаемые параметры

  • сборка (не допускается)
  • зависит_он (игнорируется)
  • сети (игнорируются)
  • секреты (игнорируются)
  • порты кроме 80 и 8080 (игнорируются)

Для получения дополнительных сведений см. Параметры Docker Compose.

person Charles Xu    schedule 19.08.2019
comment
Благодарю за ваш ответ. Я полагаю, следующий вопрос: какой метод хранения секретов в докеризированных лазурных веб-приложениях является предпочтительным? - person UCAB; 19.08.2019
comment
@UCAB Насколько мне известно, проще всего использовать переменную среды в файле докеров или в настройках приложения Azure Web App. Но вы также можете хранить секреты в Azure Keyvault и получать их в коде. - person Charles Xu; 20.08.2019
comment
В настоящее время я использую Azure Keyvault для сквозного шифрования. Две переменные, которые я пытался передать через Docker Secrets (и потерпел неудачу), были tenant_id и vault_secret_id. Весь смысл использования Docker Secrets состоял в том, чтобы хранить подобные секреты вне среды. Возможно, мне что-то не хватает, но если злоумышленник получит доступ к переменным среды, он получит доступ к секретам моего хранилища, что более или менее противоречит цели хранилища. Я знаю, что есть еще несколько шагов, но обфускация этих идентификаторов для хранилища кажется хорошей практикой. - person UCAB; 20.08.2019