Аудит логи
Эта функция доступна начиная с версии 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
(описана ниже).
- События будут записываться в файл в формате JSON. Путь к нужному файлу должен быть указан через переменную окружения
Уровени логирования
Для ведения журнала аудита существует два уровня, определяющих тип событий, регистрируемых системой, задаваемый через параметр 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"
}