Передача секретов (ключей, паролей, токенов) в docker run/build — как безопаснее?
Условия:
- есть проекты с менеджерами зависимостей (composer, npm)
- некоторые зависимости лежать в приватных репозиториях с доступом по ssh
- есть пароли/токены доступа к внешним сервисам (СУБД например)
- билд запускается от linux-пользователя, в домашнем каталоге которого есть нужный ключ
- контейнер запускается от linux-пользователя, в переменных окружения которого есть нужный пароль
- и билд, и запуск контейнера происходят на удаленной машине (DOCKER_HOST и т. п. настроены)
Требуется:
а) билдить образы в Dockerfile которых есть команды установки зависимостей типа {composer|npm} install из приватных git/composer/npm-репозиториев
б) запускать контейнеры с передачей им пароля
в) в образах не должно быть и следов ключа/пароля
г) в переменных окружения работающего контейнера (демона как правило) не должно быть следов ключа/пароля, пароль должен лежать в локальном (не волум) файлике, умирающим вместе с контейнером
Все способы, найденные в документации Докера, которыми можно передать значение или файл либо помечены в документации как небезопасные, либо работают только с локальным демоном, но не удалённым. Как временное решение в рамках стендовой сети всё передаём через переменные окружения/билда, но документация не рекомендует это для продакшена.