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

В 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 в реальном времени.

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

  • 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

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

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

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

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

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