Перейти к основному содержимому

Аудит логи

Эта функция доступна начиная с версии 4.23.0.

Если ваши политики безопасности требуют регистрации действий пользователей в системе, это можно настроить на стороне ТестОпс.

Сервисы, поддерживающие ведение журнала аудита

В ТестОпс есть два компонента, позволяющих регистрировать действия пользователей.

  • uaa
    • регистрирует действия, связанные с
      • лицензирование
      • управление пользователями
  • report
    • регистрирует действия, связанные с...
      • работой конечных пользователей в проектах
        • создание сущностей
        • редактирование сущностей
        • удаление сущностей

Логирование

Профили логирования

Логирование может вестись в формате JSON или в текстовом формате.

Формат логов, предоставляемых ТестОпс, определяется конфигурационным параметром SPRING_PROFILES_ACTIVE, который всегда присутствует во всех конфигурациях ТестОпс.

Конфигурационный параметр SPRING_PROFILES_ACTIVE может принимать несколько названий профилей, разделенных запятой. В текущей реализации имеются следующие профили логирования:

  • kubernetes
    • Этот профиль устанавливается по умолчанию при запуске приложения в Kubernetes. События будут записываться в консоль (stdout) в формате JSON.
  • compose
    • Этот профиль устанавливается по умолчанию при запуске приложения в docker compose. События будут записываться в консоль (stdout) в текстовом формате с элементами, разделенными пробелами.
  • package
    • Этот профиль устанавливается по умолчанию при запуске приложения, развернутого с помощью пакетов Linux (deb или rpm). События будут записываться в консоль (stdout) в текстовом формате с элементами, разделенными пробелами.
  • logging-console-json
    • События будут записываться в консоль (stdout) в формате JSON.
  • logging-file-json
    • События будут записываться в файл в формате JSON. Путь к нужному файлу должен быть указан через переменную окружения LOG_FILE (описана ниже).

Уровени логирования

Для ведения журнала аудита существует два уровня, определяющих тип событий, регистрируемых системой, задаваемый через параметр LOGGING_LEVEL_ACCESSLOG.

  • debug
    • В журнал будут записываться события POST, DELETE, PATCH, PUT.
    • обычно это означает, что будут регистрироваться действия пользователей, связанные с созданием, изменением/обновлением, удалением сущностей
  • trace
    • будут регистрироваться события GET, HEAD, OPTION.
      • этот тип протоколирования показывает все действия пользователей и является очень избыточным

Ведение журнала в файл

Протоколирование может быть выполнено в файл, который может быть обработан приложением типа logstash..

Для записи событий в файл, конфигурация должна содержать параметр LOG_FILE, указывающий на файл, в который нужно записывать логи.

Полная конфигурация логирования

Следующая часть конфигурации позволяет записывать события POST, DELETE, PATCH, PUT в формате JSON в stdout и в файл /var/log/testops/testops.log.

SPRING_PROFILES_ACTIVE: logging-console-json,logging-file-json
LOGGING_LEVEL_ACCESSLOG: debug
LOG_FILE: /var/log/testops/testops.log

Поля записи журнала

Каждая запись журнала доступа будет содержать следующий набор полей.

  • message - сообщение в "сыром" формате
  • logger_name - имя регистратора. Для регистрации действий пользователя имя логгера будет accesslog.
  • method - метод API, вызываемый действием конечного пользователя (GET/POST/PUT и т. д.)
  • endpoint - вызываемый метод
  • query - параметры запроса, например, ID проекта, дополнительные параметры
  • status - статус ответа (2xx, 3xx, 4xx, 5xx)
  • user - имя пользователя, вызвавшего действие
  • roles - роль пользователя
  • client - IP-адрес конечного пользователя

Пример записи лога

{
"@timestamp": "2023-11-13T12:00:00.778Z",
"@version": "1",
"message": "status=200, method=GET, endpoint=/rs/testcasetree/leaf, query=projectId=4&treeId=8&sort=id%2Casc&size=100, client=192.168.100.4, user=admin, roles=[ROLE_ADMIN]",
"logger_name": "accesslog",
"thread_name": "http-nio-8081-exec-7",
"level": "trace",
"level_value": 5000,
"endpoint": "/rs/testcasetree/leaf",
"method": "GET",
"query": "projectId=4&treeId=8&sort=id%2Casc&size=100",
"roles": "ROLE_ADMIN",
"client": "192.168.1.4",
"user": "admin",
"status": "200"
}