Отправка событий аудита во внешние системы

В LCM используются два отдельных механизма аудита и сбора журналов:

  • аудит среды контейнеризации на базе kube-apiserver и AuditD;

  • сбор журналов GitLab и NetBox с помощью Vector.

Обычные журналы контейнеров Kubernetes также могут передаваться во внешний OpenSearch. События аудита kube-apiserver в этот поток не входят. При заполненном siem_address они передаются во внешнюю SIEM через rsyslog. События AuditD остаются локально на LCM-узлах.

Примечание

CADF-события Портала администратора передаются в SIEM отдельным потоком через RabbitMQ и Fluentd. Подробнее см. CADF-события на Портале администратора.

Источники событий

Для аудита и сбора журналов используются следующие источники:

Источник

Механизм

Внешняя система

kube-apiserver

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.

Настройка аудита

  1. Откройте файл конфигурации:

    $ vi ~/installer/lcm-k0s/lcm-config.yaml
    
  2. Настройте параметры аудита:

    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.

  3. Перейдите в каталог ~/installer и запустите инсталлятор с изменённым файлом конфигурации:

    $ ./installer.sh lcm-k0s/lcm-config.yaml
    

    Инсталлятор настраивает AuditD на LCM-узлах. При enable_audit_k0s: false настройка AuditD пропускается.

  4. Перейдите в каталог ~/installer/lcm-k0s и примените конфигурацию кластера:

    $ task k0s-install-multi-node
    

При заполненном siem_address rsyslog на каждом LCM-узле отправляет события kube-apiserver во внешнюю SIEM в реальном времени.

Для фильтрации событий на принимающей стороне используются:

  • facilitylocal6;

  • тег — 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

Проверка отправки событий

Проверьте поступление событий на стороне настроенного syslog- или OpenSearch-сервера.

Для диагностики сетевой отправки выполните на LCM-узле:

$ sudo tcpdump -eni any port <порт> -v

При использовании зашифрованного соединения команда позволяет проверить наличие трафика и адрес получателя, но не содержимое передаваемых данных.