Кубик в кубе или самоучитель по Kubernetes

6e41f503a04139a4b1cacc3348d8fa1b.png

Громкое название для интересного проекта. Ну, чего это так быстро всё рассказываю, давайте пойдем немного медленней. Чтож, многие сейчас переходят от ручного труда к автоматическом, своего рода индустриализация в ИБ. Все эти модные Ansible, Ci/CD, Docker и главное cron (шутка), естественно, Kubernetes. О нем можно много говорить, о его мисконфигах, проблемах с безопасностью, сложности и его особенностях, но сегодня зайдет речь про обучение. Я оставлю ссылки на полезный материал, который Вам предстоит изучать. Это огромный пласт знаний, который не получится изобразить в статье.

Базовые знания

Kubernetes, также известный как «k8s» или «kube» или «кубик» или «голландский штурвал», представляет собой платформу для оркестрации контейнеров, позволяющую планировать и автоматизировать развертывание, управление и масштабирование контейнерных приложений.

Основные задачи Kubernetes

  1. Развертывание контейнеров и все операции для запуска необходимой конфигурации. В их число входят перезапуск остановившихся контейнеров, их перемещение для выделения ресурсов на новые контейнеры и другие операции.

  2. Масштабирование и запуск нескольких контейнеров одновременно на большом количестве хостов.

  3. Балансировка множества контейнеров в процессе запуска. Для этого Kubernetes использует API, задача которого заключается в логическом группировании контейнеров. Это дает возможность определить их пулы, задать им размещение, а также равномерно распределить нагрузку.

Основные компоненты

9aeee14b879a9d2c4e96438c82852f20.png

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) — Сканер уязвимостей для образов контейнеров и файловых систем.

© Habrahabr.ru