Кубик в кубе или самоучитель по Kubernetes
Громкое название для интересного проекта. Ну, чего это так быстро всё рассказываю, давайте пойдем немного медленней. Чтож, многие сейчас переходят от ручного труда к автоматическом, своего рода индустриализация в ИБ. Все эти модные Ansible, Ci/CD, Docker и главное cron (шутка), естественно, Kubernetes. О нем можно много говорить, о его мисконфигах, проблемах с безопасностью, сложности и его особенностях, но сегодня зайдет речь про обучение. Я оставлю ссылки на полезный материал, который Вам предстоит изучать. Это огромный пласт знаний, который не получится изобразить в статье.
Базовые знания
Kubernetes, также известный как «k8s» или «kube» или «кубик» или «голландский штурвал», представляет собой платформу для оркестрации контейнеров, позволяющую планировать и автоматизировать развертывание, управление и масштабирование контейнерных приложений.
Основные задачи Kubernetes
Развертывание контейнеров и все операции для запуска необходимой конфигурации. В их число входят перезапуск остановившихся контейнеров, их перемещение для выделения ресурсов на новые контейнеры и другие операции.
Масштабирование и запуск нескольких контейнеров одновременно на большом количестве хостов.
Балансировка множества контейнеров в процессе запуска. Для этого Kubernetes использует API, задача которого заключается в логическом группировании контейнеров. Это дает возможность определить их пулы, задать им размещение, а также равномерно распределить нагрузку.
Основные компоненты
Node (Нода)
Ноды или узлы — виртуальные или физические машины, на которых разворачивают и запускают контейнеры. Совокупность нод образует кластер Kubernetes.
Первая запущенная нода или мастер-нода непосредственно управляет кластером, используя для этого менеджер контроллеров (controller manager) и планировщик (scheduler). Она ответственна за интерфейс взаимодействия с пользователями через сервер API и содержит в себе хранилище «etcd» с конфигурацией кластера, метаданными и статусами объектов.
Namespace (Пространство имен)
Объект, предназначенный для разграничения ресурсов кластера между командами и проектами. Пространства имен — несколько виртуальных кластеров, запущенные на одном физическом.
Pod (Под)
Первичный объект развертывания и основной логический юнит в K8s. Поды — набор из одного и более контейнеров для совместного развертывания на ноде.
Группировка контейнеров разных типов требуется в том случае, когда они взаимозависимы и должны запускаться в одной ноде. Это позволяет увеличить скорость отклика во время взаимодействия. Например, это могут быть контейнеры, хранящие веб-приложение и сервис для его кэширования.
ReplicaSet (Набор реплик)
Объект, отвечающий за описание и контроль за несколькими экземплярами (репликами) подов, созданных на кластере. Наличие более одной реплики позволяет повысить устойчивость от отказов и масштабирование приложение. На практике ReplicaSet создается с использованием Deployment.
ReplicaSet является более продвинутой версией предыдущего способа организации создания реплик (репликации) в K8s — Replication Controller.
Deployment (Развертывание)
Объект, в котором хранится описание подов, количество реплик и алгоритм их замены в случае изменения параметров. Контроллер развертывания позволяет выполнять декларативные обновления (с помощью описания нужного состояния) на таких объектах, как ноды и наборы реплик.
StatefulSet (Набор состояния)
Как и другие объекты, например — ReplicaSet или Deployment, Statefulset позволяет развертывать и управлять одним или несколькими подами. Но в отличие от них, идентификаторы подов имеют предсказуемые и сохраняемые при перезапуске значения.
DaemonSet (Набор даемона)
Объект, который отвечает за то, чтобы на каждой отдельной ноде (или ряде выбранных) запускался один экземпляр выбранного пода.
Job/CronJob (Задания/Задания по расписанию)
Объекты для регулировки однократного или регулярного запуска выбранных подов и контроля завершения их работы. Контроллер Job отвечает за однократный запуск, CronJob — за запуск нескольких заданий по расписанию.
Label/Selector (Метки/Селекторы)
Метки предназначены для маркировки ресурсов. Позволяют упростить групповые манипуляции с ними. Селекторы позволяют выбирать/фильтровать объекты на основе значения меток.
По факту, метки и селекторы не являются самостоятельными объектами Kubernetes, но без них система не сможет полноценно функционировать.
Service (Сервис)
Средство для публикации приложения как сетевого сервиса. Используется, в том числе, для балансировки трафика/нагрузки между подами.
Ну, к теме. Что и где мне изучать ?
Threat Matrix для Kubernetes — Ссылка
Методология проведения пентеста Kubernetes — Часть 1
Методология проведения пентеста Kubernetes — Часть 2
Методология проведения пентеста Kubernetes — Часть 3
Интерактивная учебная площадка по безопасности Kubernetes — Ссылка
Захват всех флагов в BSidesSF CTF путем взлома нашей инфраструктуры — Ссылка
Видео с последнего offzone «Kubernetes Pentest All‑in‑One: The Ultimate Toolkit» — Ссылка
Освоение безопасности Kubernetes. Лучшие стратегии, рекомендованные OWASP — Ссылка
Инструменты, которые должны быть в арсенале (ТОЛЬКО opensource)
❔ Их очень много оказалось, сделал выборку из того, что сам использовал\тестировал.
Управление доступом на основе ролей (RBAC) — это метод регулирования доступа к компьютерным или сетевым ресурсам на основе ролей отдельных пользователей в организации.
Про мониторинг не буду говорить, ELK подобная система Вам в помощь. Хотя, есть scope (https://github.com/weaveworks/scope) (Мониторинг, визуализация и управление для Docker и Kubernetes) стоит попробовать, лично от себя — лайк.
Все пространства имен должны иметь NetworkPolicy: взаимодействие между пространствами имен должно контролироваться с помощью NetworkPolicy и следовать принципу наименьших привилегий
kubescape (https://github.com/kubescape/kubescape) — Платформа безопасности Kubernetes с открытым исходным кодом для вашей среды разработки, CI/CD-конвейеров и кластеров. Она включает в себя анализ рисков, проверку безопасности, соответствия требованиям и неправильной конфигурации;
Metarget (https://github.com/Metarget/metarget) — Инструмент, позволяющий разворачивать уязвимые инфраструктуры в одну команду. Самое то, чтобы тренировать и отрабатывать навыки для пентеста.
Любимцы для интеграции в pipeline
Trivy (https://github.com/aquasecurity/trivy) — Поиск уязвимостей, неправильных конфигураций, секретов, SBOM в контейнерах, Kubernetes, репозиториях кода, облаках и т.д.;
Clair (https://github.com/quay/clair) — Статический анализ уязвимостей для контейнеров;
Grype (https://github.com/anchore/grype) — Сканер уязвимостей для образов контейнеров и файловых систем.