Всем привет!
Одна из самых базовых рекомендаций, что можно встретить при знакомстве с безопасностью контейнеров и Kubernetes – «не запускайте контейнеры из-под root».
Логично. Но много ли кто реализовал это на самом деле? Именно таким вопросом задаются Greg Castle и Vinayak Goyal в своем докладе. Согласно статистике – нет. Но как быть? Да, можно понять как работает образ, сделать необходимые
chown, chmod, настроить права, вписать USER и т.д. Но это затратно по ресурсам, особенно на большом объеме контейнеров.Как быть в такой ситуации? Команда определила следующий подход:
🍭 Все попытки запуска новых
root контейнеров блокируются🍭 У существующих контейнеров «отнимали» права root
🍭 Те, что остались работать – не требовали вмешательства
🍭 Если контейнер «сломался» - команда обращалась к владельцу для решения проблем
С точки зрения контроля было принято решение анализировать как Dockerfile (при наличии), так и модифицировать манифесты (добавлять
runAsUser, runAsGroup, privileged: false и т.д.).Особенно интересно, что в своем докладе ребята рассказали про сложности, с которыми им пришлось столкнуться. Например, особенности работы
fsMount и hostPath, интересное использование supplementalGroups или нюансы, связанные с управлением capabilities.Завершает рассказ упоминание Linux User Namespaces, которые недавно появились в Kubernetes (1.25, но пока Alpha) и как их (потенциально) можно будет использовать для решения задачи с root. Получился отличный, простой и очень полезный доклад, рекомендуем к просмотру!