Jenkins: настройка источника
Данное руководство описывает процесс настройки сбора и отправки событий Jenkins в R-Vision SIEM.
Предварительные требования
Перед настройкой пересылки событий в R-Vision SIEM убедитесь в выполнении следующих условий:
-
Настройка производится УЗ с правами администратора.
-
Сетевая связность между сервером Jenkins и SIEM (или промежуточным syslog-сервером) обеспечена, а необходимые порты открыты.
Настройка Jenkins
Настройка плагина аудита
Для установки плагина аудита Jenkins выполните следующее:
-
Войдите в веб-интерфейс Jenkins.
-
Перейдите в раздел Настроить Jenkins.
-
Выберите вариант Plugins.
-
Перейдите на вкладку Available plugins.
-
Найдите плагин Audit Trail.
-
Нажмите на кнопку Install.

Для настройки плагина Audit Trail выполните следующее:
-
Перейдите в раздел Настроить Jenkins.
-
Выберите вариант System.
-
В подразделе Audit Trail нажмите на кнопку Add Logger (
) и добавьте logger типа
Syslog.
-
Заполните параметры в соответствии с изображением ниже:

Здесь:
-
Syslog Server Hostname — IP-адрес или полное доменное имя (FQDN) коллектора SIEM.
-
Syslog Server Port — порт точки входа Syslog на конвейере SIEM.
-
-
В подразделе Loggers нажмите на кнопку Расширенные (
).
-
Заполните параметры в соответствии с изображением ниже:

