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

Для настройки централизованного сбора логов используется скрипт log-aggregation-setup.sh. Он запрашивает параметры подключения к OpenSearch и syslog, после чего автоматически генерирует конфигурацию и запускает Fluentd.

Скрипт обеспечивает сбор и отправку событий аудита действий пользователей из компонентов платформы LCM — GitLab и NetBox — на единый сервер логирования с возможностью однозначной идентификации инициатора каждого события.

Источники логов

Fluentd собирает логи из следующих источников:

  • GitLab Rails — файлы /var/log/gitlab/gitlab-rails/audit_json.log и /var/log/gitlab/gitlab-rails/production_json.log, тег: gitlab.rails;

  • NetBox — приём логов через HTTP (порт 9880), тег: netbox.tag.

В syslog отправляются все события, полученные из лог-файлов GitLab.

Отправка в OpenSearch осуществляется по следующим маршрутам:

Источник

Тег Fluentd

Индекс OpenSearch

GitLab

gitlab.rails

gitlab-rails

NetBox

netbox.tag

netbox

Режимы подключения к OpenSearch

Скрипт поддерживает следующие режимы подключения к OpenSearch:

  • обычное HTTP-подключение;

  • TLS (HTTPS);

  • TLS без проверки сертификата;

  • mTLS (клиентские сертификаты);

  • Basic Authentication.

Настройка отправки логов на внешние серверы

  1. Зайдите на LCM-узел по SSH.

  2. Перейдите в каталог installer/ и запустите скрипт выполнив команды:

    cd installer
    ./log-aggregation-setup.sh
    
  3. Скрипт задаст вопросы для настройки подключения к OpenSearch и syslog. Параметры, которые запрашивает скрипт:

    1. Включение OpenSearch:

      Enable sending logs to OpenSearch? (y/n) [y]:
      
      • y — логи будут отправляться в OpenSearch;

      • n — OpenSearch не используется.

    2. Узел и порт OpenSearch:

      Enter OpenSearch host (IP or domain): [opensearch]:
      

      Укажите доменное имя или IP-адрес сервера OpenSearch, например: opensearch.example.com.

      Enter OpenSearch port: [9200]:
      

      Укажите порт, на котором доступен OpenSearch.

    3. Включение TLS:

      Enable TLS for OpenSearch? (y/n) [n]:
      
      • n — использовать HTTP;

      • y — включить HTTPS.

    4. Проверка TLS-сертификата сервера:

      Verify TLS server certificate? (y/n) [y]:
      
      • y — Fluentd проверяет сертификат OpenSearch;

      • n — сертификат не проверяется.

      Режим n используйте в следующих случаях:

      • применяется самоподписанный сертификат;

      • OpenSearch находится за локальным reverse-proxy;

      • отсутствует корректный CA-файл.

    5. Путь к CA-сертификату:

      Path to CA certificate (empty = skip):
      

      Укажите путь к Root CA, который подписал сертификат OpenSearch, например: /installer/data/ca/root/ca.crt.

    6. Включение mTLS:

      Enable mTLS? (y/n) [n]:
      
      • n — только TLS (серверный);

      • y — включить клиентские сертификаты.

      При выборе y укажите пути к клиентским сертификатам:

      Path to client certificate:
      Path to client key:
      

      Fluentd использует эти файлы для аутентификации, например:

      /installer/data/certs/client.crt
      /installer/data/certs/client.key
      
    7. Базовая аутентификация:

      Enable Basic Auth for OpenSearch? (y/n) [n]:
      

      При включении укажите логин и пароль для базовой аутентификации:

      OpenSearch username:
      OpenSearch password:
      
    8. Включение отправки логов в syslog:

      Enable sending logs to rsyslog (syslog)? (y/n) [y]:
      
      • y — логи будут отправляться в syslog;

      • n — syslog не используется.

    9. Узел, порт и протокол syslog:

      Enter rsyslog host: [rsyslog]:
      

      Укажите доменное имя или IP-адрес syslog-сервера.

      Enter rsyslog port: [514]:
      

      Укажите порт, на котором доступен syslog-сервер.

      Enter syslog protocol (udp/tcp): [udp]:
      

      Укажите протокол, по которому доступен syslog-сервер.

    10. Facility и имя узла:

      Enter syslog facility: [local0]:
      

      Укажите предпочитаемый параметр facility.

      Enter syslog hostname:
      

      Укажите имя узла. По умолчанию подставляется hostname узла, на котором запущен скрипт.

Результат выполнения скрипта

После ответа на все вопросы скрипт выполняет следующие действия:

  • Генерирует fluentd.conf с учётом всех выбранных параметров: узел и порт, HTTP/HTTPS, проверка сертификата, CA-файл, клиентские сертификаты, логин и пароль.

  • Создаёт каталог $INSTALL_HOME/data/fluentd/.

  • При включённом TLS или mTLS копирует все указанные сертификаты в каталог $INSTALL_HOME/data/fluentd/certs/ и монтирует его в контейнер Fluentd.

  • Запускает Fluentd через Docker Compose: контейнер начинает приём логов и автоматически подключается к OpenSearch и/или rsyslog.

  • Настраивает NetBox для логирования событий: создаёт webhook и event rule, включает отправку событий в Fluentd по адресу http://fluentd:9880/netbox.tag.

Проверка отправки событий на внешний сервер логирования

Для проверки отправки событий на внешний сервер логирования на примере GitLab, выполните следующее действия:

  1. Зайдите на LCM-узел по SSH.

  2. Запустите сниффер сетевого трафика:

    sudo tcpdump -eni any port 514 -Av
    
  3. Откройте веб-интерфейс GitLab.

  4. Откройте проект project_k / deployments / <имя региона>.

  5. Отредактируйте любой файл и создайте Merge request с изменениями.

  6. Проверьте вывод сниффера сетевого трафика. Убедитесь, что в выводе tcpdump появились пакеты на порт 514 — это подтверждает, что Fluentd отправляет syslog-события от GitLab.