Как запретить доступ к смонтированному секретному файлу? - PullRequest
2 голосов
/ 30 апреля 2019

У меня есть приложение весенней загрузки, которое при запуске загружает файл yaml, содержащий ключ шифрования, необходимый для расшифровки свойств, которые он получает из конфигурации весны.

Указанный файл yaml монтируется как секретный файл k8s в etc / config / springconfig.yaml

Если мой springboot работает, я все еще могу sh и просмотреть файл yaml с помощью «docker exec -it 123456 sh». Как я могу запретить кому-либо просматривать ключ шифрования?

Ответы [ 5 ]

3 голосов
/ 30 апреля 2019

Вам нужно ограничить доступ к демону Docker. Если вы используете кластер Kubernetes, доступ к узлам, на которых можно выполнить docker exec ..., должен быть сильно ограничен.

0 голосов
/ 01 мая 2019

Можно использовать sysdig falco (https://sysdig.com/opensource/falco/).. Этот инструмент будет смотреть на событие pod и может действовать при запуске оболочки в вашем контейнере. Типичным действием будет немедленное уничтожение контейнера, поэтому чтение секрет не может быть получен. И kubernetes перезапустит контейнер, чтобы избежать прерывания обслуживания.

Обратите внимание, что вы должны запретить доступ к самому узлу, чтобы избежать доступа к демону Docker.

0 голосов
/ 30 апреля 2019

Вы можете попробовать смонтировать секрет как переменную окружения. Как только ваше приложение получает секрет при запуске, оно может сбросить эту переменную, делая секрет недоступным для него.

Надеюсь, это поможет!

0 голосов
/ 30 апреля 2019

В общем, проблема даже хуже, чем простой доступ к демону Docker.Даже если вы запретите SSH для рабочих узлов, и никто не сможет напрямую использовать демон Docker - все равно есть возможность читать секрет.

Если кто-то в пространстве имен имеет доступ к созданию модулей (что означает возможность создания развертываний / statefulsets /)daemonsets / jobs / cronjobs и т. д.) - он может легко создать pod и смонтировать секрет внутри него и просто прочитать его.Даже если у кого-то есть только возможность исправления модулей / развертываний и т. Д., Он потенциально может прочитать все секреты в пространстве имен.Нет способа, которым вы можете избежать этого.

Для меня это самый большой недостаток безопасности в Кубернетесе.И именно поэтому вы должны очень тщательно предоставить доступ для создания и исправления модулей / развертываний и так далее.Всегда ограничивайте доступ к пространству имен, всегда исключайте секреты из правил RBAC и всегда старайтесь не давать возможность создания модуля.

0 голосов
/ 30 апреля 2019
  1. Вы можете удалить этот файл, как только ваш процесс полностью запустится.Если вашему приложению не нужно читать это снова.

ИЛИ,

Вы можете установить эти свойства через --env-file, и тогда ваше приложение должно читать из окружения.Но, тем не менее, если у вас есть возможность войти в этот контейнер, он также может читать переменные окружения.

ИЛИ,

Установите эти свойства в JVM, а не в системную среду, используя -D.Spring также может читать свойства из среды JVM.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...