Схемы автоматизации
В данном разделе представлен обзор структуры, принципов работы и процесса создания схем автоматизации в системе. Управление схемами автоматизации в системе осуществляется в разделе Экспертиза.
О схемах автоматизации
Схема автоматизации — это элемент экспертизы, позволяющий выполнять автоматическую обработку объектов системы. Схема автоматизации содержит следующие элементы:
Расчеты в схемах автоматизации
Расчет — это элемент схемы автоматизации, определяющий формулы, по которым рассчитываются показатели для объектов системы. Например, с помощью схем автоматизации можно вычислить комплексный показатель соответствия стандарту на основе оценок требований, входящих в этот стандарт, или среднее время реагирования на инциденты.
Расчеты могут возвращать результат следующих типов:
-
число;
-
строка;
-
дата;
-
логический;
-
элемент перечисления (
Enum).
Расчеты поддерживают наследование — возможность переопределять формулы расчетов для дочерних сущностей.
Добавление схемы автоматизации
Чтобы добавить схему автоматизации в систему, необходимо выполнить следующие действия:
-
Создать схему автоматизации в разделе Экспертиза.
-
Определить структуру схемы автоматизации.
-
Настроить запуск расчетов по схеме и отображение их результатов в интерфейсе.
-
Настроить запуск политик в разделе Автоматизация → Политики веб-интерфейса системы.
Структура схемы автоматизации
Схема автоматизации содержит обязательные и опциональные поля, определяющие логику расчетов.
| Поле | Описание | Тип данных | Обязательное поле |
|---|---|---|---|
|
Уникальный идентификатор схемы автоматизации, позволяющий ссылаться на нее из других сущностей системы. Должен быть уникальным в пределах экспертизы. Можно использовать UUID в качестве значения. |
строка |
да |
|
Название схемы автоматизации. Допустимы латинские буквы, цифры, подчеркивания. |
строка |
да |
|
Краткое описание назначения схемы автоматизации. |
строка |
нет |
|
Тип элемента экспертизы. Всегда устанавливается значение |
перечисление |
да |
|
Теги для классификации и поиска схемы в системе. |
массив строк |
нет |
|
Версия схемы в формате Semantic Versioning. |
строка |
да |
|
Статус текущей версии схемы автоматизации. Может принимать любые текстовые значения. Примеры значений:
|
строка |
нет |
|
Имя и контактные данные автора схемы. |
строка |
нет |
|
Дата создания или изменения схемы. Задается в формате Поле не связано с полями Дата создания и Дата изменения в карточке элемента экспертизы. |
строка |
нет |
|
FQID схемы автоматизации, для которой текущая схема является наследником. |
строка |
нет |
|
Массив расчетов. Каждый расчет включает FQID сущностей, к которым применяются расчеты, а также формулы или ссылки на скрипты, которые определяют логику расчетов. Ознакомьтесь с описанием поля. |
массив объектов |
нет |
|
Массив обобщающих расчетов, в котором задаются и описываются расчеты над несколькими несвязанными друг с другом объектами. Ознакомьтесь с описанием поля. |
массив объектов |
нет |
|
Массив политик. Каждая политика включает FQID сущности, к которой она применяется, а также условия ее срабатывания и действия, применяемые в случае срабатывания. См. описание поля. |
массив объектов |
нет |
В схеме автоматизации должен быть определен хотя бы один расчет в поле calculations или summary_calculations или политика в поле policies.
|
Расчеты: поле calculations
Поле calculations содержит объекты расчетов, каждый из которых реализует вычисление показателя по заданной формуле. В формуле можно использовать скрипты.
Расчеты могут возвращать результат следующих типов:
-
число;
-
строка;
-
дата;
-
логический;
-
элемент перечисления (
Enum).
Объект расчета имеет следующую структуру:
| Поле | Описание | Тип данных | Обязательное поле | ||
|---|---|---|---|---|---|
|
Уникальный идентификатор расчета, по которому можно сослаться на расчет. Должен быть уникальным в пределах схемы автоматизации. Можно использовать UUID в качестве значения. |
строка |
да |
||
|
Имя расчета, отображаемое в интерфейсе. |
строка |
да |
||
|
Краткое описание назначения расчета. |
строка |
нет |
||
|
FQID сущности, к которой применяется расчет. |
строка |
да |
||
|
Формула, по которой выполняется расчет. Ознакомьтесь с правилами описания формулы. |
строка |
да |
||
|
Максимальная сложность расчета. Сложность рассчитывается следующим образом:
При превышении предела сложности расчета, указанной в поле
|
положительное целое число |
да |
||
|
Будет ли расчет автоматически запущен при обновлении свойств или связей объекта, связанного с ним. |
булево |
да |
||
|
Идентификатор атрибута сущности, в который необходимо записать значение результата расчета. Необходимо заполнить, если нужно вывести в интерфейс результат расчета, возвращающего не число. |
строка |
нет |
||
|
массив объектов |
нет |
|||
|
Условия пре-маппинга — преобразования входных значений перед подстановкой в выражение |
объект |
нет |
||
|
Условия пост-маппинга — преобразования результата расчета в требуемый выходной формат. |
объект |
нет |
Правила описания формулы расчета
В поле expression следует указать формулу для расчета согласно следующим правилам:
-
В формулах можно использовать следующие аргументы:
-
целые и дробные числовые константы;
-
строковые константы;
-
дату и время;
-
логические значения (
true,false); -
все атрибуты сущности, указанной в поле
entityрасчета, которые имеют типыTimestamp,Date,Time,String,Bool,Decimal,IntegerиFloat; -
глобальные переменные типов
Integer,Float; -
расчеты для сущностей, связанных с текущей сущностью. Связь должна быть настроена в схеме домена в поле
linkagesописания текущей сущности.Расчеты для связанных сущностей нужно обязательно указать в поле
children. В таком случае расчет для текущей сущности называется родительским, а расчеты для связанных сущностей — дочерними.
-
-
Для числовых аргументов в формулах поддерживаются все операции, реализованные в библиотеке JavaScript math.js, а также ряд дополнительных функций.
-
Для нечисловых аргументов (строка, дата, логический) поддерживаются дополнительные функции.
Пример формулы
- id: test_calc
name: Тестовый расчет
entity: test_domain/TestEntity
expression: "roundTo(2 * {field:weight} / {variable:divisor}, 2)"
auto_recalculation: false
complexity_limit: 1
Здесь:
-
roundTo— вызов дополнительной функции округления до двух знаков после запятой. -
2— числовая константа. -
{field:weight}— значение поляweightсущностиTestEntity. -
{variable:divisor}— значение глобальной переменнойdivisor.
Ссылки на атрибуты, переменные и скрипты следует указывать в фигурных скобках, например, {variable:divisor}.
|
Применение скриптов в расчетах
В поле expression можно указать идентификатор скрипта, который будет выполнен при запуске расчета. В расчете будет использоваться значение, возвращенное скриптом.
| Результатом работы скрипта должно быть конечное число. Автоматическая валидация возвращаемого значения в системе не предусмотрена, поэтому разработчик скрипта должен реализовать его так, чтобы он возвращал только числа. |
Пример формулы, дополненный вызовом скрипта
- id: test_calc
name: Тестовый расчет
entity: test_domain/TestEntity
expression: |
mean(
2 * {field:weight} / {variable:divisor},
{script:test_calculation_script}
)
auto_recalculation: false
complexity_limit: 11
Здесь:
-
{script:test_calculation_script}— вызов скриптаtest_calculation_script.
|
Минимально допустимое значение |
Дочерние расчеты
Дочерние расчеты — это расчеты для связанных сущностей, участвующие в расчете для текущей сущности (родительском расчете). Ссылки на них следует указать в поле children родительского расчета.
Ссылка на дочерний расчет содержит следующие поля:
-
linkage— идентификатор связи между сущностью, для которой выполняется родительский расчет, и сущностью, для которой выполняется дочерний расчет. Связь должна быть настроена в схеме домена в полеlinkagesописания сущности, для которой выполняется родительский расчет. -
calculation— идентификатор дочернего расчета.
Дочерний расчет выполняется для всех сущностей, связанных с текущей, поэтому его результат всегда интерпретируется системой как массив. Чтобы преобразовать результат дочернего расчета в одно значение, используйте функции массивов, такие как min, max или sum для числовых значений или strConcat для строк.
|
Пример настройки дочернего расчета
- id: test_calc_with_child
name: Тестовый расчет с дочерним
entity: test_domain/TestEntity
expression: |
mean(
2 * {field:weight},
sum({calculation:child_calc})
)
children:
- linkage: test_domain/TestEntity_ChildEntity
calculation: child_calc
auto_recalculation: true
complexity_limit: 200
- id: child_calc
name: Дочерний расчет
entity: test_domain/ChildEntity
expression: "{script:child_calculation_script}"
auto_recalculation: true
complexity_limit: 100
Здесь:
-
Результат дочернего расчета преобразован в одно значение с помощью функции
sum:sum({calculation:child_calc}). -
test_domain/TestEntity_ChildEntity— идентификатор связи между сущностямиTestEntityиChildEntity, заданной в схеме доменаtest_domainв разделеlinkagesописания сущностиTestEntity. -
child_calc— идентификатор дочернего расчета.
Преобразование входных и выходных данных: поля pre_mapping и post_mapping
Схемы автоматизации позволяют преобразовывать входные данные перед их использованием в расчетах и выходные — для приведения к требуемому формату. Для этого в атрибутах расчета следует указать условия маппинга.
Существуют следующие виды маппинга:
-
Пре-маппинг — преобразования входных значений перед подстановкой в формулу расчета. Настраиваются в атрибуте расчета
pre_mapping. -
Пост-маппинг — преобразования результата расчета в требуемый выходной формат. Настраиваются в атрибуте расчета
post_mapping.
|
Пример использования пре-маппинга и пост-маппинга
Пусть требуется определить уровень риска как произведение оценки его вероятности на оценку ущерба. Вероятность и оценка ущерба указываются пользователем в интерфейсе системы в виде строки: Низкая, Средняя или Высокая. Уровень риска, вычисленный в результате расчета, также требуется отобразить в интерфейсе в виде строки. В этом случае в блоке пре-маппинга необходимо настроить соответствие качественных значений вероятности и ущерба числовым множителям, например:
В блоке пост-маппинга следует настроить соответствие диапазона, в котором находится результат расчета, текстовой характеристике этого диапазона, например:
|
Объект маппинга имеет следующую структуру:
-
Вид маппинга:
pre_mappingилиpost_mapping. -
Для пре-маппинга:
-
Для маппинга типа
list,enumилиrange: идентификатор атрибута сущности, для которой выполняется расчет (сущности, указанной в атрибутеentityрасчета). -
Для маппинга типа
matrix: идентификатор матрицы, который будет использоваться в формуле расчета с префиксомcomputed.
-
-
Атрибуты маппинга:
Поле Описание Тип данных Обязательное поле typeстрока
да
enumFQID перечисления, значения которого сопоставляются со значениями из
values.Задается в формате
<domain_schema_id>/<enum_id>, где<domain_schema_id>— идентификатор схемы домена, а<enum_id>— идентификатор перечисления.строка
да для маппинга типа
enumrowИдентификатор атрибута типа
Enum, значения которого являются строками матрицы маппинга типаmatrix.Задается в формате
{field:<enum_id>}, где<enum_id>— идентификатор перечисления.строка
да для маппинга типа
matrixcolumnИдентификатор атрибута типа
Enum, значения которого являются столбцами матрицы маппинга типаmatrix.Задается в формате
{field:<enum_id>}, где<enum_id>— идентификатор перечисления.строка
да для маппинга типа
matrixvaluesСловарь (для маппингов типа
listиenum) или массив (для маппинга типаrange) соответствия входных и выходных показателей.словарь, массив
да
default_valueЗначение по умолчанию, если значение на входе маппинга не найдено в словаре
values.логическое, строка, число
да
Обращаться к результату пре-маппинга в формуле expression расчета следует:
-
В случае маппинга типа
list,enumилиrange— через префиксfield:{field:<attribute>}Здесь:
-
<attribute>— идентификатор атрибута сущности, для которой выполняется расчет.
Пример обращения к результату пре-маппинга типа
enum- id: issue_criticality name: Уровень критичности замечания entity: evo.compliance.audit/Issue expression: "{field:criticalityLevel}" pre_mapping: criticalityLevel: type: enum enum: evo.compliance.audit/CriticalityLevelEnum default_value: 0 values: critical: 1 high: 0.75 medium: 0.5 low: 0.25Здесь
criticalityLevel— атрибут сущностиevo.compliance.audit/Issue, значение которого преобразуется из строки в число с помощью пре-маппинга. -
-
В случае маппинга типа
matrix— через префиксcomputed:{computed:<matrix_id>}Здесь:
-
<matrix_id>— идентификатор матрицы маппинга.
Пример обращения к результату пре-маппинга типа
matrix- id: risk_level name: Уровень риска entity: evo.compliance.risk/Risk expression: "{computed:riskLevel}" pre_mapping: riskLevel: type: matrix row: "{field:riskProbability}" column: "{field:riskDamage}" default_value: Низкий values: - row: Низкая column: Низкий value: Низкий - row: Низкая column: Высокий value: Средний - row: Высокая column: Низкий value: Средний - row: Высокая column: Высокий value: Высокий -
Типы маппинга показателей
В системе существуют следующие типы маппинга:
Маппинг типа list
Маппинг типа list используется для сопоставления пар входных и выходных значений.
Пример маппинга типа list
Пре-маппинг:
pre_mapping:
isCritical:
type: list
default_value: 0
values:
true: 1
false: 0.5
Интерпретация примера: у сущности есть логический атрибут Критичная с идентификатором isCritical. Если флажок Критичная в представлении сущности установлен, в расчете для сущности будет использован коэффициент 1, иначе — 0.5.
Пост-маппинг:
post_mapping:
type: list
default_value: Не определена
values:
0.1: Минимальная
0.5: Средняя
1.0: Критическая
Интерпретация примера: расчет вернет следующий результат:
-
если формула в
expressionвернула 0.1 —Минимальная; -
0.5 —
Средняя; -
1.0 —
Критическая; -
любое другое значение —
Не определена.
Маппинг типа enum
Маппинг типа enum используется для сопоставления значений в схемах автоматизации и значений из перечисления (атрибута сущности типа Enum).
Пример маппинга типа enum
Пре-маппинг:
pre_mapping:
criticalityLevel:
type: enum
enum: issues/CriticalityLevelEnum
default_value: 0
values:
critical: 1
high: 0.75
medium: 0.5
low: 0.25
Интерпретация примера: в схеме домена issues определена сущность Замечание аудита (Issue). У замечания есть атрибут Уровень критичности, значения которого определены в перечислении CriticalityLevelEnum схемы домена issues:
-
critical— Критический; -
high— Высокий; -
medium— Средний; -
low— Низкий.
С помощью пре-маппинга текстовые значения преобразуются в числовые:
-
Критический —
1; -
Высокий —
0.75; -
Средний —
0.5; -
Низкий —
0.25.
Пост-маппинг:
post_mapping:
type: enum
enum: documents/DocumentStatusEnum
default_value: inactive
values:
active: true
inactive: false
Интерпретация примера: в схеме домена documents определено перечисление Статус документа (DocumentStatusEnum) с двумя возможными значениями — Активен (active) и Неактивен (inactive). Статус документа примет следующие значения в зависимости от результатов расчета:
-
Активен — если расчет вернет
true; -
Неактивен — если расчет вернет
falseили любое другое значение.
Маппинг типа range
Маппинг типа range используется, если требуется преобразовать число, лежащее в определенном диапазоне, в конкретное значение.
|
В массиве Границы интервалов должны пересекаться, например: Валидный маппинг
Границы интервалов Невалидный маппинг
Границы интервалов |
Пример маппинга типа range
Пре-маппинг:
pre_mapping:
subjectCount:
type: range
default_value: 1
values:
- from: 0
to: 10000
value: 0.2
- from: 10000
to: 50000
value: 0.5
Интерпретация примера: у сущности есть числовой атрибут Количество субъектов персональных данных с идентификатором subjectCount. Его значения преобразуются при пре-маппинге следующим образом:
-
от 0 до 10 000 включительно —
0.2; -
от 10 000 до 50 000 включительно —
0.5; -
более 50 000 —
1.
Пост-маппинг:
post_mapping:
type: range
default_value: Низкая
values:
- from: 25
to: 75
value: Средняя
- from: 75
to: 100
value: Высокая
Интерпретация примера: пусть требуется оценить показатель эффективности сущности. Итоговая оценка будет сформирована следующим образом:
-
Если оценка ниже 25, включая отрицательные значения, расчет вернет значение Низкая.
-
Если оценка находится между 25 и 75 включительно, расчет вернет значение Средняя.
-
Если оценка находится между 75 и 100 включительно, расчет вернет значение Высокая.
Маппинг типа matrix
Маппинг типа matrix позволяет получить единый показатель из значений двух атрибутов сущности типа Enum. Для этого строится матрица маппинга, в которой значения одного атрибута являются строками, а второго — столбцами. На пересечении строк и столбцов находятся значения, которые вернет маппинг.
|
Маппинг типа К результату пре-маппинга типа |
Пример пре-маппинга типа matrix
Пусть есть матрица уровня риска, формируемая на основе вероятности реализации риска и оценки ущерба от его реализации. В этом случае можно составить следующую матрицу:
| Оценка ущерба от реализации риска | ||
|---|---|---|
Вероятность реализации риска |
Низкий |
Высокий |
Низкая |
Низкий |
Средний |
Высокая |
Средний |
Высокий |
Значение уровня риска можно получить из этой матрицы следующим образом
pre_mapping:
riskLevel:
type: matrix
row: "{field:riskProbability}"
column: "{field:riskDamage}"
default_value: Низкий
values:
- row: Низкая
column: Низкий
value: Низкий
- row: Низкая
column: Высокий
value: Средний
- row: Высокая
column: Низкий
value: Средний
- row: Высокая
column: Высокий
value: Высокий
Обобщающие расчеты: поле summary_calculations
Обобщающие расчеты — это расчеты, позволяющие вычислить метрики для сущностей, для которой нет обобщающей сущности: например, среднее время выполнения задач операторами.
В схеме автоматизации обобщающие расчеты настраиваются в поле summary_calculations.
|
В обобщающем расчете можно использовать только результаты других расчетов, созданных в этой же схеме. Чтобы использовать свойство сущности в обобщающем расчете, это свойство нужно указать в поле |
Обобщающий расчет имеет следующую структуру:
| Поле | Описание | Тип данных | Обязательное поле |
|---|---|---|---|
|
Уникальный идентификатор расчета, по которому можно сослаться на расчет. Должен быть уникальным в пределах схемы автоматизации. Можно использовать UUID в качестве значения. |
строка |
да |
|
Имя расчета, отображаемое в интерфейсе. |
строка |
да |
|
Краткое описание назначения расчета. |
строка |
нет |
|
Математическая формула для обобщающего расчета. |
строка |
да |
Пример обобщающего расчета
calculations:
- id: task_processing_time
name: Время обработки задачи
entity: test_tasks/Task
expression: "{field:processing_time}"
auto_recalculation: true
complexity_limit: 1
summary_calculations:
- id: mean_task_processing_time
name: Среднее время обработки задачи
expression: "mean({calculation:task_processing_time})"
Здесь:
-
task_processing_time— расчет, возвращающий время выполнения одной задачи. -
mean_task_processing_time— обобщающий расчет, возвращающий среднее время выполнения всех задач в системе.
Политики: поле policies
Поле policies содержит объекты политик — правил автоматизированной обработки сущностей системы. Каждая политика включает:
-
Условие запуска действия. Условие может быть задано как:
-
логическое выражение;
-
расчет, выражение которого в поле
expressionвозвращаетTrueилиFalse.
-
-
Действие, выполняемое, если условие истинно. Поддерживаются следующие действия:
Объект политики имеет следующую структуру:
| Поле | Описание | Тип данных | Обязательное поле |
|---|---|---|---|
|
Уникальный идентификатор политики. Должен быть уникальным в пределах схемы автоматизации. Можно использовать UUID в качестве значения. |
строка |
да |
|
Имя политики, отображаемое в интерфейсе. |
строка |
да |
|
Краткое описание назначения политики. |
строка |
нет |
|
FQID сущности, к которой применяется политика. |
строка |
да |
|
Массив условий срабатывания политики. См. правила описания условий. |
массив объектов |
да |
|
Массив действий, выполняемых при срабатывании политики. См. правила описания действий. |
массив объектов |
да |
Правила описания условий срабатывания политики
Условия в массиве политики (policy → conditions) объединяются логическим И (AND), однако вложенные условия (policy → conditions → conditions) объединяются логическим ИЛИ (OR).
|
Объект условия имеет следующую структуру:
| Поле | Описание | Тип данных | Обязательное поле | ||||
|---|---|---|---|---|---|---|---|
|
Тип условия:
|
строка |
нет, если в поле |
||||
|
Логическое выражение, при истинности которого запускается действие, указанное в
В выражении можно использовать следующие аргументы:
|
строка |
да для условия типа |
||||
|
Идентификатор расчета, формула
Можно указать:
|
строка |
да для условия типа |
||||
|
Массив вложенных условий срабатывания политики.
|
массив объектов |
нет |
Правила описания действий политики
Действия в массиве политики (policy → actions) выполняются последовательно, однако вложенные действия (policy → actions → actions) выполняются параллельно.
|
Объект действия имеет следующую структуру:
| Поле | Описание | Тип данных | Обязательное поле | ||
|---|---|---|---|---|---|
|
Тип действия:
|
строка |
да |
||
|
Идентификатор скрипта или плейбука, который требуется запустить. |
строка |
да для действия типа |
||
|
Дополнительные параметры запуска скрипта или плейбука в формате |
словарь |
нет |
||
|
Время в миллисекундах ожидания сервисом автоматизации поступления новых объектов в стрим NATS. Если за указанное время не поступают новые объекты, выполнение действий политики считается завершенным по таймауту. |
число |
да для действия типа |
||
|
Заголовок финального объекта, который сигнализирует о завершении обработки объектов при действии Значение по умолчанию — |
строка |
да для действия типа |
||
|
Идентификатор расчета, который будет запускаться при срабатывании политики. Можно указать:
|
строка |
да для действия типа |
||
|
Массив вложенных действий при срабатывании политики.
|
массив объектов |
нет |
|
Код скрипта или плейбука, запускаемого при срабатывании политики (указанного в поле
Чтобы использовать значение контекстной переменной внутри скрипта или плейбука, получите его из контекста выполнения, используя следующий синтаксис:
Здесь:
Пример использования контекстной переменной:
|
Примеры схем автоматизации
Пример расчетов в схеме автоматизации
В данном разделе приведен пример настройки расчетов в схеме автоматизации.
id: evo.compliance.audit.automation
name: audit_automation
description: Автоматизация для аудитов
type: calculation_schema
tags: [audit, automation]
version: 1.0.0
status: stable
author: John Doe <johndoe@example.com>
calculations:
- id: audit_assessment_sum_compliance_index
name: Сумма индексов соответствия
entity: evo.compliance.audit/Audit
expression: |
round(
sum({calculation:audit_assessment_compliance_index}),
{variable:audit_assessment_compliance_index_round}
)
children:
- linkage: evo.compliance.audit/Audits_RequirementValues
calculation: audit_assessment_compliance_index
auto_recalculation: true
complexity_limit: 100
- id: issue_weighted_criticality
name: Взвешенный уровень критичности замечания
entity: evo.compliance.audit/Issue
expression: |
{field:criticalityLevel} *
{calculation:audit_assessment_compliance_index}
children:
- linkage: evo.compliance.audit/Issues_RequirementValues
calculation: audit_assessment_compliance_index
auto_recalculation: true
complexity_limit: 100
pre_mapping:
criticalityLevel:
type: enum
enum: evo.compliance.audit/CriticalityLevelEnum
default_value: 0
values:
critical: 1
high: 0.75
medium: 0.5
low: 0.25
post_mapping:
type: range
default_value: Низкий
values:
- from: 0.5
to: 1.5
value: Средний
- from: 1.5
to: 2.0
value: Высокий
- id: audit_assessment_compliance_index
name: Индекс соответствия, вычисленный через скрипт
entity: evo.compliance.audit/Requirement
expression: "{script:calculate_comp_index}"
auto_recalculation: true
complexity_limit: 20
- id: progress_metric
name: Прогресс аудита в процентах
entity: evo.compliance.audit/Audit
expression: "{field:progress}"
auto_recalculation: true
complexity_limit: 1
- id: is_kii
name: Аудит объекта КИИ
entity: evo.compliance.audit/Audit
expression: |
strIncludes({field:name}, "КИИ")
auto_recalculation: true
complexity_limit: 1
target: isKii
summary_calculations:
- id: mean_audit_progress
name: Средний прогресс по аудиту
expression: "mean({calculation:progress_metric})"
Интерпретация примера
Метаданные схемы автоматизации
-
id: идентификатор схемы автоматизации —evo.compliance.audit.automation. -
name: наименование схемы автоматизации —audit_automation. -
description: описание схемы автоматизации — "Автоматизация для аудитов". -
type: тип элемента экспертизы —calculation_schema. -
tags: теги схемы автоматизации, используемые для классификации —audit, automation. -
version: версия схемы автоматизации —1.0.0. -
status: статус разработки схемы —stable. -
author: автор схемы автоматизации —John Doe <johndoe@example.com>.
Расчеты
Схема содержит следующие расчеты:
-
audit_assessment_sum_compliance_index— сумма индексов соответствия требований аудита, округленная до количества разрядов, определенного глобальной переменнойaudit_assessment_compliance_index_round. Индексы соответствия отдельных требований вычисляются с помощью дочернего расчетаaudit_assessment_compliance_index. -
issue_weighted_criticality— взвешенный уровень критичности замечания о несоответствии требованию. Рассчитывается как произведение уровня критичности замечания, заданного в виде перечисления, и индекса соответствия требования.-
С помощью пре-маппинга текстовое значение уровня критичности замечания преобразуется в числовой множитель.
-
С помощью пост-маппинга результат вычисления уровня критичности интерпретируется как строка.
-
Индекс соответствия требования вычисляется с помощью дочернего расчета
audit_assessment_compliance_index.
-
-
audit_assessment_compliance_index— индекс соответствия требования, вычисляемый скриптомcalculate_comp_index. -
progress_metric— расчет, возвращающий значение поля прогресса аудитаprogressдля обобщающего расчетаmean_audit_progress. -
is_kii— расчет, записывающий в атрибут аудитаisKiiлогическое значение:true, если наименование аудита содержит подстроку "КИИ" (аудит проводится по объекту КИИ),falseиначе.
Обобщающие расчеты
Схема содержит обобщающий расчет mean_audit_progress, вычисляющий средний прогресс по аудитам в системе с помощью расчета progress_metric.
Пример политик в схеме автоматизации
В данном разделе приведены примеры настройки политик в схеме автоматизации.
Пример настройки политики без вложенности
id: evo.vulnerability.policy.basic
type: calculation_schema
name: Базовая политика создания задач на устранение уязвимостей
tags: [vulnerabilities, policy, automation]
version: 1.0.0
status: stable
author: John Doe <johndoe@example.com>
policies:
- id: create_task_if_vulnerability_is_critical
name: Создать задачу, если уязвимость критическая
entity: vulnerabilities.rvision.ru/Vulnerability
conditions:
- type: expression
expression: 'equalText({field:criticalityLevel}, "Критический")'
actions:
- type: playbook
playbook: create_tasks_from_critical_vulnerabilities
Интерпретация примера
Схема содержит политику create_task_if_vulnerability_is_critical — автоматическое создание задач для уязвимостей с уровнем Критический:
-
Условие запуска политики типа
expressionсодержит выражение, которое возвращаетTrue, если уровень уязвимости — Критический. В выражении используется функцияequalTextиз библиотеки math.js. -
Действие политики — запуск плейбука
create_tasks_from_critical_vulnerabilitiesдля каждой критической уязвимости.
Пример настройки политики со вложенными условиями и действиями
id: evo.vulnerability.policy.nested
type: calculation_schema
name: Политика обработки уязвимостей со вложенными условиями и действиями
tags: [vulnerabilities, policy, automation]
version: 1.0.0
status: stable
author: John Doe <johndoe@example.com>
calculations:
- id: vuln_is_risk
auto_recalculation: true
name: Является ли уязвимость критичной
entity: vulnerabilities.rvision.ru/Vulnerability
complexity_limit: 1
expression: '{field:cvssScore} > 7'
policies:
- id: escalate_if_high_risk_or_calc
name: Эскалировать обработку уязвимости
description: Пример сложного условия с вложенными условиями и действиями
entity: vulnerabilities.rvision.ru/Vulnerability
conditions:
- type: expression
expression: 'equalText({field:status}, "Открыта")'
- conditions:
- type: calculation
calculation: vuln_is_risk
- type: expression
expression: 'equalText({field:criticalityLevel}, "Критический")'
actions:
- type: playbook
playbook: notify_responsible_employee
extraparams:
priority: "high"
source: "policy"
- type: calculation
calculation: vulnerability.calculations/vuln_calculation
- actions:
- type: playbook
playbook: create_link_incident
extraparams:
urgency: "critical"
- type: playbook
playbook: create_link_task
extraparams:
type: "vulnTask"
Интерпретация примера
Схема содержит следующие элементы:
-
Расчет
vuln_is_risk, который возвращаетTrue, если рейтинг CVSS уязвимости (cvssScore) больше 7,False— иначе. -
Политика
escalate_if_high_risk_or_calcзапускает эскалацию необходимости обработать уязвимость.-
Политика срабатывает при выполнении обоих условий (логическое И):
-
статус уязвимости — Открыта;
-
выполняется одно из двух вложенных условий (логическое ИЛИ): расчет
vuln_is_riskдля уязвимости возвращаетTrueили уровень критичности уязвимости — Критический.
-
-
При срабатывании политики последовательно выполняются следующие действия:
-
Плейбук
notify_responsible_employeeсоздает оповещение для ответственного за устранение уязвимости. Плейбук получает на вход параметры приоритета (priority) и источника оповещения (source). -
Выполняется расчет
vuln_calculation, определенный в схеме автоматизацииvulnerability.calculations. -
Параллельно запускаются плейбуки создания инцидента
create_link_incidentи задачиcreate_link_task, связанных с уязвимостью.
-
-
Запуск расчетов и отображение их результатов
Способы запуска расчетов и вывода их в интерфейс системы описаны в разделе Запуск расчетов и отображение их результатов.
Запуск политик
Настраивать запуск политик необходимо в разделе Автоматизация → Политики веб-интерфейса системы.
Была ли полезна эта страница?