Перейти к содержанию

Обновление правила

Запрос

Тип Метод
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
Параметр Тип Обязательность Описание
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
}