Обработка секретов внутри контейнера докеров без использования роя докеров

Один вопрос, как вы обрабатываете секреты внутри dockerfile без использования docker swarm. Допустим, у вас есть частное репо на npm и вы восстанавливаете его с помощью.npmrc внутри файла dockerfile, предоставив учетные данные. После восстановления пакета, очевидно, я удаляю файл.npmrc из контейнера. Точно так же это касается NuGet.config, а также для восстановления частных репозиториев внутри контейнера. В настоящее время я предоставляю эти учетные данные как --build-arg при создании файла докеров.

Но такая команда, как docker history --no-trunc, покажет пароль в журнале. Есть ли какой-нибудь достойный способ справиться с этим. В настоящее время я не на кубернетах. Следовательно, необходимо обрабатывать то же самое в самом докере.

Один из способов, который я могу придумать, - это смонтировать / run /secrets/ и сохранить его внутри либо с помощью текстового файла, содержащего пароль, либо через файл.env. Но тогда этот файл.env должен быть частью конвейера для завершения процесса CI/CD, что означает, что он должен быть частью системы управления версиями. Есть ли способ избежать этого, или что-то можно сделать с помощью самого конвейера, или здесь можно применить любую логику шифрования / дешифрования?

Спасибо.

Спасибо.

2 ответа

Решение

Во-первых, имейте в виду, что файлы, удаленные в одном слое, все еще существуют в предыдущих слоях. Так что удаление файлов тоже не помогает.

Есть три способа защиты:

  1. Загрузите весь код заранее, за пределами сборки Docker, где у вас есть доступ к секрету, а затем просто скопируйте загруженный материал.

  2. Используйте BuildKit, который является экспериментальной функцией Docker, которая обеспечивает безопасное использование секретов ( https://docs.docker.com/develop/develop-images/build_enhancements/).

  3. Предоставлять секреты от сетевого сервера, работающего локально (например, в другом контейнере). См. Подробное объяснение того, как это сделать, здесь: https://pythonspeed.com/articles/docker-build-secrets/

Позвольте мне попытаться объяснить секрет докера здесь.

  1. Секрет Docker работает с docker swarm. Для этого нужно запустить

$ docker swarm init --advertise-addr=$(hostname -i)

Это делает узел мастером. Теперь вы можете создать свой секрет здесь, например: - создайте файл /db_pass и поместите свой пароль в этот файл.

      $docker secret create db-pass /db_pass

это создает ваш секрет. Теперь, если вы хотите просмотреть список созданных секретов, выполните команду

      $ docker secret ls

Позволяет использовать секрет при запуске службы: -

      $docker service create --name mysql-service --secret source=db_pass,target=mysql_root_password --secret source=db_pass,target=mysql_password -e MYSQL_ROOT_PASSWORD_FILE="/run/secrets/mysql_root_password"  -e MYSQL_PASSWORD_FILE="/run/secrets/mysql_password"      -e MYSQL_USER="wordpress"      -e MYSQL_DATABASE="wordpress"      mysql:latest

В приведенной выше команде файлы /run/secrets/mysql_root_password и /run/secrets/mysql_password находятся в контейнере, в котором хранятся данные исходного файла (db_pass).

source=db_pass,target=mysql_root_password (создает файл /run/secrets/mysql_root_password внутри контейнера со значением db_pass)

source=db_pass,target=mysql_password (создает файл /run/secrets/mysql_password внутри контейнера со значением db_pass)

Смотрите скриншот из контейнера, который содержит данные секретного файла: -

Другие вопросы по тегам