У меня есть модуль, который запускает контейнеры, которым требуется доступ к конфиденциальной информации, такой как ключи API и пароли БД. Прямо сейчас эти конфиденциальные значения встроены в определения контроллера следующим образом:
env:
- name: DB_PASSWORD
value: password
которые затем доступны внутри контейнера Docker как переменная среды $DB_PASSWORD
. Все достаточно легко.
Но, читая их документацию по секретам, они прямо говорят, что размещение конфиденциальных значений конфигурации в ваших определение нарушает передовую практику и потенциально представляет собой проблему безопасности. Единственная другая стратегия, о которой я могу думать, заключается в следующем:
- создать ключ OpenPGP для каждого сообщества пользователей или пространства имен
- используйте crypt, чтобы установить значение конфигурации в etcd (который зашифрован с помощью закрытого ключа)
- создайте секрет kubernetes, содержащий закрытый ключ, например так
- связать этот секрет с контейнером (это означает, что закрытый ключ будет доступен как монтирование тома), вот так
- когда контейнер запускается, он получает доступ к файлу внутри монтирования тома для закрытого ключа и использует его для расшифровки значений conf, возвращаемых из etcd.
- затем это можно включить в confd, который заполняет локальные файлы в соответствии с определением шаблона (например, Apache или файлы конфигурации WordPress)
Это кажется довольно сложным, но более безопасным и гибким, поскольку значения больше не будут статичными и не будут храниться в виде открытого текста.
Итак, мой вопрос, и я знаю, что он не совсем объективен, таков: действительно ли это необходимо или нет? Только администраторы смогут просматривать и выполнять определения RC в первую очередь; поэтому, если кто-то взломал мастер kubernetes, у вас есть другие проблемы, о которых нужно беспокоиться. Единственное преимущество, которое я вижу, заключается в том, что нет опасности, что секреты будут переданы в файловую систему в виде открытого текста...
Существуют ли какие-либо другие способы безопасного заполнения контейнеров Docker секретной информацией?