Модуль runtime-audit-engine реализует в Deckhouse Kubernetes Platform (DKP) рантайм-аудит, основанный на системе обнаружения угроз Falco. Модуль собирает события ядра Linux и события аудита API Kubernetes (с помощью плагина k8saudit), обогащает их метаданными о подах Kubernetes и формирует события безопасности по установленным правилам. Правила аудита определяются с использованием кастомного ресурса FalcoAuditRules.
При включении модуля в неймспейсе d8-runtime-audit-engine создаётся ConfigMap control-plane-configurator с URL и CA для audit webhook. Модуль control-plane-manager обнаруживает этот ConfigMap и настраивает control plane на отправку событий аудита API Kubernetes в модуль runtime-audit-engine.
Архитектура модуля
Для упрощения схемы приняты следующие допущения:
- На схеме контейнеры разных подов показаны как взаимодействующие напрямую. Фактически обмен выполняется через соответствующие сервисы Kubernetes (внутренние балансировщики). Названия сервисов не указываются, если они очевидны из контекста. В остальных случаях название сервиса приводится над стрелкой.
- Поды могут быть запущены в нескольких репликах, однако на схеме каждый под показан в единственном экземпляре.
Архитектура модуля runtime-audit-engine на уровне 2 модели C4 и его взаимодействия с другими компонентами DKP изображены на следующей диаграмме:
Компоненты модуля
Модуль runtime-audit-engine состоит из следующих компонентов:
-
Runtime-audit-engine (DaemonSet) — компонент, запускаемый на каждом узле кластера. Он собирает события аудита, проводит проверку правил и выводит сработавшие правила в stdout, а также экспортирует их как метрики в формате Prometheus. Данные поступают из ядра Linux через перехват системных вызовов (syscalls), а также из
containerdчерез Unix-сокет.Компонент содержит следующие контейнеры:
- falco — основной контейнер, обеспечивающий сбор событий безопасности с узлов кластера и с контейнерных приложений в DKP на основе системы обнаружения угроз Falco;
- falcosidekick — сайдкар-контейнер, получающий события от компонента
falcoи экспортирующий события аудита в формате метрик Prometheus; - rules-loader — сайдкар-контейнер, выполняющий следующие действия:
- отслеживает кастомные ресурсы FalcoAuditRules и сохраняет их в общий каталог пода
/etc/falco/rules.d/для обработки компонентомfalco; - валидирует кастомный ресурс FalcoAuditRules;
- отслеживает кастомные ресурсы FalcoAuditRules и сохраняет их в общий каталог пода
- kube-rbac-proxy — сайдкар-контейнер с авторизующим прокси на основе Kubernetes RBAC (Role-Based Access Control) для организации защищённого доступа к метрикам компонента.
Контейнер
falcoимеет привилегированный доступ к операционной системе каждого узла. Контекст безопасности контейнера включает capabilitiesBPF,SYS_RESOURCE,PERFMON,SYS_PTRACEиSYS_ADMIN. -
K8s-metacollector (Deployment) — компонент, выполняющий проксирование запросов к
kube-apiserverдля уменьшения нагрузки на control plane. Также компонент уменьшает объём метаданных, передаваемых вfalco, оставляя только данные, относящиеся к узлу. K8s-metacollector собирает метаданные изkube-apiserverо Pod, Namespace, Deployment, ReplicaSet, ReplicationController и Service.Компонент содержит следующие контейнеры:
- k8s-metacollector — основной контейнер;
- kube-rbac-proxy — сайдкар-контейнер с авторизующим прокси на основе Kubernetes RBAC для организации защищённого доступа к метрикам k8s-metacollector.
Взаимодействия модуля
Модуль runtime-audit-engine взаимодействует со следующими компонентами:
-
Kube-apiserver:
- работа с кастомными ресурсами FalcoAuditRules;
- мониторинг ресурсов Pod, Namespace, Deployment, ReplicaSet, ReplicationController и Service;
- авторизация запросов компонентов модуля.
-
Containerd:
- получение метаданных контейнеров;
- отслеживание событий
containerd.
-
Ядро Linux — перехват системных вызовов (syscalls) из ядра Linux в режиме реального времени.
С модулем взаимодействуют следующие внешние компоненты:
-
Kube-apiserver:
- отправляет вебхук-запросы на валидацию кастомного ресурса FalcoAuditRules;
- отправляет события аудита.
-
Prometheus-main — собирает метрики модуля.