Стадия жизненного цикла модуля: General Availability
У модуля есть требования для установки
Включение логов для отладки
Falco
По умолчанию используется уровень логирования debug.
Falcosidekick
По умолчанию отладочное логирование выключено в Falcosidekick.
Для включения отладочного логирования установите параметр spec.settings.debugLogging в true:
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: runtime-audit-engine
spec:
version: 1
enabled: true
settings:
debugLogging: trueПросмотр метрик
Для получения метрик можно использовать PromQL-запрос falcosecurity_falcosidekick_falco_events_total{}:
d8 k -n d8-monitoring exec -it prometheus-main-0 prometheus -- \
curl -s "http://127.0.0.1:9090/api/v1/query?query=falcosecurity_falcosidekick_falco_events_total" | jqУровень важности события передаётся двумя лейблами: priority содержит числовое значение, а priority_raw — название уровня строчными буквами. Для фильтрации событий по уровню важности используйте лейбл priority_raw:
priority |
priority_raw |
|---|---|
8 |
emergency |
7 |
alert |
6 |
critical |
5 |
error |
4 |
warning |
3 |
notice |
2 |
informational |
1 |
debug |
Событие, пришедшее без собственного приоритета, — исключение из этой таблицы: оно экспортируется со значением priority="0" и пустым priority_raw. Prometheus отбрасывает пустой лейбл, поэтому ни один селектор по priority_raw такое событие не выбирает — в том числе событие, отправленное напрямую в приёмник falcosidekick без поля приоритета. Чтобы учитывать и такие события, фильтруйте по priority либо не фильтруйте по уровню важности вовсе.
Вместе с модулем поставляется Grafana-дашборд Runtime audit engine. Он показывает интенсивность событий по узлам, а также состояние Falco, k8s-metacollector, falcosidekick и rules-loader.
Метаданные Kubernetes в выводе событий
Вывод каждого правила типа syscall завершается неймспейсом и именем пода, в котором произошло событие:
ns=my-namespace pod=my-app-7d9f8b6c5-xk2vnСобытие syscall идентифицирует нагрузку только по идентификатору контейнера, поэтому неймспейс и имя пода Falco определяет по нему через сокет container runtime. Эти же два значения добавляются в свойство output_fields вывода в формате JSON — как k8s.ns.name и k8s.pod.name. Falcosidekick читает эти поля, поэтому метрика falcosecurity_falcosidekick_falco_events_total также передаёт их в лейблах k8s_ns_name и k8s_pod_name.
Правила типа k8sAudit это не затрагивает. Они и раньше передавали ns и pod, но берут их из самого события аудита Kubernetes.
Оба поля могут оказаться пустыми, а пустой лейбл Prometheus отбрасывает. Это происходит в двух случаях:
- Событие возникло не в контейнере. У активности на уровне узла нет пода, который можно указать.
- Falco ещё не получил метаданные контейнера. Они собираются асинхронно через сокет container runtime, поэтому самые первые события короткоживущего контейнера могут быть экспортированы до их получения.
Не строите PromQL-запрос на лейблах k8s_ns_name или k8s_pod_name: такой селектор молча пропускает все серии, где лейбл отсутствует, включая все события k8sAudit. Используйте эти поля для чтения события, а не для его выборки.
Если требуется обогащение, не зависящее от этого момента, обрабатывайте события через модуль security-events-manager. Он обогащает события на стороне пайплайна сборки событий, а не внутри Falco.
Эмуляция события Falco
Вы можете использовать утилиту event-generator для генерации событий Falco.
event-generator может генерировать различные подозрительные действия (syscalls, Kubernetes audit events и др.).
Вы можете использовать следующую команду для запуска тестового набора событий в кластере Kubernetes:
d8 k run falco-event-generator --image=falcosecurity/event-generator runОбраз event-generator входит в состав платформы.
Чтобы определить его путь, выполните следующую команду:
kubectl -n d8-system exec svc/deckhouse-leader -- bash -c "echo \$(deckhouse-controller module values runtime-audit-engine | yq '.registry.base')/runtime-audit-engine@\$(cat /deckhouse/downloaded/modules/900-runtime-audit-engine/images_digests.json | jq -r '.eventGenerator')"В целях обеспечения безопасности данный образ создан без дополнительных зависимостей и предназначен для извлечения бинарного файла и его исполнения на хосте.
Чтобы извлечь бинарный файл, выполните следующие команды:
kubectl run falco-event-generator --image=$(kubectl -n d8-system exec svc/deckhouse-leader -- bash -c "echo \$(deckhouse-controller module values runtime-audit-engine | yq '.registry.base')/runtime-audit-engine@\$(cat /deckhouse/downloaded/modules/900-runtime-audit-engine/images_digests.json | jq -r '.eventGenerator')") --command -- /event-generator run
kubectl wait --for=jsonpath='{.status.phase}'=Running pod/falco-event-generator
kubectl cp falco-event-generator:event-generator ./event-generator
kubectl delete pod falco-event-generatorДля корректного выполнения всех типов тестов событий на хосте должны быть установлены следующие пакеты или их аналоги, соответствующие конкретной операционной системе:
policykit-1 libcap-dev e2fsprogs openssh-client openssh-server nmap netcat-openbsd wgetЕсли вам нужно реализовать действие, воспользуйтесь руководством.
Эмуляция события Falcosidekick
Вы можете использовать Falcosidekick /test HTTP endpoint для отправки тестового события.
-
Создайте отладочное событие, выполнив команду:
nsenter -t $(pidof falcosidekick) curl -X POST -H "Content-Type: application/json" -H "Accept: application/json" http://localhost:2801/test -
Проверьте метрику отладочного события:
d8 k -n d8-monitoring exec -it prometheus-main-0 prometheus -- \ curl -s "http://127.0.0.1:9090/api/v1/query?query=falcosecurity_falcosidekick_falco_events_total" \ | jq '.data.result.[] | select (.metric.priority_raw == "debug")' -
Пример вывода:
{ "metric": { "__name__": "falcosecurity_falcosidekick_falco_events_total", "container": "kube-rbac-proxy", "hostname": "falcosidekick", "instance": "192.168.208.7:4212", "job": "runtime-audit-engine", "node": "dev-master-0", "priority": "1", "priority_raw": "debug", "rule": "Test rule", "source": "internal", "tier": "cluster" }, "value": [ 1744234729.799, "1" ] }