Аудит действий пользователя
В процессе работы пользователя Памир генерирует события. Эти события могут быть использованы для интеграции с внешней системой и логирования.
События Памир попадают в exchange RabbitMQ типа topic, который называется pamir_audit_exchange. Клиенты должны самостоятельно создать подписку на необходимые события и обрабатывать их в своих очередях.
Тип сериализации тела событий - json. Тело событий:
event_type: str
user_id: UUID | None
user_login: str
endpoint: str
parameters: str
metadata: dict
response_status_code: int
timestamp: datetime
События сервиса аутентификации
| Название | Ключ маршрутизации |
|---|---|
| Изменение профиля пользователя | auth.user_action.user.UserChanged |
| Создание пользователя | auth.user_action.user.UserCreated |
| Изменение данных пользователя | auth.user_action.user.UserProfileChanged |
| Удаление пользователя | auth.user_action.user.UserDeleted |
| Изменение пароля пользователя | auth.user_action.user.UserPasswordChanged |
| Установка пароля пользователя | auth.user_action.user.UserPasswordSet |
| Изменение статуса пользователя | auth.user_action.user.UserStatusChanged |
| Изменение истёкшего пароля | auth.user_action.user.UserExpiredPasswordChanged |
| Сброс/установка пароля для произвольного пользователя | auth.user_action.user.UserPasswordReset |
| Получение данных Super User | auth.user_action.user.SuperUserDataAccessed |
| Удаление данных Super User | auth.user_action.user.SuperUserDataRevoked |
| Создание атрибута | auth.user_action.attributes.AttributeCreated |
| Обновление атрибута | auth.user_action.attributes.AttributeUpdated |
| Удаление атрибута | auth.user_action.attributes.AttributeDeleted |
| Сброс базы данных до начального состояния | auth.user_action.maintenance.DatabaseResetTriggered |
| Обновление правила доступа для интерфейсов | auth.user_action.access_rules.AccessRuleUpdated |
| Удаление правила доступа | auth.user_action.access_rules.AccessRuleDeleted |
| Создание нового правила доступа для интерфейсов | auth.user_action.access_rules.AccessRuleCreated |
| Обновление тегов доступа пользователя | auth.user_action.access_rules.UserAccessTagsUpdated |
| Изменение системной настройки | auth.user_action.settings.SettingUpdated |
События сервиса СРМ
| Название | Ключ маршрутизации |
|---|---|
| Изменение типа CI | srm.user_action.ci_type.CITypeUpdated |
| Удаление типа CI | srm.user_action.ci_type.CITypeDeleted |
| Создание типа CI | srm.user_action.ci_type.CITypeCreated |
| Обновление атрибутов типа CI | srm.user_action.ci_type.CITypeAttributesUpdated |
| Обновление возможных связей типа CI | srm.user_action.ci_type.CITypeLinksUpdated |
| Обновление атрибутов связи типа CI | srm.user_action.ci_type.CITypeLinkAttributesUpdated |
| Обновление шаблонов имен CI | srm.user_action.ci_type.CITypeNamesTemplateUpdated |
| Создание атрибута | srm.user_action.attribute.AttributeCreated |
| Обновление атрибута | srm.user_action.attribute.AttributeUpdated |
| Удаление атрибута | srm.user_action.attribute.AttributeDeleted |
| Создание связи между CI | srm.user_action.cit_links.CILinkCreated |
| Удаление связи между CI | srm.user_action.cit_links.CILinkDeleted |
| Обновление связи между CI | srm.user_action.cit_links.CILinkUpdated |
| Обновление атрибутов связи | srm.user_action.cit_links.CILinkAttributesUpdated |
| Обновление фетчера атрибутов | srm.user_action.attribute_fetchers.AttributeFetcherUpdated |
| Создание фетчера атрибутов | srm.user_action.attribute_fetchers.AttributeFetcherCreated |
| Удаление фетчера атрибутов | srm.user_action.attribute_fetchers.AttributeFetcherDeleted |
| Обновление парсера атрибутов | srm.user_action.attribute_parsers.AttributeParserUpdated |
| Создание парсера атрибутов | srm.user_action.attribute_parsers.AttributeParserCreated |
| Удаление парсера атрибутов | srm.user_action.attribute_parsers.AttributeParserDeleted |
| Удаление плагина | srm.user_action.plugins.PluginDeleted |
| Деинсталляция плагина | srm.user_action.plugins.PluginUninstalled |
| Установка плагина | srm.user_action.plugins.PluginInstalled |
| Установка плагина на раннеры | srm.user_action.plugins.PluginRunnersInstalled |
| Загрузка плагина | srm.user_action.plugins.PluginUploaded |
| Обновление модификаторов атрибутов CIT | srm.user_action.attribute_modifiers.CITypeAttributeModifiersUpdated |
| Удаление модификаторов атрибутов CIT | srm.user_action.attribute_modifiers.CITypeAttributeModifiersDeleted |
| Обновление фетчера связи CIT | srm.user_action.cit_link_fetchers.CITypeLinkFetcherUpdated |
| Создание фетчера связи CIT | srm.user_action.cit_link_fetchers.CITypeLinkFetcherCreated |
| Удаление фетчера связи CIT | srm.user_action.cit_link_fetchers.CITypeLinkFetcherDeleted |
| Обновление парсера связи CIT | srm.user_action.cit_link_parsers.CITypeLinkParserUpdated |
| Создание парсера связи CIT | srm.user_action.cit_link_parsers.CITypeLinkParserCreated |
| Удаление парсера связи CIT | srm.user_action.cit_link_parsers.CITypeLinkParserDeleted |
| Создание правила доступа | srm.user_action.access_rules.AccessRuleCreated |
| Изменение правила доступа | srm.user_action.access_rules.AccessRuleUpdated |
| Удаление правила по ID | srm.user_action.access_rules.AccessRuleDeleted |
| Удаление правила по имени | srm.user_action.access_rules.AccessRuleByNameDeleted |
| Изменение правила TQL | srm.user_action.access_rules_tql.TQLRuleUpdated |
| Удаление правила TQL | srm.user_action.access_rules_tql.TQLRuleDeleted |
| Создание правила TQL | srm.user_action.access_rules_tql.TQLRuleCreated |
| Удаление правила TQL по имени | srm.user_action.access_rules_tql.TQLRuleByNameDeleted |
| Создание запроса | srm.user_action.search_queries.SearchQueryCreated |
| Изменение запроса | srm.user_action.search_queries.SearchQueryUpdated |
| Удаление запроса | srm.user_action.search_queries.SearchQueryDeleted |
| Создание шаблона | srm.user_action.attribute_templates.AttributeTemplateCreated |
| Изменение шаблона | srm.user_action.attribute_templates.AttributeTemplateUpdated |
| Удаление шаблона | srm.user_action.attribute_templates.AttributeTemplateDeleted |
| Создание правила идентификации | srm.user_action.cit_identify_rules.IdentifyRuleCreated |
| Обновление правила идентификации | srm.user_action.cit_identify_rules.IdentifyRuleUpdated |
| Удаление правила идентификации | srm.user_action.cit_identify_rules.IdentifyRuleDeleted |
| Установка шаблона наименования | srm.user_action.cit_name_templates.NameTemplateSet |
| Изменение шаблона наименования | srm.user_action.cit_name_templates.NameTemplateUpdated |
| Удаление шаблона наименования | srm.user_action.cit_name_templates.NameTemplateDeleted |
| Изменение фильтра связи | srm.user_action.cit_link_filters.LinkFilterUpdated |
| Создание фильтра связи | srm.user_action.cit_link_filters.LinkFilterCreated |
| Удаление фильтра связи | srm.user_action.cit_link_filters.LinkFilterDeleted |
| Создание плана обогащения | srm.user_action.enrichment_plans.EnrichmentPlanCreated |
| Обновление плана обогащения | srm.user_action.enrichment_plans.EnrichmentPlanUpdated |
| Удаление плана обогащения | srm.user_action.enrichment_plans.EnrichmentPlanDeleted |
| Импорт планов обогащения из JSON | srm.user_action.exchange.EnrichmentPlansJsonImported |
| Импорт планов обогащения из файла | srm.user_action.exchange.EnrichmentPlansFileImported |
| Экспорт планов обогащения в JSON | srm.user_action.exchange.EnrichmentPlansJsonExported |
| Экспорт планов обогащения в файл | srm.user_action.exchange.EnrichmentPlansFileExported |
| Экспорт CI в CSV | srm.user_action.exchange.CIsCsvExported |
| Экспорт CI в CSV файл | srm.user_action.exchange.CIsCsvFileExported |
| Экспорт графа CI в JSON | srm.user_action.exchange.CIsJsonGraphExported |
| Экспорт графа CI в JSON файл | srm.user_action.exchange.CIsJsonGraphFileExported |
| Импорт типов CI из JSON | srm.user_action.exchange.CITypesJsonImported |
| Импорт типов CI из файла | srm.user_action.exchange.CITypesFileImported |
| Экспорт типов CI в JSON | srm.user_action.exchange.CITypesJsonExported |
| Экспорт типов CI в JSON файл | srm.user_action.exchange.CITypesFileExported |
| Экспорт атрибутов в JSON | srm.user_action.exchange.AttributesJsonExported |
| Экспорт атрибутов в JSON файл | srm.user_action.exchange.AttributesFileExported |
| Экспорт дашбордов в JSON | srm.user_action.exchange.DashboardsJsonExported |
| Экспорт дашбордов в JSON файл | srm.user_action.exchange.DashboardsFileExported |
| Импорт дашбордов из JSON | srm.user_action.exchange.DashboardsJsonImported |
| Создание дашборда | srm.user_action.dashboard.DashboardCreated |
| Обновление дашборда | srm.user_action.dashboard.DashboardUpdated |
| Удаление дашборда | srm.user_action.dashboard.DashboardDeleted |
| Клонирование дашборда | srm.user_action.dashboard.DashboardCloned |
| Импорт дашбордов из файла | srm.user_action.dashboard.DashboardsFileImported |
| Изменение настройки | srm.user_action.settings.SettingUpdated |
| Создание правила доступа | srm.user_action.access_rules_dashboard.DashboardRuleCreated |
| Обновление правила доступа | srm.user_action.access_rules_dashboard.DashboardRuleUpdated |
| Удаление правила доступа | srm.user_action.access_rules_dashboard.DashboardRuleDeleted |
| Удаление orphan-правил | srm.user_action.access_rules_dashboard.OrphanDashboardRulesDeleted |
| Удаление правила по имени | srm.user_action.access_rules_dashboard.DashboardRuleByNameDeleted |
| Изменение CI | srm.user_action.ci_public_v4.CIUpdated |
| Удаление CI | srm.user_action.ci_public_v4.CIDeleted |
| Изменение карты CI | srm.user_action.ci_public_v4.CIMapUpdated |
| Изменение цифрового отпечатка | srm.user_action.ci_public_v4.CIFingerprintUpdated |
| Массовое удаление CI | srm.user_action.ci_public_v4.CIsBatchDeleted |
| Удаление отмеченных CI | srm.user_action.ci_public_v4.CIsMarkedDeleted |
| Запуск обогащения CI | srm.user_action.ci_action_v4.CIEnrichmentStarted |
| Массовый запуск обогащения | srm.user_action.ci_action_v4.CIsEnrichmentStarted |
| Импорт CI из CSV | srm.user_action.ci_exchange_v4.CIsCsvImported |
| Импорт графа CI из JSON | srm.user_action.ci_exchange_v4.CIsJsonGraphImported |
| Удаление вкладки | srm.user_action.dashboard_tabs.TabDeleted |
| Создание вкладки | srm.user_action.dashboard_tabs.TabCreated |
| Создание вкладки из дашборда | srm.user_action.dashboard_tabs.DashboardTabCreated |
| Изменение виджета вкладки | srm.user_action.dashboard_tabs.TabWidgetUpdated |
| Создание виджета вкладки | srm.user_action.dashboard_tabs.TabWidgetCreated |
| Изменение шаблона вкладки | srm.user_action.dashboard_tabs.TabConfigUpdated |
| Частичное обновление шаблона | srm.user_action.dashboard_tabs.TabConfigPatched |
| Сброс настроек вкладки | srm.user_action.dashboard_tabs.TabSettingsReset |
| Сохранение настроек в дашборд | srm.user_action.dashboard_tabs.TabSettingsSaved |
| Восстановление из корзины | srm.user_action.dashboard_tabs.TabRestored |
| Удаление виджета вкладки | srm.user_action.dashboard_tabs.TabWidgetDeleted |
События сервиса управления заданиями
| Название | Ключ маршрутизации |
|---|---|
| Изменение настройки | task_tool.user_action.settings.SettingUpdated |
| Отмена задачи | task_tool.user_action.tasks.TaskRevoked |
| Массовая отмена задач | task_tool.user_action.tasks.TasksBulkRevoked |
| Прерывание выполнения задачи | task_tool.user_action.tasks.TaskAborted |
| Очистка очереди | task_tool.user_action.queues.QueueCleared |
События сервиса управления docker контейнерами
| Название | Ключ маршрутизации |
|---|---|
| Загрузка файла в контейнер | docker_tool.user_action.containers.ContainerFileUploaded |
| Выполнение команды в контейнере | docker_tool.user_action.containers.ContainerCommandExecuted |
| Запуск контейнера | docker_tool.user_action.containers.ContainerStarted |
| Остановка контейнера | docker_tool.user_action.containers.ContainerStopped |
| Перезапуск контейнера | docker_tool.user_action.containers.ContainerRestarted |
| Изменение настройки | docker_tool.user_action.settings.SettingUpdated |
| Изменение подключения | docker_tool.user_action.docker_urls.DockerUrlUpdated |
| Удаление подключения | docker_tool.user_action.docker_urls.DockerUrlDeleted |
| Создание подключения | docker_tool.user_action.docker_urls.DockerUrlCreated |
События сервиса уведомлений
| Название | Ключ маршрутизации |
|---|---|
| Изменение настройки | notification.user_action.settings.SettingUpdated |
| Сброс базы данных | notification.user_action.maintenance.DatabaseReset |
| Изменение конфигурации | notification.user_action.alertmanager.AlertmanagerConfigUpdated |
| Восстановление конфигурации | notification.user_action.alertmanager.AlertmanagerConfigRestored |
| Обновление конфигурации | notification.user_action.alertmanager.AlertmanagerConfigRefreshed |
| Изменение глобальной конфигурации | notification.user_action.global_config.GlobalConfigUpdated |
| Изменение правил подавления | notification.user_action.inhibit_rules.InhibitRulesUpdated |
| Изменение шаблонов конфигурации | notification.user_action.template_config.TemplateConfigUpdated |
| Изменение получателя | notification.user_action.receiver.ReceiverUpdated |
| Удаление получателя | notification.user_action.receiver.ReceiverDeleted |
| Создание получателя | notification.user_action.receiver.ReceiverCreated |
| Изменение подписки | notification.user_action.route.RouteUpdated |
| Удаление подписки | notification.user_action.route.RouteDeleted |
| Создание подписки | notification.user_action.route.RouteCreated |
| Изменение отправителя | notification.user_action.sender.SenderUpdated |
| Удаление отправителя | notification.user_action.sender.SenderDeleted |
| Создание отправителя | notification.user_action.sender.SenderCreated |
| Изменение интервала | notification.user_action.time_interval.TimeIntervalUpdated |
| Удаление интервала | notification.user_action.time_interval.TimeIntervalDeleted |
| Создание интервала | notification.user_action.time_interval.TimeIntervalCreated |
| Изменение шаблона уведомлений | notification.user_action.template.NotificationTemplateUpdated |
События сервиса мониторинга
| Название | Ключ маршрутизации |
|---|---|
| Изменение типа индикатора | monitoring.user_action.hi_types.HITypeUpdated |
| Удаление типа индикатора | monitoring.user_action.hi_types.HITypeDeleted |
| Создание типа индикатора | monitoring.user_action.hi_types.HITypeCreated |
| Изменение метрики | monitoring.user_action.tql_metrics.TQLMetricUpdated |
| Удаление метрики | monitoring.user_action.tql_metrics.TQLMetricDeleted |
| Создание метрики | monitoring.user_action.tql_metrics.TQLMetricCreated |
| Активация метрик | monitoring.user_action.tql_metrics.TQLMetricsEnabled |
| Отключение метрик | monitoring.user_action.tql_metrics.TQLMetricsDisabled |
| Импорт шаблона | monitoring.user_action.mt_exchange.TemplateImported |
| Массовый импорт шаблонов | monitoring.user_action.mt_exchange.TemplatesBulkImported |
| Импорт шаблона из файла | monitoring.user_action.mt_exchange.TemplateFileImported |
| Импорт экспортера | monitoring.user_action.mt_exchange.ExporterImported |
| Импорт экспортера из файла | monitoring.user_action.mt_exchange.ExporterFileImported |
| Импорт типа HI | monitoring.user_action.mt_exchange.HITypeImported |
| Импорт типа HI | monitoring.user_action.mt_exchange.HITypeFileImported |
| Импорт задания | monitoring.user_action.mt_exchange.JobImported |
| Импорт задания из файла | monitoring.user_action.mt_exchange.JobFileImported |
| Импорт правил | monitoring.user_action.mt_exchange.RulesImported |
| Изменение шаблона | monitoring.user_action.templates.TemplateUpdated |
| Удаление шаблона | monitoring.user_action.templates.TemplateDeleted |
| Создание шаблона | monitoring.user_action.templates.TemplateCreated |
| Обновление конфигурации | monitoring.user_action.prometheus.PrometheusConfigUpdated |
| Перезагрузка Prometheus | monitoring.user_action.prometheus.PrometheusReloaded |
| Изменение экспортера | monitoring.user_action.exporters.ExporterUpdated |
| Удаление экспортера | monitoring.user_action.exporters.ExporterDeleted |
| Создание экспортера | monitoring.user_action.exporters.ExporterCreated |
| Изменение способа управления | monitoring.user_action.exporters.ExporterManagementChanged |
| Применение конфигурации | monitoring.user_action.exporters.ExporterApplied |
| Создание задания | monitoring.user_action.jobs.JobCreated |
| Изменение задания | monitoring.user_action.jobs.JobUpdated |
| Удаление задания | monitoring.user_action.jobs.JobDeleted |
| Изменение настройки | monitoring.user_action.settings.SettingUpdated |
| Сброс базы данных | monitoring.user_action.maintenance.DatabaseReset |
| Обновление правила | monitoring.user_action.access_rule_acl.AccessRuleUpdated |
| Удаление правила | monitoring.user_action.access_rule_acl.AccessRuleDeleted |
| Создание правила | monitoring.user_action.access_rule_acl.AccessRuleCreated |
| Удаление правила по имени | monitoring.user_action.access_rule_acl.AccessRuleByNameDeleted |
| Изменение связи | monitoring.user_action.tql_hi_links_v2.HILinkUpdated |
| Удаление связи | monitoring.user_action.tql_hi_links_v2.HILinkDeleted |
| Создание связи | monitoring.user_action.tql_hi_links_v2.HILinkCreated |
| Активация связей | monitoring.user_action.tql_hi_links_v2.HILinksEnabled |
| Изменение связи | monitoring.user_action.thl_alert_hint.AlertHintLinkUpdated |
| Удаление связи | monitoring.user_action.thl_alert_hint.AlertHintLinkDeleted |
| Создание связи | monitoring.user_action.thl_alert_hint.AlertHintLinkCreated |
События сервиса лицензий
| Название | Ключ маршрутизации |
|---|---|
| Загрузка новой лицензии | license.user_action.license_management.LicenseUploaded |
| Генерация файла запроса лицензии | license.user_action.license_management.LicenseRequestGenerated |
Формирование лога аудита событий
Для формирования лога аудита событий используется утилита vector
Подключение утилиты vector
Для подключения утилиты vector в виде сервиса, необходимо в файл docker-compose.additional.yml добавить следующие строки:
vector:
image: timberio/vector:latest-alpine
networks: [pamir-net]
profiles: [all, additional]
restart: unless-stopped
env_file:
- .env
volumes:
- type: bind
source: ./data/vector
target: /etc/vector
command: ["--config", "/etc/vector/vector.toml"]
Настройка утилиты vector
Конфигурацию сервиса vector нужно записать в файл vector.toml. Путь к файлу vector.toml необходимо указать в файле docker-compose.additional.yml, в volumes. Для аудита событий аутентификации конфигурация vector должна быть следующей:
[sources.rabbitmq]
type = "amqp"
connection_string = "amqp://${RABBITMQ_USER}:${RABBITMQ_PASSWORD}@${RABBITMQ_HOST}:5672/${RABBITMQ_VHOST}"
queue = "vector"
consumer = "vector"
[transforms.parse_json]
type = "remap"
inputs = ["rabbitmq"]
source = '''
parsed, err = parse_json(.message)
. = {
"event": .routing,
"timestamp": parsed.timestamp,
"user_id": parsed.user_id,
"user_login": parsed.user_login,
"endpoint": parsed.endpoint,
"parameters": parsed.parameters,
"metadata": parsed.metadata,
"response_status_code": parsed.response_status_code,
}
'''
[sinks.file]
type = "file"
inputs = ["parse_json"]
path = "/etc/vector/log/audit-%Y-%m-%d.log"
encoding.codec = "json"
[sinks.console]
type = "console"
inputs = ["parse_json"]
encoding.codec = "json"
Значения переменным RABBITMQ_USER, RABBITMQ_PASSWORD, RABBITMQ_HOST и RABBITMQ_VHOST присваиваются в файле .env
Настройка RabbitMQ
В RabbitMQ необходимо создать очередь vector. В веб интерфейсе RabbitMQ сделать это можно следующим образом: на вкладке Queues выберите Add a new queue и задайте следующие параметры:
- Type: Classic;
- Name: vector;
- Durability: Durable;
- Auto delete: No.
Выберите Add queue, будет создана очередь vector.
После создания очереди необходимо настроить маршрутизацию сообщений. Для этого на вкладке Queues, выберите очередь vector, на открывшейся странице Queue vector выберите Bindings и задайте следующие параметры:
- From exchange: pamir_audit_exchange;
- Routing key: #.
Выберите Bind, маршрутизация настроена.
Routing key (Ключ маршрутизации) - это строка, которая поддерживает символы подстановки:
*- заменяет одно слово;#- заменяет несколько слов или их отсутствие.
Возможные значения Routing key: auth.user_action.user.* или auth.#.
Принцип работы
RabbitMQ принимает сообщения Памир. Vector подключается к RabbitMQ, читает сообщения из очереди vector, разбирает их согласно transforms.parse_json и сохраняет их в файл ./data/vector/log/audit-%Y-%m-%d.log в формате JSON.