Создание базовой схемы домена
Данное руководство описывает процесс создания схемы домена на примере домена индикаторов компрометации.
О доменах и сущностях
Домен — это предметная область системы, содержащая определенные объекты и их взаимосвязи. Структура данных в домене и конфигурация его интерфейса определяются в схеме домена.
Сущность — это логическая модель объекта, являющаяся ключевым элементом схемы домена. Для описания каждого типа объекта создаются отдельные сущности в схеме.
В данном руководстве описано создание схемы домена на примере индикаторов компрометации. Индикатор компрометации — это сущность, которая хранит информацию о потенциальной или подтвержденной угрозе. В описанной схеме индикатор имеет следующие основные характеристики:
-
поле «Тип, значения которого заданы фиксированным списком: IP-адрес, домен, URL, email, хэш, аккаунт, файл.
-
конкретное значение, например,
192.0.2.0,example.net,mail@example.comи т. д.
В создании схемы можно выделить следующие этапы:
Заполнение метаданных схемы
Заполните поля метаданных на верхнем уровне схемы домена:
-
id: уникальный идентификатор схемы. Идентификатор должен представлять собой FQDN — Fully Qualified Domain Name. -
name: название схемы. Допустимы строчные и прописные буквы латинского и кириллического алфавитов, цифры, точки, подчеркивания и дефисы. В названии не должно быть пробелов. -
version: версия схемы согласно стандартам Semantic Versioning. -
type: укажите типdomain. -
author(опциональное): имя и контактные данные автора. -
description(опциональное): краткое описание назначения домена. -
status(опционально): статус разработки текущей версии. -
date(опционально): дата создания схемы. -
tags(опциональное): теги для классификации. Заключаются в квадратные скобки и разделяются запятыми.
| Комментарии в схеме домена начинаются с символа решетки. |
id: iocs.test
type: domain
version: 0.0.1
name: IOCs Domain
description: Домен индикаторов компрометации
status: test
date: 2025-08-01
author: John Doe
tags: [iocs]
Определение сущности и типов данных
Создание сущности
Массив сущностей задается в поле entities схемы домена. Заполните поля названия и описания сущности:
-
id: уникальный идентификатор сущности. Может содержать только прописные и строчные буквы латинского алфавита, цифры и подчеркивание. -
name(опциональное): название сущности; -
description(опциональное): краткое описание сущности.
entities:
# Сущность Индикатор.
- id: Ioc
name: Индикатор
description: Индикатор компрометации
Описание атрибутов сущности
Атрибут — это поле, описывающее отдельную характеристику объекта. Массив атрибутов задается в поле attributes в описании сущности.
| Кроме обычных атрибутов, для каждого объекта система автоматически создает набор системных атрибутов и заполняет их значения, например, время создания и изменения объекта. |
Заполните для каждого атрибута поля:
-
id: уникальный идентификатор атрибута; -
name: название атрибута; -
description: описание атрибута; -
dataType: тип данных атрибута; -
readonly(опционально): переключатель возможности редактирования атрибута.
Опишем атрибут, который может иметь произвольные значения в рамках заданного типа:
entities:
# Сущность Индикатор.
- id: Ioc
...
attributes:
- id: value
name: Значение
description: Значение индикатора компрометации
# Тип - строка.
dataType: String
...
Описание атрибута с пользовательским типом данных "перечисление"
В схеме домена можно определять пользовательские типы данных для атрибутов. Пользовательские типы основаны на типах данных, доступных в системе. Например, с их помощью можно описывать перечисления — жестко заданные списки значений.
Пользовательские типы данных описываются в поле dataTypes на верхнем уровне схемы домена. Заполните поля:
-
id: уникальный идентификатор пользовательского типа данных; -
name(опциональное): название типа данных; -
description(опциональное): описание типа данных; -
dataType: укажите типEnum; -
values: массив возможных значений в типе данных.
Для каждого значения в перечислении укажите:
-
id: идентификатор значения; -
name(опциональное): название значения; -
description(опциональное): описание значения.
Опишем перечисления для атрибута, который хранит типы индикаторов:
dataTypes:
- id: enumIocTypes
name: Типы индикаторов компрометации
dataType: Enum
values:
- id: Account
name: Аккаунт
- id: File
name: Файл
- id: Domain
name: Домен
- id: URL
name: URL
- id: Email
name: Email
- id: IP
name: IP
- id: IPv6
name: IPv6
- id: MD5Hash
name: Хэш MD5
- id: SHA1Hash
name: Хэш SHA-1
- id: SHA256Hash
name: Хэш SHA-256
Создадим атрибут с пользовательским типом данных:
entities:
# Сущность Индикатор.
- id: Ioc
...
attributes:
...
- id: type
name: Тип
description: Тип индикатора компрометации
# Ссылка на пользовательский тип данных.
dataType: enumIocTypes
Настройка интерфейса
Интерфейс для работы с объектами позволяет просматривать объекты и выполнять с ними различные действия.
Действия, доступные в домене, описываются в поле actions.
Интерфейс объектов и списков объектов в различных контекстов описывается в поле views схемы домена. Сюда, например, относятся наборы отображаемых полей в модальных окнах и панелях, а также виджеты для действий над объектами. Все описания привязываются к конкретному идентификатору сущности.
Для настройки интерфейса объекта необходимо описать:
-
В поле
widgets-- виджеты для отображения действий с объектами, связей между объектами и их атрибутов.Виджеты описываются только в интерфейсе объекта. Ссылаться на описанные виджеты можно из описаний как интерфейса объекта, так и списка объектов. -
В поле
groups— группы элементов:-
блоки, включающие объявленные ранее виджеты;
-
вкладки, состоящие из блоков, а также формы создания и редактирования объектов;
-
-
В поле
views— панели и модальные окна, состоящие из объявленных групп.
Настроим базовый интерфейс с таблицей объектов, кнопками для создания и удаления объектов, а также возможностью просмотра информации об объекте в боковой панели при нажатии на строку.
Отображаемое название сущности
Название сущности, отображаемое в интерфейсе, можно задать в поле label в описании сущности. Название может содержать шаблоны со ссылками на атрибуты. В интерфейсе на месте шаблонов будут подставлены значения соответствующих атрибутов объекта.
Добавим в название оба атрибута сущности:
entities:
# Сущность Индикатор.
- id: Ioc
...
# Ссылки на атрибуты сущности.
label: "{type}: {value}"
...
Создание представления объекта
Заполните следующие поля в описании интерфейса:
-
id: идентификатор интерфейса; -
type: укажите тип интерфейсаentity; -
entity: ссылка на сущность.
views:
# Представление Индикатора.
- id: viewIoc
type: entity
# Сущность Индикатор.
entity: Ioc
...
Настройка создания объекта
Чтобы настроить создание объекта в домене, опишите в схеме:
-
виджеты атрибутов объекта;
-
форму создания с виджетами атрибутов;
-
модальное окно с формой создания;
-
действие создания, вызывающее модальное окно;
Настройка виджетов атрибутов
Виджеты атрибутов используются для отображения определенных атрибутов сущности. Виджеты ссылаются на атрибуты, объявленные ранее в схеме домена, или на системные атрибуты.
Создайте в блоке widgets записи для каждого виджета со следующими полями:
-
id: уникальный идентификатор виджета; -
type: укажите тип виджетаattribute. -
attribute: ссылка на отображаемый атрибут. -
description(опциональное): описание виджета.
views:
# Представление Индикатор.
- id: viewIoc
...
widgets:
- id: editors_iocType
type: attribute
# Ссылка на атрибут типа.
attribute: type
description: Поле для ввода типа индикатора
- id: editors_iocValue
type: attribute
# Ссылка на атрибут значения.
attribute: value
description: Поле для ввода значения индикатора
...
Настройка формы
Чтобы описать форму создания индикатора, создайте в поле groups запись со следующими полями:
-
id: идентификатор группы элементов; -
description(опциональное): описание группы; -
type: укажите типform; -
layout: настройки взаимного расположения элементов в группе.-
direction— направление, в котором размещаются элементы:column— по вертикали,row— по горизонтали.
-
-
components: массив ссылок на элементы группы, в данном случае на виджеты, объявленные ранее.
views:
# Представление Индикатора.
- id: viewIoc
...
groups:
- id: blocks_forms_newIoc
description: Блок формы для создания индикатора
type: form
layout:
# Вертикальное расположение.
direction: column
components:
# Ссылки на виджеты атрибутов Индикатора.
- widget: editors_iocType
- widget: editors_iocValue
Настройка модального окна
Чтобы описать модальное окно, создайте в поле views в описании интерфейса объекта запись со следующими полями:
-
id: уникальный идентификатор модального окна; -
description(опциональное): описание модального окна; -
type: укажите типmodal -
form: ссылка на объявленную группу с типомform; -
label(опциональное): заголовок модального окна.
views:
# Представление Индикатора.
- id: viewIoc
...
views:
- id: forms_newIoc
description: Форма создания индикатора
type: modal
# Ссылка на Блок формы.
form: blocks_forms_newIoc
label: Добавление индикатора
Настройка действия создания
Создайте в поле actions запись со следующими полями:
-
id: уникальный идентификатор действия; -
name: название действия; -
type: укажите тип действияopen_modal— открытие модального окна; -
modal: ссылка на модальное окно, которое вызывается при данном действии; -
entity: сущность, с которой производится действие; -
operation: тип операции над объектом. Для действий с открытием модального окна доступны:-
create— добавление объекта; -
edit— изменение выбранного объекта.
Для данного действия укажите тип
create. -
-
description(опциональное): описание действия.
actions:
# Действия с индикатором.
- id: actions_createIoc
name: Добавить
# Тип - открытие модального окна.
type: open_modal
# Ссылка на модальное окно.
modal: forms_newIoc
# Операция - создание.
operation: create
# Ссылка на сущность.
entity: Ioc
description: Открыть модальное окно создания индикатора
...
Настройка виджета действий
Виджеты действий используются для отображения действий над объектами. Виджеты ссылаются на действия, объявленные ранее в схеме домена.
Создайте в поле widgets запись для виджета со следующими полями:
-
id: уникальный идентификатор виджета; -
type: укажите тип виджетаaction. -
action: ссылка на действие, запускаемое при нажатии на виджет; -
control: элемент управления, включает поля:-
type: укажите типregular_button; -
label: название действия в интерфейсе;
-
-
description(опциональное): описание виджета.
views:
# Представление Индикатора.
- id: viewIoc
...
widgets:
- id: buttons_createIoc
type: action
# Ссылка на действие.
action: actions_createIoc
description: Кнопка, которая запускает действие создания индикатора. Действие открывает модальную форму создания записи.
control:
type: regular_button
label: Добавить
...
Настройка панели просмотра объекта
Чтобы настроить просмотр объекта, опишите в схеме домена:
-
виджеты атрибутов объекта;
-
блок и вкладку с виджетами атрибутов;
Чтобы добавить на панель виджеты или блоки, сначала разместите их на вкладке, а затем добавьте вкладку на панель. -
панель с вкладкой информации;
-
действие открытия, вызывающее панель просмотра.
Настройка блока
Чтобы описать блок с виджетами атрибутов, создайте в поле groups запись со следующими полями:
-
id: идентификатор блока; -
description(опциональное): описание блока; -
type: укажите типblock; -
layout: настройки взаимного расположения элементов в блоке, включает полеdirection— направление размещения. -
components: массив ссылок на элементы блока, в данном случае на виджеты атрибутов, уже объявленные ранее.
views:
# Представление Индикатора.
- id: viewIoc
...
groups:
- id: blocks_infoIoc
description: Информация об индикаторе
type: block
layout:
# Расположение - вертикальное.
direction: column
components:
# Ссылки на виджеты атрибутов Индикатора.
- widget: editors_iocType
- widget: editors_iocValue
Настройка вкладки
Чтобы добавить блок с виджетами на панель, создайте в поле groups запись вкладки со следующими полями:
-
id: идентификатор группы; -
description(опциональное): описание группы; -
type: укажите типtab; -
label(опциональное): заголовок вкладки. -
components: массив ссылок на элементы группы, в данном случае на блок, объявленный ранее.
views:
# Представление Индикатора.
- id: viewIoc
...
groups:
- id: tabs_infoIoc
description: Информация об индикаторе
# Тип группы - вкладка.
type: tab
label: Детали
components:
# Ссылка на блок информации.
- block: blocks_infoIoc
Настройка панели
Чтобы описать панель, создайте в поле views в описании интерфейса объекта запись со следующими полями:
-
id: уникальный идентификатор панели; -
description(опциональное): описание панели; -
type: укажите типpanel; -
label(опциональное): заголовок панели;Чтобы в названии отображались значения атрибутов конкретного объекта, используйте шаблон со ссылками на атрибуты в фигурных скобках. -
tabs: массив ссылок на объявленные вкладки.
views:
# Представление Индикатора.
- id: viewIoc
...
views:
- id: panels_infoIoc
description: Детали индикатора
type: panel
# Шаблоны для подстановки значений атрибутов.
label: "Ioc {type}: {value}"
tabs:
# Ссылка на вкладку.
- tab: tabs_infoIoc
Настройка действия просмотра
Создайте в поле actions запись со следующими полями:
-
id: уникальный идентификатор действия; -
name: название действия; -
type: укажите тип действияopen_panel; -
panel: ссылка на панель, которая вызывается при данном действии; -
entity: сущность, с которой производится действие; -
description(опциональное): описание действия.
actions:
# Действия с индикатором.
...
- id: actions_openIocPanel
name: Детали
# Тип - открытие панели.
type: open_panel
# Ссылка на панель.
panel: panels_infoIoc
entity: Ioc
description: Открыть панель с информацией об индикаторе
...
Настройка удаления объекта
Настройка действия удаления
Создайте в поле actions запись со следующими полями:
-
id: уникальный идентификатор действия; -
name: название действия; -
type: укажите тип действияbulk— массовое, так как это действие в списке объектов; -
entity: сущность, с которой производится действие; -
operation: укажите действиеremove -
description(опциональное): описание действия.
actions:
# Действия с индикатором.
- id: actions_bulkRemoveIocs
name: Удалить
# Тип - удаление.
type: remove
# Ссылка на сущность Индикатор.
entity: Ioc
description: Удалить индикатор
Настройка виджета действий
Создайте в поле widgets запись для виджета со следующими полями:
-
id: уникальный идентификатор виджета; -
type: укажите тип виджетаaction. -
action: ссылка на действие, запускаемое при нажатии на виджет; -
control: элемент управления, включает поля:-
type: укажите типregular_button; -
label: название действия в интерфейсе;
-
-
description(опциональное): описание виджета.
views:
# Представление Индикатора.
- id: viewIoc
...
widgets:
...
- id: buttons_removeIoc
type: action
# Ссылка на действие удаления.
action: actions_bulkRemoveIocs
description: Кнопка для удаления индикаторов
control:
type: regular_button
label: Удалить
Настройка интерфейса списка объектов
Чтобы настроить интерфейс списка объектов, опишите в схеме домена:
-
источник и название представления списка;
-
таблицу со списком объектов;
-
действия с объектами в списке:
-
кнопки на панели действий;
-
действия при нажатии на строки в таблице;
-
-
отображение списка в меню.
Создание представления списка
Заполните следующие поля в описании интерфейса:
-
id: идентификатор интерфейса; -
type: укажите тип интерфейсаlist; -
source: источник списка объектов, включает поля:-
type: укажите тип источникаoperational; -
entity: ссылка на сущность;
-
-
label(опциональное): название представления в интерфейсе.
views:
# Представление список индикаторов.
- id: lists_iocs
type: list
source:
type: operational
# Ссылка на сущность Индикатор.
entity: Ioc
label: Индикаторы компрометации
Настройка таблицы списка
Массив столбцов задается в поле columns внутри поля table в описании интерфейса. Описание столбца включает следующие поля:
-
id: уникальный идентификатор столбца; -
attribute: ссылка на атрибут, значение которого отображается в столбце; -
label: заголовок столбца; -
layout(опциональное): настройки отображения столбца. Включает полеwidthсо следующими настройками ширины столбца в пикселях:-
default: ширина по умолчанию; -
min: минимальная ширина; -
max: максимальная ширина.
-
views:
# Представление Списка индикаторов.
- id: lists_iocs
...
table:
columns:
- id: type
# Ссылка на атрибут типа.
attribute: type
label: Тип
layout:
width:
default: 100
min: 50
max: 100
- id: value
# Ссылка на атрибут значения.
attribute: value
label: Значение
layout:
width:
default: 100
min: 50
max: 150
- id: createdAt
# Ссылка на системный атрибут.
attribute: createdAt
label: Дата создания
layout:
width:
default: 100
min: 50
max: 100
...
Настройка действий в таблице
Укажите в поле selection значение true, чтобы можно было выбрать строки таблицы для удаления объектов.
Создайте запись действия в поле actions внутри поля table в описании интерфейса. Запись включает следующие поля:
-
type: укажите тип действияrow_click; -
action: ссылка на объявленное действие.
views:
# Представление Списка индикаторов.
- id: lists_iocs
...
table:
...
selection: true
actions:
# Тип - однократное нажатие.
- type: row_click
# Ссылка на действие открытия панели просмотра.
action: actions_openIocPanel
Настройка панели действий
Добавьте ссылки на объявленные в интерфейсе объекта виджеты действий в поле actionPanel в описании интерфейса списка.
views:
# Представление Списка индикаторов.
- id: lists_iocs
...
actionPanel:
# Ссылка на кнопку создания индикатора.
- widget: buttons_createIoc
# Ссылка на кнопку удаления индикатора.
- widget: buttons_removeIocs
...
Настройка меню домена
Массив пунктов меню домена задается в поле menus на верхнем уровне схемы. Создадим группу пунктов меню с названием домена, а также пункт со списком сущностей.
Заполните следующие поля:
-
id: уникальный идентификатор пункта меню; -
route: компонент пути в адресной строке; -
label: отображаемое название пункта меню; -
type: укажите типroot_groupдля корневой группы иmenuдля пункта; -
view: ссылка на представление списка объектов; -
description(опциональное): описание пункта меню; -
placement: расположение пункта в меню системы.
menus:
- id: menus_iocs
# Компонент адреса в браузере, относящийся к разделу домена.
route: /iocs
label: "Индикаторы компрометации"
# Тип - корневая группа.
type: root_group
description: Меню домена Индикаторы
# Расположение в главном меню системы.
placement: top
items:
# Идентификатор записи элемента меню для первого подраздела
- id: IndicatorsMenu
# Компонент адреса, относящийся к подразделу сущности в домене
route: /iocs/indicators
# Название пункта меню для подраздела Индикаторы.
label: Индикаторы компрометации
# Тип - пункт меню.
type: menu
# Ссылка на представление Списка индикаторов.
view: lists_iocs
# Описание пункта меню.
description: Меню раздела Индикаторы.
# Настройки отображения пункта меню
Пример схемы домена
Пример базовой схемы
id: iocs.test
type: domain
version: 0.0.1
name: IOCs Domain
description: Домен индикаторов компрометации
status: test
date: 2025-08-01
author: John Doe
tags: [iocs]
entities:
- id: Ioc
name: Индикатор
label: "{type}: {value}"
description: Индикатор компрометации
attributes:
- id: value
name: Значение
description: Значение индикатора компрометации
dataType: String
- id: type
name: Тип
description: Тип индикатора компрометации
dataType: enumIocTypes
dataTypes:
- id: enumIocTypes
name: Типы индикаторов компрометации
dataType: Enum
values:
- id: Account
name: Аккаунт
- id: File
name: Файл
- id: Domain
name: Домен
- id: URL
name: URL
- id: Email
name: Email
- id: IP
name: IP
- id: IPv6
name: IPv6
- id: MD5Hash
name: Хэш MD5
- id: SHA1Hash
name: Хэш SHA-1
- id: SHA256Hash
name: Хэш SHA-256
menus:
- id: menus_iocs
route: /iocs
label: "Индикаторы компрометации"
type: root_group
description: Меню домена Индикаторы
placement: top
items:
- id: IndicatorsMenu
route: /iocs/indicators
label: Индикаторы компрометации
type: menu
view: lists_iocs
description: Меню раздела Индикаторы.
actions:
- id: actions_createIoc
name: Добавить
type: open_modal
modal: forms_newIoc
entity: Ioc
operation: create
description: Открыть модальное окно создания индикатора
- id: actions_openIocPanel
name: Детали
type: open_panel
panel: panels_infoIoc
entity: Ioc
description: Открыть панель с информацией об индикаторе
- id: actions_bulkRemoveIocs
name: Удалить
type: remove
entity: Ioc
description: Удалить индикатор
views:
- id: viewIoc
type: entity
entity: Ioc
widgets:
- id: editors_iocType
type: attribute
attribute: type
description: Поле для ввода типа индикатора
- id: editors_iocValue
type: attribute
attribute: value
description: Поле для ввода значения индикатора
- id: buttons_createIoc
type: action
action: actions_createIoc
description: Кнопка, которая запускает действие создания индикатора. Действие открывает модальную форму создания записи.
control:
type: regular_button
label: Добавить
- id: buttons_removeIoc
type: action
action: actions_bulkRemoveIocs
description: Кнопка для удаления индикаторов
control:
type: regular_button
label: Удалить
groups:
- id: blocks_infoIoc
description: Информация об индикаторе
type: block
layout:
direction: column
expandable: false
components:
- widget: editors_iocType
- widget: editors_iocValue
- id: tabs_infoIoc
description: Информация об индикаторе
type: tab
label: Детали
components:
- block: blocks_infoIoc
- id: blocks_forms_newIoc
description: Блок формы для создания индикатора
type: form
layout:
direction: column
components:
- widget: editors_iocType
- widget: editors_iocValue
views:
- id: panels_infoIoc
description: Детали индикатора
type: panel
label: "Ioc {type}: {value}"
tabs:
- tab: tabs_infoIoc
- id: forms_newIoc
description: Форма создания индикатора
type: modal
form: blocks_forms_newIoc
label: Добавление индикатора
- id: lists_iocs
type: list
source:
type: operational
entity: Ioc
label: Индикаторы компрометации
actionPanel:
- widget: buttons_createIoc
- widget: buttons_removeIoc
table:
columns:
- id: type
attribute: type
label: Тип
layout:
width:
default: 100
min: 50
max: 100
- id: value
attribute: value
label: Значение
layout:
width:
default: 100
min: 50
max: 150
- id: createdAt
attribute: createdAt
label: Дата создания
type: timestamp
layout:
width:
default: 100
min: 50
max: 100
- id: updatedAt
attribute: updatedAt
label: Дата изменения
type: timestamp
layout:
width:
default: 100
min: 50
max: 100
selection: true
actions:
- type: row_click
action: actions_openIocPanel
Была ли полезна эта страница?