Модуль 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 состоит из следующих компонентов:

  1. 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;
    • kube-rbac-proxy — сайдкар-контейнер с авторизующим прокси на основе Kubernetes RBAC (Role-Based Access Control) для организации защищённого доступа к метрикам компонента.

    Контейнер falco имеет привилегированный доступ к операционной системе каждого узла. Контекст безопасности контейнера включает capabilities BPF, SYS_RESOURCE, PERFMON, SYS_PTRACE и SYS_ADMIN.

  2. 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 взаимодействует со следующими компонентами:

  1. Kube-apiserver:

    • работа с кастомными ресурсами FalcoAuditRules;
    • мониторинг ресурсов Pod, Namespace, Deployment, ReplicaSet, ReplicationController и Service;
    • авторизация запросов компонентов модуля.
  2. Containerd:

    • получение метаданных контейнеров;
    • отслеживание событий containerd.
  3. Ядро Linux — перехват системных вызовов (syscalls) из ядра Linux в режиме реального времени.

С модулем взаимодействуют следующие внешние компоненты:

  1. Kube-apiserver:

    • отправляет вебхук-запросы на валидацию кастомного ресурса FalcoAuditRules;
    • отправляет события аудита.
  2. Prometheus-main — собирает метрики модуля.

Дополнительные ресурсы