Deckhouse Kubernetes Platform (DKP) предоставляет средства для декларативного сбора, обработки, нормализации и доставки событий безопасности, извлекаемых из логов приложений и инфраструктурных компонентов Kubernetes.
Событие безопасности — это структурированная запись о значимом с точки зрения информационной безопасности (ИБ) действии или факте.
DKP позволяет:
- собирать события безопасности из различных источников (логи подов, файлы на узлах, аудит Kubernetes API);
- приводить события к единому формату с обязательным набором атрибутов;
- обогащать события контекстными данными;
- фильтровать события по источникам и уровню критичности;
- доставлять события в системы хранения и аналитики (Loki, Elasticsearch, Kafka, Splunk, Vector и другие).
За сбор, обработку и доставку событий безопасности отвечает модуль security-events-manager.
Для сбора логов задействуется вспомогательный модуль log-shipper.
Зависимости и требования
Для работы модуля security-events-manager требуются следующие модули DKP:
log-shipper— обеспечивает сбор логов из подов и файлов на узлах, а также выполняет предварительный отбор записей;loki— обеспечивает хранение событий безопасности внутри кластера (используется в качестве приёмника событий по умолчанию).
Подробности об архитектуре работы с событиями безопасности можно найти в разделе «Архитектура событий безопасности».
Источники данных для событий безопасности
Модуль security-events-manager собирает данные из двух типов источников:
- Контейнерные источники — логи приложений в подах Kubernetes. Сбор выполняется через модуль
log-shipper, который отбирает записи по лейблам подов и неймспейсам. - Кластерные источники — файлы на узлах и логи системных сервисов, не привязанные к конкретному неймспейсу. Например:
/var/log/kube-audit/audit.log— лог аудита Kubernetes API;/var/log/auth.log— лог системных событий аутентификации узла.
Сбор выполняется в два этапа:
- Модуль
log-shipperпредварительно отбирает логовые записи с помощью простых операций сравнения (In,NotIn,Regex,NotRegex,Exists,DoesNotExist) и передаёт их в шлюзsecurity-events-manager. - Шлюз
security-events-managerвыполняет парсинг записей, преобразует их в единую модель и отправляет в настроенный приёмник.
Поскольку парсинг логов — это ресурсоёмкая операция, он выполняется только для записей, заранее отобранных как потенциально содержащие события безопасности.
Включение событий безопасности
Чтобы включить события безопасности, выполните следующие шаги:
-
Включите необходимые модули, если они ещё не включены:
apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: log-shipper spec: enabled: true --- apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: loki spec: enabled: true -
Включите модуль
security-events-manager:apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: security-events-manager spec: enabled: true
Все доступные параметры security-events-manager перечислены в документации модуля.
Настройка источников событий
Источники событий безопасности настраиваются через следующие кастомные ресурсы:
- PodSecurityEventShipper — для контейнерных источников (логи подов в конкретном неймспейсе);
- ClusterSecurityEventShipper — для кластерных источников (файлы на узлах, логи системных сервисов).
В этих ресурсах настраиваются:
- источник логов (поля
sourceиinput); - правила первичного отбора записей (поле
produces); - правила парсинга (поле
parserилиparserRefсо ссылкой на ресурсы SecurityEventLoggingTransformationRules или ClusterSecurityEventLoggingTransformationRules); - правила преобразования и обогащения (поля
transformиenrich).
Пример конфигурации PodSecurityEventShipper для настройки контейнерного источника:
apiVersion: security.deckhouse.io/v1alpha1
kind: PodSecurityEventShipper
metadata:
name: runtime-audit-engine
namespace: d8-runtime-audit-engine
spec:
- source: runtime-audit-engine
input:
type: KubernetesPods
kubernetesPods:
labelSelector:
matchLabels:
app: runtime-audit-engine
produces:
- eventCode: K8S_POD_CREATED
extract:
field: message
operator: Regex
values:
- ".*K8s Pod Created.*"
Пример конфигурации ClusterSecurityEventShipper для настройки кластерного источника:
apiVersion: security.deckhouse.io/v1alpha1
kind: ClusterSecurityEventShipper
metadata:
name: kube-audit
spec:
- source: kube-audit
input:
type: File
files:
- /var/log/kube-audit/audit.log
produces:
- eventCode: UNAUTHORIZED_ACCESS
extract:
field: message
operator: Regex
values:
- ".*\"code\":401.*"
Настройка отправки событий
После формирования событий необходимо определить, в какие приёмники они будут отправляться. Для этого требуется:
- Настроить приёмники событий безопасности.
- Настроить правила отправки событий в приёмники.
Настройка приёмника
Приёмники настраиваются через ресурс ClusterSecurityEventDestination.
Поддерживаются все типы приёмников, доступные в экосистеме log-shipper (Loki, Elasticsearch, Kafka, Splunk, Vector, File и другие).
Для хранения событий безопасности внутри кластера предусмотрена автоматическая настройка приёмника Loki при включении соответствующей опции модуля.
Пример конфигурации ClusterSecurityEventDestination для настройки приёмника Loki:
apiVersion: security.deckhouse.io/v1alpha1
kind: ClusterSecurityEventDestination
metadata:
name: cluster-loki
spec:
type: Loki
loki:
auth:
strategy: Bearer
token: <EXAMPLE>
endpoint: https://loki.d8-monitoring:3100
tls:
verifyCertificate: true
verifyHostname: true
ca: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t...
Настройка правил отправки событий
При настройке правил отправки событий безопасности необходимо определить:
- из каких источников будут отправляться события;
- минимальный уровень критичности (severity) для отправки;
- приёмники, в которые будут отправляться события.
Для этого используется ресурс ClusterSecurityEventConfig. В ресурсе указываются источники (в формате точных имён или масок), минимальный уровень критичности (severity) и массив приёмников (ресурсы ClusterSecurityEventDestination), в каждый из которых будут отправляться отобранные события.
Пример конфигурации ClusterSecurityEventConfig для отправки событий из источников kube-audit, runtime-audit-engine и user-authn в приёмник cluster-loki:
apiVersion: security.deckhouse.io/v1alpha1
kind: ClusterSecurityEventConfig
metadata:
name: default
spec:
defaultSeverityThreshold: Low
enabledSources:
- clusterSecurityEventShipper/kube-audit/kube-audit
- podSecurityEventShipper/d8-runtime-audit-engine/runtime-audit-engine/falco
- podSecurityEventShipper/d8-user-authn/user-authn/dex
# Либо укажите маски.
# enabledSourcesMasks:
# - clusterSecurityEventShipper/kube-audit/*
# - podSecurityEventShipper/*
destinations:
- cluster-loki
Стандартные настройки модуля
Если настройки модуля не заданы явно, в кластере автоматически создаются следующие объекты:
-
ClusterSecurityEventConfig — отвечает за настройку отправки событий безопасности в приёмники. По умолчанию создаётся объект со следующими настройками:
apiVersion: security.deckhouse.io/v1alpha1 kind: ClusterSecurityEventConfig metadata: name: default spec: defaultSeverityThreshold: Medium destinations: - cluster-loki enabledSourcesMasks: - podSecurityEventShipper/* - clusterSecurityEventShipper/*Настройка этого объекта выполняется с помощью параметра
securityEventConfig. -
ClusterSecurityEventDestination — отвечает за настройку приёмника событий безопасности. По умолчанию создаётся следующий объект, который отправляет события в сервис Loki, расположенный внутри кластера:
apiVersion: security.deckhouse.io/v1alpha1 kind: ClusterSecurityEventDestination metadata: name: cluster-loki spec: type: Loki loki: auth: strategy: Bearer token: <token> # Заполняется автоматически. endpoint: https://loki.d8-monitoring:3100Отключить создание стандартного приёмника можно с помощью параметра
clusterSecurityEventDestination.clusterLoki.
Поддерживаемые события безопасности
Модуль security-events-manager поставляется со встроенным набором правил обнаружения событий безопасности,
охватывающим аутентификацию, конфигурацию, RBAC, среду выполнения и другие категории.
Актуальный перечень поддерживаемых событий безопасности, их коды, критичность и описание
приведены в документации модуля.