Обновление правила
Запрос
Тип | Метод |
---|---|
PUT |
/logmule_go_rules/update |
Описание: при выполнении запроса будет обновлена информация о правиле в соответствии с заданными параметрами.
Работает по принципу частичного обновления, т.е. будут обновлены только те поля модели которые были переданы в запросе.
Позволяет также управлять связями многие ко многим с другими моделями через поле _relations
.
Ключами в поле _relations
могут быть названия полей моделей ссылающиеся на другие. Например если у модели связь с моделью правил корреляции и в нем хранится объект связанного правила то это поле можно использовать при управлении данной связью.
Управление работает следующим образом:
- Если поля в объекте
_relations
отсутствуют зависимости не обновляются. - Если поле зависимости указано и в значении не пустой список идентификаторов, то связи модели приводятся к описанному состоянию.
- Если поле зависимости указано и в значении пустой список то все связи удаляются.
- Зависимости игнорируются в теле запроса.
- Зависимости в ответе всегда
null
.
Например следующий запрос:
{
"id": "uuid",
...
"_relations": {
"logmule_go_rules": [] // - очистит все связи с правилами
// "logmule_go_rules": ["uuid1", "uuid2"] // - создаст связь с 2 правилами
// "logmule_go_rules": ["uuid1"] // - оставит связь только с первым правилом
}
}
Пример запроса
PUT
http://127.0.0.1/cruddy/v2/logmule_go_rules/update
Тело запроса:
Параметр | Тип | Обязательность | Описание |
---|---|---|---|
id | string |
Required | Идентификатор правила |
created_at | string time |
Required | Дата создания правила в формате: date-time |
updated_at | string time |
Required | Дата изменения правила в формате: date-time |
name | string |
Required | Название правила |
frontend_data | Array <FrontendData> |
Required | Данные визуального конструктора правила |
test_data | Array<object> |
Required | Список событий для тестирования правила (логлайны) |
settings | Array <SettingRule> |
Required | Список настроек правила |
active | boolean |
Required | Флаг активности правила |
reload | boolean |
Optional | Флаг перезагрузки правила после обновления |
finding_id | string |
Required | Идентификатор инцидента |
description | string |
Optional | Описание правила |
lua | string |
Optional | Код правила в формате Lua |
is_retro | boolean |
Optional | Флаг: используется ли правило для ретроспективной корреляции |
is_system | boolean |
Optional | Флаг: системное ли правило |
stats | object |
Optional | Статистика сработок и ошибок правила |
stats{result_count} | integer |
Optional | Количество срабатываний правила |
stats{error_count} | integer |
Optional | Количество ошибок правила |
is_error | integer |
Required | Количество ошибок |
running_at | string time |
Required | Дата и время запуска в формате date-time |
_relations | object <relations> |
Optional | Словарь описывающий связанные модели через идентификаторы |
FrontendData
Параметр | Тип | Обязательность | Описание |
---|---|---|---|
alert | Object <Alert> |
Required | Щаблон алерта |
grouper | Object <Grouper> |
Required | Шаблон группера |
actions | Array <Actions> |
Required | Действия, по результатам сработки правила |
conditions | Array <Conditions> |
Required | Конструктор условий. Объекты в массиве могут отличаться в зависимости от типа условия: 1. Сравнение (“CompareCondition”). Структура меняется в зависимости от источника данных. - LoglineGetExpression - значение из события; - TableGetExpression, TableCountExpression или TableDefinitionExpression - значение из табличного списка; - ConstExpression - ручной ввод значения 2. Логическое выражение (“LogicalCondition”) |
version | integer |
Required | Версия схемы конструктора правил |
Alert
Параметр | Тип | Обязательность | Описание |
---|---|---|---|
id | string |
Required | ID шаблона алерта |
trace_id | string |
Optional | Идентификатор трассировки действия пользователя для аудита |
name | string |
Required | Название шаблона алерта |
create_incident | boolean |
Required | Флаг: cоздавать ли инцидент в результате сработки правила |
assign_to_customer | boolean |
Required | Флаг: назначить ли инцидент пользователю |
risk_level | number |
Required | Уровень риска. Допустимые значения от 0 до 10. |
asset_ip | string |
Required | IP-адрес актива |
asset_hostname | string |
Required | Hostname актива |
asset_fqdn | string |
Required | FQDN актива |
asset_mac | string |
Required | MAC-адрес актива |
first_and_last_logs | boolean |
Required | Флаг: записывать ли в журнал первое и последнее событие |
trim_logs | integer |
Required | Количество событий для записи в журнал |
template | string |
Required | Описание шаблона |
mitre | string |
Optional | Описание техник Mitre. Обычно это идентификаторы техник, используемых киберпреступниками, которые описаны в базе знаний компании Mitre (подробнее см. Techniques - Enterprise | MITRE ATT&CK®) |
Grouper
Параметр | Тип | Обязательность | Описание |
---|---|---|---|
id | string |
Required | ID шаблона группера |
trace_id | string |
Optional | Идентификатор трассировки действия пользователя для аудита |
name | string |
Required | Название шаблона группера |
grouped_by | Array<string> |
Required | Поля для группировки |
aggregated_by | Array<string> |
Required | Поля для агрегации |
grouped_time_field | string |
Required | Время события (название поля) |
grouped_time_type | string |
Required | Формат времени, одно из: “RFC3339Nano”, “RFC3339”, “ANSIC”, “UnixDate”, “RubyDate”, “RFC822”, “RFC822Z”, “RFC850”, “RFC850”, “RFC1123”, “RFC1123Z”, “Stamp”, “StampMilli”, “StampMicro”, “StampNano”, “UnixMilli”, “UnixMicro” |
detection_windows | integer |
Required | Период группировки |
detection_windows_unit | string |
Required | Единица измерения периода группировки. Допустимые значения: - ms - s - m - h |
aggregate_count | integer |
Required | Порог количества событий для срабатывания |
aggregate_unique | boolean |
Required | Флаг: активировать ли только уникальные события. |
Actions
Параметр | Тип | Обязательность | Описание |
---|---|---|---|
TTL | string |
Optional | Время жизни события (логлайна) в минутах |
key | object |
Optional | Ключ для действия |
key{default} | object |
Required | Объект ключа по умолчанию |
key{default}/type | string |
Optional | Тип ключа. Допустимые значения: - ”type” == “value” - Значение - ”type” == “field” - Поле события |
key{default}/value | string |
Optional | Значение ключа |
type | string |
Optional | Тип действия. Допустимые значения: - ”type” == “store-set” - Установка значения в табличном списке; - ”type” == “store-remove” - Удаление записи в табличном списке; - ”type” == “store-truncate” - Очистка табличного списка. |
store | string |
Optional | Табличный список над которым совершается действие |
value | string |
Optional | Значение |
column | string |
Optional | Колонка |
Conditions
Любой из:
Сравнение
Параметр | Тип | Обязательность | Описание |
---|---|---|---|
type | string |
Required | Тип условия |
id | string |
Required | Идентификатор условия |
parentId | string |
Optional | Идентификатор родительского условия |
negation | boolean |
Required | Флаг: включить ли для функции сравнения отрицание |
compareFn | string |
Optional | Функция сравнения. Допустимые значения:eq, streq, exist, in, substr, search, gt, gte, lt, lte, in_sub, in_pref, in_suf, pref, suf, table_search, table_check_ip, between |
expressions | Array <Expressions> |
Required | Выражение. Массив может содержать разную структуру объекта, в зависимости от источника данных: - LoglineGetExpression - значение из события - TableGetExpression, TableCountExpression или TableDefinitionExpression - значение из табличного списка - ConstExpression - ручной ввод значения |
Expressions
Один из:
- LoglineGetExpression
- TableGetExpression
- TableCountExpression
- TableDefinitionExpression
- ConstExpression
LoglineGetExpression
Параметр | Тип | Обязательность | Описание |
---|---|---|---|
type | string |
Required | Тип выражения |
value | string |
Required | Значение |
TableGetExpression
Параметр | Тип | Обязательность | Описание |
---|---|---|---|
type | string |
Required | Тип выражения |
store | string |
Required | Источник данных (табличный список) |
column | string |
Required | Колонка |
key | object |
Required | Ключ |
key{type} | string |
Required | Тип ключа. Допустимые значения: logline-get, const-string |
key{value} | string |
Required | Значение ключа |
TableCountExpression
Параметр | Тип | Обязательность | Описание |
---|---|---|---|
type | string |
Required | Тип выражения |
store | string |
Required | Источник данных (табличный список) |
TableDefinitionExpression
Параметр | Тип | Обязательность | Описание |
---|---|---|---|
type | string |
Required | Тип выражения |
store | string |
Required | Источник данных (табличный список) |
column | string |
Required | Колонка |
ConstExpression
Параметр | Тип | Обязательность | Описание |
---|---|---|---|
type | string |
Required | Тип выражения. Допустимые значения:const-string, const-integer, const-double, const-boolean, const-ip, const-cidr, const-date, const-null, const-string-array |
value | string |
Required | Значение. Параметр “value” принимает значения разных типов, в зависимости от значения “type”: - “type” == “const-string” => “value” == “string" - "type” == “const-integer” => “value” == “string" - "type” == “const-double” => “value” == “string" - "type” == “const-boolean” => “value” == “boolean" - "type” == “const-ip” => “value” == “string" - "type” == “const-cidr” => “value” == “string" - "type” == “const-date” => “value” == “string" - "type” == “const-null” => “value” == “null" - "type” == “const-string-array” => “value” == “array of strings” |
Логическое выражение
Параметр | Тип | Обязательность | Описание |
---|---|---|---|
type | string |
Required | Тип условия |
id | string |
Required | Идентификатор условия |
parentId | string |
Optional | Идентификатор родительского условия |
negation | boolean |
Required | Флаг: включить ли для функции сравнения отрицание |
operator | string |
Required | Оператор. Допустимые значения: and, or |
Модель Setting
Параметр | Тип | Обязательность | Описание |
---|---|---|---|
function_metrics | boolean |
Optional | Флаг: собирать ли дополнительные метрики |
is_constructor | boolean |
Optional | Флаг: создано ли правило с помощью визуального конструктора |
max_alerts | integer |
Optional | Максимальное количество сработок |
max_alerts_per_second | integer |
Optional | Максимальное количество сработок в секунду |
max_rule_memory_mb | integer |
Optional | Ограничение памяти (Мб) |
Relations
Параметр | Тип | Обязательность | Описание |
---|---|---|---|
logmule_go_filters | Array<string> |
Optional | Идентификаторы фильтров потока событий |
logmule_go_modules | Array<string> |
Optional | Идентификаторы макросов |
logmule_go_results | Array<string> |
Optional | Идентификаторы результатов "сработок" правил |
rule_sets | Array<string> |
Optional | Идентификаторы наборов правил |
service_asset_findings | Array<string> |
Optional | Идентификаторы инцидентов |
value_stores | Array<string> |
Optional | Идентификаторы табличных списков |
Пример тела запроса
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "string",
"frontend_data": {
"alert": {
"id": "uuid",
"trace_id": "uuid",
"name": "string",
"create_incident": true,
"assign_to_customer": true,
"risk_level": 5.35,
"asset_ip": "string",
"asset_hostname": "string",
"asset_fqdn": "string",
"asset_mac": "string",
"first_and_last_logs": false,
"trim_logs": 1,
"template": "string",
"mitre": ""
},
"grouper": {
"id": "uuid",
"trace_id": "uuid",
"name": "string",
"grouped_by": [
"string"
],
"aggregated_by": [
"string"
],
"grouped_time_field": "string",
"grouped_time_type": "2023-12-20T00:00:01.652259Z",
"detection_windows": 5,
"detection_windows_unit": "ms",
"aggregate_count": 1,
"aggregate_unique": true
},
"actions": [
{
"TTL": "string",
"key": {
"_default": {
"type": "value",
"value": "string"
}
},
"type": "store-set",
"store": "string",
"value": "string",
"column": "string"
}
],
"conditions": [
{
"type": "compare-condition",
"id": "uuid",
"parentId": null,
"negation": false,
"compareFn": "eq",
"expressions": [
{
"type": "logline-get",
"value": "string"
}
]
}
],
"version": 2
},
"test_data": [
{}
],
"settings": {
"function_metrics": false,
"is_constructor": false,
"max_alerts": 1,
"max_alerts_per_second": 1,
"max_rule_memory_mb": 1
},
"active": true,
"reload": true,
"finding_id": "uuid",
"description": "string",
"lua": "string",
"is_retro": false,
"is_system": true,
"stats": {
"result_count": 1,
"error_count": 0
},
"is_error": 0,
"running_at": "2023-12-20T00:00:01.652259Z",
"_relations": {
"logmule_go_filters": [
"497f6eca-6276-4993-bfeb-53cbbbba6f08"
],
"logmule_go_modules": [
"497f6eca-6276-4993-bfeb-53cbbbba6f08"
],
"logmule_go_results": [
"497f6eca-6276-4993-bfeb-53cbbbba6f08"
],
"rule_sets": [
"497f6eca-6276-4993-bfeb-53cbbbba6f08"
],
"service_asset_findings": [
"497f6eca-6276-4993-bfeb-53cbbbba6f08"
],
"value_stores": [
"497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}
}
Успешный ответ
Статус код: 200
– успешное обновление информации о результате "сработки" правила.
Формат: JSON
.
Тело ответа: модель обновленного правила
Пример ответа
{
"name": "string",
"frontend_data": {
"alert": {
"id": "uuid",
"trace_id": "uuid",
"name": "string",
"create_incident": true,
"assign_to_customer": true,
"risk_level": 5.35,
"asset_ip": "string",
"asset_hostname": "string",
"asset_fqdn": "string",
"asset_mac": "string",
"first_and_last_logs": false,
"trim_logs": 1,
"template": "string",
"mitre": ""
},
"grouper": {
"id": "uuid",
"trace_id": "uuid",
"name": "string",
"grouped_by": [
"string"
],
"aggregated_by": [
"string"
],
"grouped_time_field": "string",
"grouped_time_type": "2023-12-20T00:00:01.652259Z",
"detection_windows": 5,
"detection_windows_unit": "ms",
"aggregate_count": 1,
"aggregate_unique": true
},
"actions": [
{
"TTL": "string",
"key": {
"_default": {
"type": "value",
"value": "string"
}
},
"type": "store-set",
"store": "string",
"value": "string",
"column": "string"
}
],
"conditions": [
{
"type": "compare-condition",
"id": "uuid",
"parentId": null,
"negation": false,
"compareFn": "eq",
"expressions": [
{
"type": "logline-get",
"value": "string"
}
]
}
],
"version": 2
},
"test_data": [
{}
],
"settings": {
"function_metrics": false,
"is_constructor": false,
"max_alerts": 1,
"max_alerts_per_second": 1,
"max_rule_memory_mb": 1
},
"active": true,
"reload": true,
"finding_id": "uuid",
"description": "string",
"lua": "string",
"is_retro": false,
"is_system": true,
"stats": {
"result_count": 1,
"error_count": 0
},
"is_error": 0,
"running_at": "2023-12-20T00:00:01.652259Z"
}
Другие возможные ответы
Код | Ответ | Описание |
---|---|---|
400 |
Bad Request name_already_used |
Неверный тип параметра запроса, либо отсутствует обязательный параметр Попытка присвоить объекту существующее уникальное значение атрибута |
404 |
Not Found |
Редактируемый объект не найден в БД |
409 |
name_already_used |
Попытка создать объект с существующим уникальным атрибутом |
500 |
Internal Server Error find rule flows: rule test failed: update rule: |
Другие ошибки при редактировании объекта Ошибка получения связи правила с фильтром потока Ошибка тестирования правила Ошибка обновления правила |
858 |
“settings.max_alerts must be integer (not %T)” ”settings.max_alerts must be greater or equal 0” |
Ошибка валидации поля settings.max_alerts - max_alerts не является числомОшибка валидации поля settings.max_alerts - max_alerts меньше 0. |
859 |
“settings.max_alerts_interval must be integer (not “”)” ”settings.max_alerts_interval must be greater or equal 0” |
Ошибка валидации поля settings.max_alerts_interval - max_alerts_interval не является числомОшибка валидации поля settings.max_alerts_interval - max_alerts_interval меньше 0. |
860 |
“settings.max_rule_memory_mb must be integer (not “”)” ”settings.max_rule_memory_mb must be greater or equal 0” |
Ошибка валидации поля settings.max_rule_memory_mb - max_rule_memory_mb не является числомОшибка валидации поля settings.max_rule_memory_mb - max_rule_memory_mb меньше 0. |
861 |
active rule must have finding type |
Не задан тип инцидента для активного правила |
862 |
active rule must have filter |
Не заданы фильтры для активного правила |
863 |
test error: "" |
Тест правила не проходит |
Примечание: Текст ошибки не фиксированный, может изменяться в зависимости от фактического ответа получателя запроса.
Пример ответа
Код 400
{
"error": "Bad Request",
"error_code": 400
}
Код 404
{
"error": "Not Found",
"error_code": 404
}
Код 409
{
"error": "name_already_used",
"error_code": 409,
"extra": {
"fields": [
"name"
]
}
}
Код 500
{
"error": "Internal Server Error",
"error_code": 500
}
Код 858
{
"error": "Текст ошибки зависит от контекста",
"error_code": 858
}
Код 859
{
"error": "Текст ошибки зависит от контекста",
"error_code": 859
}
Код 860
{
"error": "Текст ошибки зависит от контекста",
"error_code": 860
}
Код 861
{
"error": "Текст ошибки зависит от контекста",
"error_code": 861
}
Код 862
{
"error": "Текст ошибки зависит от контекста",
"error_code": 862
}
Код 863
{
"error": "Текст ошибки зависит от контекста",
"error_code": 863
}