Здесь:
-
Syslog network protocol — выберите сетевой протокол:
TCPилиUDP. -
Syslog message format — выберите вариант
RFC_5424. -
Syslog App Name — введите значение
jenkins. -
Message Hostname — укажите hostname узла, на котором развернут Jenkins.
-
-
В подразделе Audit Trail нажмите на кнопку Расширенные (
).
-
Измените значение параметра URL Patterns to Log на следующее:
.*/(?:configSubmit|doDelete|Create|createAccountByAdmin|create|postBuildResult|enable|disable|authenticate|cancelQueue|stop|toggleLogKeep|doWipeOutWorkspace|createItem|createView|toggleOffline|cancelQuietDown|quietDown|restart|exit|safeExit|login|logout)/?.*
-
Нажмите на кнопку Save.
Настройка логирования событий авторизации
Настройка логирования событий авторизации отличается в зависимости от способа запуска Jenkins.
Вариант 1. Jenkins развернут через Docker
Чтобы настроить логирование событий авторизации, выполните следующие шаги:
-
Чтобы логи безопасности с именами пользователей попадали в stdout (и далее в Docker logs), создайте Groovy-скрипт в папке
/var/jenkins_home/init.groovy.d/log-security.groovy:import java.util.logging.* import groovy.json.JsonOutput class FinalJsonFormatter extends Formatter { private static final String HOSTNAME = java.net.InetAddress.getLocalHost().getHostName() @Override String format(LogRecord record) { try { def msg = formatMessage(record) def logEntry = [ "timestamp": new java.text.SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ").format(new Date(record.millis)), "hostname" : HOSTNAME.toString(), "level" : record.level.toString(), "logger" : record.loggerName.toString(), "message" : msg ? msg.toString() : "empty", "user" : (record.parameters?.find { it instanceof String } ?: "system").toString() ] return JsonOutput.toJson(logEntry) + "\n" } catch (Exception e) { return "{\"error\": \"failed to format log\", \"reason\": \"${e.message}\"}\n" } } } def handler = new ConsoleHandler() handler.setFormatter(new FinalJsonFormatter()) handler.setLevel(Level.FINE) // Настройка логгера только для событий входа и выхода. [ "jenkins.security.SecurityListener" ].each { name -> def l = Logger.getLogger(name) // Очистите старые хендлеры, чтобы избежать дублирования. l.getHandlers().each { l.removeHandler(it) } l.addHandler(handler) l.setLevel(Level.FINE) l.setUseParentHandlers(false) } println "--- Jenkins Auth Audit (JSON) Re-Applied ---" -
Измените файл
docker-compose.ymlследующим образом:services: jenkins: --- Добавлять в этот блок. ... hostname: "${HOSTNAME:-my-jenkins-server}" image: jenkins/jenkins:lts logging: driver: syslog options: syslog-address: "protocol://siem:port" ---- Поменять на свои значения. tag: "jenkins-master" ... -
Перезапустите контейнер.
Вариант 2. Jenkins развернут локально
Чтобы настроить логирование событий авторизации, выполните следующие шаги:
-
В стандартной установке на Linux (Debian, Ubuntu, RHEL) домашняя директория Jenkins находится по адресу
/var/lib/jenkins. Создайте папку по указанному адресу:sudo mkdir -p /var/lib/jenkins/init.groovy.d -
Создайте файл
/var/lib/jenkins/init.groovy.d/full-audit.groovyи добавьте в него JSON-скрипт:import java.util.logging.* import groovy.json.JsonOutput class FinalJsonFormatter extends Formatter { private static final String HOSTNAME = java.net.InetAddress.getLocalHost().getHostName() @Override String format(LogRecord record) { try { def msg = formatMessage(record) def logEntry = [ "timestamp": new java.text.SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ").format(new Date(record.millis)), "hostname" : HOSTNAME.toString(), "level" : record.level.toString(), "logger" : record.loggerName.toString(), "message" : msg ? msg.toString() : "empty", "user" : (record.parameters?.find { it instanceof String } ?: "system").toString() ] return JsonOutput.toJson(logEntry) + "\n" } catch (Exception e) { return "{\"error\": \"failed to format log\", \"reason\": \"${e.message}\"}\n" } } } def handler = new ConsoleHandler() handler.setFormatter(new FinalJsonFormatter()) handler.setLevel(Level.FINE) // Настройка логгера только для событий входа и выхода. [ "jenkins.security.SecurityListener" ].each { name -> def l = Logger.getLogger(name) // Очистите старые хендлеры, чтобы избежать дублирования. l.getHandlers().each { l.removeHandler(it) } l.addHandler(handler) l.setLevel(Level.FINE) l.setUseParentHandlers(false) } println "--- Jenkins Auth Audit (JSON) Re-Applied ---" -
Jenkins должен иметь возможность прочитать этот файл. Убедитесь, что владельцем является пользователь Jenkins:
sudo chown -R jenkins:jenkins /var/lib/jenkins/init.groovy.d/ sudo chmod 755 /var/lib/jenkins/init.groovy.d/ -
Чтобы rsyslog не отправлял в SIEM ненужные файлы, используйте фильтрацию по вашему формату. Для этого создайте файл
/etc/rsyslog.d/10-siem.conf:# Фильтрация логов: только от сервиса Jenkins и только указанный JSON. if ($programname == 'jenkins') and ($msg contains '{"timestamp":') and ($msg contains 'jenkins.security.SecurityListener') then { # Отправка в SIEM по TCP (замените IP и порт на свои). action(type="omfwd" target="<target>" port="<port>" protocol="<protocol>" ) # Остановите дальнейшую обработку этой строки, чтобы она не дублировалась в /var/log/syslog. stop }Здесь:
-
<target>— IP-адрес или полное доменное имя (FQDN) коллектора SIEM. -
<port>— порт точки входа Syslog на конвейере SIEM. -
<protocol>— сетевой протокол:tcpилиudp.
-
-
Перезапустите службу
rsyslog.serviceс помощью команды:systemctl restart rsyslog.service
Настройка в R-Vision SIEM
Для настройки сбора и нормализации событий источника в R-Vision SIEM выполните следующие шаги:
-
В интерфейсе R-Vision SIEM создайте новый конвейер в коллекторе.
-
Добавьте на конвейер элемент Точка входа со следующими параметрами:
-
Добавьте на конвейер элемент Нормализатор с правилом Jenkins (идентификатор правила: RV-N-305).
-
Соедините нормализатор с точкой входа.
-
Добавьте на конвейер элемент Конечная точка типа Хранилище событий.
-
Соедините конечную точку с нормализатором.
-
Сохраните и установите конфигурацию конвейера.
Пример конфигурации конвейера:

После настройки передачи событий, если настройка выполнена корректно, в хранилище начнут поступать события Jenkins.
|
Найти события Jenkins в хранилище можно по следующему фильтру:
|
Была ли полезна эта страница?
