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