Отправка событий аудита во внешние системы¶
В LCM используются два отдельных механизма аудита и сбора журналов:
аудит среды контейнеризации на базе
kube-apiserverи AuditD;сбор журналов GitLab и NetBox с помощью Vector.
Обычные журналы контейнеров Kubernetes также могут передаваться во внешний OpenSearch. События аудита kube-apiserver в этот поток не входят. При заполненном siem_address они передаются во внешнюю SIEM через rsyslog. События AuditD остаются локально на LCM-узлах.
Примечание
CADF-события Портала администратора передаются в SIEM отдельным потоком через RabbitMQ и Fluentd. Подробнее см. CADF-события на Портале администратора.
Источники событий¶
Для аудита и сбора журналов используются следующие источники:
Источник |
Механизм |
Внешняя система |
|---|---|---|
|
rsyslog |
SIEM |
AuditD |
аудит на уровне ОС |
— |
GitLab Webservice |
Vector |
syslog, OpenSearch |
NetBox |
Vector |
syslog, OpenSearch |
журналы контейнеров Kubernetes |
Vector |
OpenSearch |
Аудит среды контейнеризации¶
Подсистема аудита среды контейнеризации работает на двух уровнях:
kube-apiserverрегистрирует обращения к API, в том числе операции аутентификации, работу с Secret, изменения RBAC, изменения конфигурации кластера и операции с подами;AuditD отслеживает файловые операции, связанные с containerd: работу с хранилищем образов, базой метаданных, CRI-сокетом и конфигурационными файлами.
События kube-apiserver записываются в файл /var/log/k0s/audit/audit.log в формате JSON.
Настройка аудита¶
Откройте файл конфигурации:
$ vi ~/installer/lcm-k0s/lcm-config.yaml
Настройте параметры аудита:
enable_audit_k0s: true audit_log_maxage: "30" audit_log_maxbackup: "10" audit_log_maxsize: "100" # Отправка в SIEM (опционально) siem_address: "<адрес SIEM>:<порт>" siem_protocol: "tcp"
Где:
enable_audit_k0s— включает аудитkube-apiserverи AuditD. Значение по умолчанию —false;audit_log_maxage— количество дней хранения ротированных файлов аудита. Значение по умолчанию —30;audit_log_maxbackup— максимальное количество ротированных файлов аудита. Значение по умолчанию —10;audit_log_maxsize— максимальный размер файла аудита до ротации в МБ. Значение по умолчанию —100;siem_address— адрес и порт SIEM-сервера. Если значение не задано, отправка событий отключена;siem_protocol— протокол отправки событий:tcpилиudp. Значение по умолчанию —tcp.
Перейдите в каталог
~/installerи запустите инсталлятор с изменённым файлом конфигурации:$ ./installer.sh lcm-k0s/lcm-config.yaml
Инсталлятор настраивает AuditD на LCM-узлах. При
enable_audit_k0s: falseнастройка AuditD пропускается.Перейдите в каталог
~/installer/lcm-k0sи примените конфигурацию кластера:$ task k0s-install-multi-node
$ task k0s-install-single-node
При заполненном siem_address rsyslog на каждом LCM-узле отправляет события kube-apiserver во внешнюю SIEM в реальном времени.
Для фильтрации событий на принимающей стороне используются:
facility—local6;тег —
ks-lcm-audit.
Формат сообщения:
<priority>timestamp hostname ks-lcm-audit: <JSON-событие>
Обновление политики аудита¶
Чтобы изменить политику аудита на работающем кластере без переустановки, выполните:
$ task update-audit-policy
Команда применяет изменённую политику на LCM-узлах и последовательно перезапускает k0scontroller.
Предупреждение
Во время перезапуска k0scontroller сервис kube-apiserver на соответствующем узле недоступен около 5–10 секунд.
Проверка аудита¶
Чтобы проверить, что kube-apiserver запущен с аудитом, выполните:
$ ps aux | grep kube-apiserver | grep audit-policy-file
Для проверки появления событий просмотрите файл журнала:
$ sudo tail -f /var/log/k0s/audit/audit.log
Чтобы проверить правила AuditD, выполните:
$ sudo auditctl -l | grep -E 'containerd|overlay'
Если настроена отправка в SIEM, убедитесь, что события поступают на стороне принимающей системы.
Аудит GitLab и NetBox¶
Для сбора и отправки журналов GitLab и NetBox используется Vector.
GitLab¶
Vector обрабатывает журналы контейнера webservice в пространстве имён lcm-gitlab.
Из потока исключаются:
журналы, которые не содержат JSON-сообщения;
readiness- и liveness-запросы.
NetBox¶
Для NetBox используются два источника:
webhook-события, которые Vector принимает по HTTP;
журналы контейнера
netboxв пространстве имёнlcm-netbox.
Webhook и правило событий NetBox для передачи событий в Vector создаются автоматически. Дополнительная настройка NetBox не требуется.
К журналам приложения NetBox относятся в том числе события входа и выхода пользователей, изменения и удаления объектов.
Отправка во внешний syslog¶
Отправка во внешний syslog настраивается параметрами:
external_syslog_enabled;external_syslog_endpoint.
Vector отправляет события по UDP в формате JSON.
Во внешний syslog передаются:
запросы GitLab Webservice с кодом ответа меньше
400;webhook-события NetBox;
журналы приложения NetBox.
Обычные журналы контейнеров Kubernetes в этот поток не входят.
Настройка параметров подключения описана в разделе Сбор логов в сторонний сервис (опционально).
Отправка во внешний OpenSearch¶
Отправка во внешний OpenSearch настраивается параметрами:
external_opensearch_enabled;external_opensearch_endpoint;external_opensearch_username;external_opensearch_index;external_opensearch_verify_tls;external_opensearch_ca_cert_file.
Во внешний OpenSearch передаются:
журналы контейнеров Kubernetes;
журналы GitLab Webservice;
webhook-события NetBox;
журналы приложения NetBox.
События передаются через Elasticsearch API v8 в режиме bulk со сжатием gzip. По умолчанию используется индекс k8s-logs-%Y.%m.%d.
При заданном external_opensearch_username используется Basic Authentication. Пароль OpenSearch хранится в Kubernetes Secret opensearch-credentials в ключе password и не указывается в lcm-config.yaml. Проверка TLS-сертификата управляется параметром external_opensearch_verify_tls, а CA-сертификат задаётся параметром external_opensearch_ca_cert_file.
События аудита kube-apiserver из файла /var/log/k0s/audit/audit.log во внешний OpenSearch не передаются. Для их отправки используйте параметры siem_*.
Настройка подключения к OpenSearch описана в разделе Сбор логов в сторонний сервис (опционально).
Перед первой отправкой журналов в OpenSearch создайте Index Template согласно разделу Index Template OpenSearch (опционально).
Применение настроек¶
После изменения параметров external_* перейдите в каталог ~/installer/lcm-k0s и повторно примените этап установки приложений:
$ task k8s-install-apps-multi-node
$ task k8s-install-apps-single-node
Проверка отправки событий¶
Проверьте поступление событий на стороне настроенного syslog- или OpenSearch-сервера.
Для диагностики сетевой отправки выполните на LCM-узле:
$ sudo tcpdump -eni any port <порт> -v
При использовании зашифрованного соединения команда позволяет проверить наличие трафика и адрес получателя, но не содержимое передаваемых данных.