5.7 Безопасность в K8s
Безопасность k8s осуществляется на следующих основных этапах: - Безопасность docker image - Admission controllers * это специальные плагины k8s, которые перехватывают запросы к серверу API Kubernetes до сохранения объекта, производя проверку подлинности и авторизации запроса - Безопасность хоста (node) - Безопасность в рантайме (pod security admisson) - Network security - Application security
Безопасность docker
Базовые правила по обеспечения безопасности docker:
- Регулярно устанавливайте обновления
- Ограничивайте доступ к сокету docker и не оставляйте его без защиты
- Создавайте и используйте непривилегированного пользователя для работы контейнера
- Не запускайте контейнер с повышенными привилегиями
- Используйте профильные инструменты для проверки docker образов на предмет уязвимостей
- Ограничивайте возможности контейнера и его ресурсы
- Предотвращайте повыщение привилегий внутри контейнера
- Отключайте межконтейнерное взаимодействие
- Используйте модули безопасности Linux
- Используйте readonly ФС и docker volumes
Дополнительные правила по обеспечения безопасности docker:
- Используйте легковесные образы ОС
- Подписывайте и проверяйте docker-образы для митигации атак MITM
- Используйте доверенные хранилища артефактов
- Применяйте механизм многоэтапной сборки (multistaging)
- Не допускайте утечки сенсетивной информации в Dockerfile
- Используйте фиксированные теги версий образов
- Используйте инструкцию COPY вместо ADD
- Используйте линтеры при работе с Dockerfile
- Используйте полноценный DevSecOps-конвейер
Базовые принципы безопасности хоста
- Регулярно устанавливайте обновления (ОС, библиотеки, зависимости)
- Используйте инфраструктурные сканеры (nessus, openvas greenbone, xspider)
- По возможности, не используйте public-ip (используйте внутренние сети или VPN)
Sysdig Falco — opensource-инструмент для обнаружения аномалий и мониторинга активности в системе.
Network security
В кластере k8s по умолчанию наблюдается следующие проблемы с сетевой безопасностью:
- трафик в кластере по умолчанию разрещен и никак не контролируется (если не используется, к примеру, service mesh)
- адреса подов часто меняется
- трафик не щифруется (если не используется дополнительных средств, service mesh в том числе)
Для удобства создания манифестов длā желаемых Network Policy можно использовать инструмент cilium editor (cni cilium) - https://editor.cilium.io/
Service mesh
В обеспечении безопасности сетей в кластере вам также может помочь сервисная сетка (service mesh)
Сервисная сетка – это набор инструментов, позволяющих осуществлять мониторинг трафика между микросервисами, включая схему взаимодействия и коды HTTP-статусов между ними.
Преимущества сервисной сетки (service mesh) на базе инструмента Istio:
- Istio – вмешательство в сетевое взаимодействие
- Отказоустойчивость: ретрай запроса при сбое (благодаря коду ответа)
- Канареечные выкаты: регулирует процент сетевого трафика на новой версии сервиса
- Управление трафиком (таймауты, ретраи, балансировка)
- Наблюдаемость: журналы, метрики, трассировки
- Безопасность: аутентификация и авторизация, работа с токенами, контроль трафика
App security
Для обеспечения безопасности развернутых в вашем кластере k8s приложений воспользуйтесь следующими рекомендациями:
- Используйте k8s secrets (или HashiCorp Vault в качестве альтернативы)
- Применяйте практики devsecops (SAST, SCA, DAST, IAST, RASP)
- Используйте сервисную сетку (service mesh) для контроля за интеграционными потоками приложений, расширенными возможностями деплоя и обновления)
- Проводите аудит кластера с помощью профильнýх инструментов проверки: kube-hunter, kube-audit, chaos-monkey и проч.
Авторизация в Kubernetes system-admin
Из kube/conf берем поле client-certificate-data и декодируем, получаем сертификат в формате pem