Задать вопрос
@d_f
Математик минус программист

Как использовать docker secrets в bash скриптах?

Есть best practice по использованию в bash скриптах секреты из докеров?

Видел в разных докерах использование префикса "_FILE" и другие подходы. Хотелось бы узнать, есть ли готовые либы или куски кода, которые можно использовать в платных проектах.
  • Вопрос задан
  • 186 просмотров
Подписаться 1 Средний 2 комментария
Пригласить эксперта
Ответы на вопрос 5
SignFinder
@SignFinder
Wintel\Unix Engineer\DevOps
Best practice - это Vault и другие хранилища секретов.
Минимум - swarm с его docker secrets
Ответ написан
ky0
@ky0
Миллиардер, филантроп, патологический лгун
Основной вопрос - как безопасно доставить секрет внутрь контейнера. Внутри - можете хоть в файл его класть, хоть в переменную окружения, при наличии доступа на хост и в контейнер секрет так или иначе может быть прочитан.
Ответ написан
@rPman
Переменные окружения, прописанные прямо в dockerfile или docker-compose.yml
Смонтированный каталог хост машины
Специализированны сервер, их тьма как мелких так и крупных типа vault

Пример самописного, секреты выдаются приложению снаружи (в момент развертывания приложения и при их смене) и хранятся во временных файлах /tmp у самого приложения, для этого в инфраструктуре уже должны быть соответствующие средства контроля перезапуска приложений (например если это docker контейнеры) что бы повторно отправлять секреты и мониторить их, в идеале что бы эти команды (на перезапуск) сама система выдачи секретов и отправляла
Ответ написан
Комментировать
saboteur_kiev
@saboteur_kiev Куратор тега bash
software engineer
Безопасность зависит сугубо от того, как у вас настроен кластер, у кого какие права.
Если права контролируются и людей не много, можете просто секреты юзать и мапить их в файлы/переменные.

Если людей много, есть сложности с тем как ограничить безопасность для разных неймпейсов, думайте про внешнее хранилище, откуда секреты будут доставаться через доверенные роли/whitelist нод..
Ответ написан
Комментировать
@Hardoman
DevOps
Нет смысла защищать секреты внутри контейнеров, как уже было сказано, если есть доступ к контейнеру, их в любом случае раскроют.
Озаботьтесь тем, чтобы при сборке и деплое контейнера секреты не передавались в открытом виде (в зависимости от инструмента деплоя - разные методы защиты, например в ansible используйте ansible-vault, если docker-compose, используйте файлы, которые маунтят секрет, чтобы не писать в compose файле секрет в открытом виде) :

version: '3.8'
    secrets:
      db_password:
        file: ./secrets/db_password.txt # Путь к локальному файлу с секретами 
    services:
      database:
        image: postgres
        environment:
          POSTGRES_PASSWORD_FILE: /run/secrets/db_password
        secrets:
          - db_password


Секрет у вас будет маунтиться в /run/secrets/, но надо все равно использовать внешний файл с паролем.

В swarm чуть более удобно - пароль берётся из секрета, который создаётся заранее

docker swarm init
docker secret create <secret_name> <file_path>

или
echo "mysecretvalue" | docker secret create <secret_name> -


version: '3.8'
    secrets:
      db_password:
        external: true # Указывает, что секрет уже создан в swarm
    services:
      database:
        image: postgres
        environment:
          POSTGRES_PASSWORD_FILE: /run/secrets/db_password
        secrets:
          - db_password
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы