Сервис аудита
Сервис аудита обрабатывает и сохраняет обработанные события аудита на Платформе.
Каждая запись события аудита содержит следующую информацию:
- тип события;
- время наступления события.
Сервис предоставляет:
- Клиент С#: для записи событий аудита;
- Клиент С#: для работы с справочниками журналов и событий.
Работу сервиса аудита обеспечивают следующие компоненты:
- RabbitMQ: реализует управление очередью;
- БД PostgresSQL: реализует хранения сообщений и событий в реляционном хранилище.
Сервис аудита обрабатывает события следующим образом:
- события аудита записываются в очередь с названием audit в RabbitMQ для гарантированной обработки события аудита.
- RabbitMQ оповещает сервис о новых сообщениях.
- Сервис извлекает сообщения по мере их поступления, обрабатывает сообщение, помечает сообщение как обработанное для RabbitMQ и помещает в БД PostgresSQL.
Работа с сервисом возможна с использованием API сервиса или через клиентскую библиотеку ASE.MD.Platform.Infrastructure.AuditService.Client
на языке C#.
Сервисы, разработанные на других языках программирования, должны обеспечивать запись событий в очередь RabbitMQ самостоятельно. Формат записи описан ниже.
Формат записи события аудита в очередь RabbitMQ
Событие аудита записывается строкой в формате UTF8 в RabbitMQ .
Пример запроса в RabbitMQ
"{
"Version\":\"1\", //Версия протокола, всегда задается 1
"Journal\":\"system\",
"EventType\":\"eventtype\",
"ObjectType\":\"objecttype\",
"Result\":true,
"CriticalLevel\":\"Verbose\",
"EventDateTime\":\"2021-03-11T12:57:19.8007782+03:00\",
"Source\":\"source\",
"EventData\":\"evenfdata\",
"Ip\":\"ip\",
"Login\":\"login\",
"ContentLocalizationKey\":\"localization\",
"ObjectId\":\"objectid\",
"Description\":\"description\"
}"
Модель данных сервиса аудита
Модель данных сервиса аудита состоит из следующих структур данных:
- Событие: действие, произошедшее в Платформе, например, авторизация пользователя, удаление словаря локализации.
- Журнал: сущность для централизованного хранения событий Платформы. Список журналов динамический, пользователь может добавлять новые журналы, например, system, security, files;
- Тип события: сущность для классификации событий на Платформе. Список типов событий динамический, пользователь может добавлять новые типы событий, например, аутентификация, выход, изменение пароля, редактирование конфигурации.
Событие
Формат модели данных события описывается в следующей таблице.
Параметр | Описание | Тип поля | Примеры значений | Обязательность |
---|---|---|---|---|
Journal | Журнал, в котором произошло событие. Должна быть возможность добавлять журналы через API сервиса. | ссылка на справочник | Базовые предуста- новленные журналы: System, Application, Security | да |
EventType | тип события | ссылка на справочник | Если переданный тип события отсутствует в справочнике, то проставляется тип Unclassified. | да |
ObjectType | тип объекта, с которым произошло событие | String (255) | User, dictionary, culture, translation, namespace Subject, object, right, access, node, config | нет |
ObjectId | ID объекта, с которым произошло событие | String (63) | нет | |
Result | Результат события | Boolean | Успешно = true | да |
Level | Уровень критичности | Int | От 1 до 5 Severity Levels: Critical (1), Error (2), Warning (3), Informational (4), Verbose (5) по умолчанию - 4 | да |
DateTime | дата и время события в формате UTC | dd.mm.yyyy hh:mm:ss | да | |
Source | название сервиса или модуля системы, зарегистри- ровавшего событие | string(63) | Пример: identity, localization, security, discovery | нет |
Event Description | краткое описание события | String(512) | Попытка входа, неизвестный пользователь, блокировка пользователя и т.д. | нет |
EventData | различные аналитические данные которые система-источник передает вместе с событием | string(255) | {"Component Name": "Группа индикаторов", "Project": "Проект", "Version": "1.0.0"} | нет |
IpAddress | IP-адрес компьютера пользователя или сервиса, с которой инициировано событие | String (45) | нет | |
User | логин пользователя или сервиса, который инициировал событие | String (63) | UserId из токена пользователя | да |
Localization Key | ключ к записям содержания в сервисе локализации. Содержание события может быть локализовано на все языки используемые в системе-источнике события. В строку содержания можно включать плейсхолдеры. Набор аргументов содержания получаем из "EventData" | String (127) | Тут будет записан ключ локализации, например, EventGroupCreated. Значение: "Создана группа индикаторов: { Component Name} Проект: {Project}" | нет |
Журнал
Формат модели данных журнала описывается в следующей таблице.
Параметр | Описание | Тип поля | Обязательность |
---|---|---|---|
ID | уникальный идентификатор журнала | int | да |
Name | название журнала | string | да |
Description | описание журнала | string | нет |
Settings | настройки журнала | JournalSettings | да |
В параметре Settings хранятся параметры:
- EventsLivingDays (срок удаления записей): обязательное поле.
- MaxRecordsCount (максимальное количество записей): обязательное поле.
Тип события
Формат модели данных типа события описывается в следующей таблице.
Параметр | Описание | Тип поля | Обязательность |
---|---|---|---|
ID | уникальный идентификатор типа события | int | да |
JournalName | название журнала | string. ссылка на справочник | да |
JournalId | уникальный идентификатор журнала | int | да |
Name | название типа события | string | да |
Description | описание типа события | string | нет |
Типы событий должны быть уникальны внутри журнала. Названия типов событий в сервисе аудита могут быть одинаковыми в разных журналах, но не внутри одного журнала.