Аудит JEXL#

Аудит JEXL предназначен для регистрации фактов выполнения JEXL-скриптов.

Журнал позволяет определить:

  • кто выполнил скрипт;

  • когда началось и завершилось выполнение;

  • какой текст скрипта выполнялся;

  • чем завершился запуск;

  • с каким объектом-источником был связан запуск;

  • какие объекты доступа проверялись при выполнении администрируемого JEXL.

Основная форма просмотра реализована в Btk_JexlScriptAuditAvi. Запись и обслуживание таблиц выполняются через Btk_JexlScriptRunnerPkg. Вызов записи подключен через расширение insertIntoJexlAudit в Btk_GtkExt.

Форма открывается по пути:
Аудит > Аудит JEXL.

Интерфейс аудита JEXL#

Интерфейс аудита JEXL используется для просмотра выполненных JEXL-скриптов, анализа результата выполнения и просмотра проверенных объектов доступа.

Форма состоит из:

  • панели фильтрации;

  • списка выполненных JEXL-скриптов;

  • детализации по объектам доступа.

Панель фильтрации#

В верхней части формы расположены фильтры для отбора записей аудита.

Поле

Описание

flt_dStartExec

Дата и время начала периода. Используется условие t.dStartExec >= ...

flt_dEndExec

Дата и время окончания периода. Используется условие t.dStartExec <= ...

flt_sUser

Пользователь, выполнивший JEXL. Поиск выполняется через like

flt_bShow

Чекбокс Вывести объекты доступа в список

В Btk_JexlScriptAuditAvi.onLoadMeta() фильтр flt_dStartExec автоматически устанавливается на начало текущего дня.

Примечание

Для построения списка обязательным является фильтр flt_dStartExec. Если дата начала периода не заполнена, форма показывает сообщение Фильтр по датам не заполнен! и не строит выборку.

Список выполненных скриптов#

В основной таблице отображаются записи о выполнении JEXL-скриптов с учетом заданных фильтров.

Колонка

Описание

Пользователь

Пользователь, выполнивший JEXL

Время запуска

Дата и время начала выполнения

Время окончания

Дата и время завершения выполнения

Длительность

Продолжительность выполнения

Место выполнения

Место, из которого был выполнен JEXL

Контекст

Контекст выполнения JEXL

Скрипт

Текст выполненного JEXL-скрипта

Результат

Результат выполнения: успех или ошибка

Стек ошибки

Stack trace при ошибке выполнения

Дополнительная информация

Дополнительные сведения, собранные во время выполнения

IP

IP-адрес клиента

Если текст скрипта длинный, в списке отображается сокращенное значение. Полный текст можно открыть в отдельной области формы.

Объекты доступа#

В нижней части формы отображается детализация Объекты доступа. Она используется для анализа объектов доступа, которые проверялись при выполнении администрируемого JEXL.

Колонка

Описание

Тип

Тип проверяемого объекта доступа

Сущность

Сущность или имя объекта доступа

Есть права

Признак наличия прав на объект доступа

Доступные действия#

В форме доступны операции:

  • открытие скрипта в JEXL Runner;

  • показ или скрытие полного текста скрипта;

  • просмотр стека ошибки;

  • просмотр дополнительной информации;

  • просмотр объекта-источника.

Настройка аудита#

Таблицы аудита создаются установочным скриптом пакета Btk_JexlScriptRunnerPkg.pkg.xml.

При установке вызывается метод Btk_JexlScriptRunnerPkg.audDataInstal(), который создает:

  • основную таблицу aud.jexlexechistory;

  • таблицу детализации aud.jexlexechistoryDet;

  • последовательности aud.jexlExecHistory_seq и aud.jexlExecHistoryDet_seq;

  • индексы по пользователю, времени начала, времени окончания и объекту-источнику.

Аудит JEXL заполняется для администрируемого JEXL. Базовый флаг в Btk_JexlScriptRunnerPkg по умолчанию включен:

isJexlAuditEnabled = true

Если аудит JEXL отключали программно, включить его можно методом:

Btk_JexlScriptRunnerPkg.enableJexlAudit();

Для переключения флага требуется право canTurnOffJexlAudit. Если права недостаточно, система выдаст ошибку о недостатке прав.

Дополнительно пакет регистрирует настройку JexlAccessJournal в модуле btk.

Назначение настройки:

  • модуль — btk;

  • настройка — JexlAccessJournal;

  • смысл — заполнять журнал доступа к объектам системы через JEXL.

Настройка JexlAccessJournal влияет на сбор детализации по объектам доступа, которая затем сохраняется в aud.jexlexechistoryDet.

Основная запись в aud.jexlexechistory создается только при выполнении двух условий:

  • JEXL выполняется в администрируемом режиме;

  • общий флаг аудита JEXL включен.

Детализация в aud.jexlexechistoryDet появляется только при наличии данных о проверках доступа и включенной настройке JexlAccessJournal.

Проверить основную таблицу аудита можно запросом:

select *
from aud.jexlexechistory
order by dStartExec desc;

Проверить детализацию по объектам доступа можно запросом:

select *
from aud.jexlexechistoryDet
order by id desc;

Если основная таблица аудита пустая, нужно проверить, действительно ли скрипт выполнялся как администрируемый JEXL.

Если основная таблица заполняется, но детализация по объектам доступа отсутствует, нужно проверить настройку btk.JexlAccessJournal.

Форма просмотра доступна как Btk_JexlScriptAuditAvi.list() и подключена в меню конфигуратора.

Состав записей#

Основные записи хранятся в таблице aud.jexlexechistory. Одна строка соответствует одному выполнению JEXL-скрипта.

В записи сохраняются:

  • пользователь;

  • время начала и окончания выполнения;

  • длительность выполнения;

  • текст скрипта;

  • результат выполнения;

  • стек ошибки;

  • дополнительная информация;

  • контекст и место выполнения;

  • IP-адрес;

  • объект-источник gidSrc.

Если JEXL выполнялся в администрируемом режиме и были собраны данные о проверках доступа, связанные строки сохраняются в таблицу aud.jexlexechistoryDet.

Структура основной таблицы#

Поле

Описание

id

Идентификатор записи журнала

sUser

Пользователь, выполнивший JEXL

dStartExec

Дата и время начала выполнения

dEndExec

Дата и время окончания выполнения

dDuration

Расчетная длительность выполнения в форме просмотра

sJexl

Полный текст выполненного JEXL-скрипта

sJexlTruncated

Усеченный текст скрипта для грида

nResult

Числовой результат: 1 — успех, 0 — ошибка

sResult

Текстовое представление результата

sStackTrace

Стек ошибки при неуспешном выполнении

sAudInfo

Дополнительная информация, собранная во время выполнения

sContext

Контекст выполнения администрируемого JEXL

sPlace

Место выполнения администрируемого JEXL

sIP

IP-адрес клиента

gidSrc

Объект-источник, с которым связан запуск

Примечание

В гриде длинный текст JEXL отображается в усеченном виде. Если sJexl длиннее 100 символов, отображаются первые 99 символов и многоточие. Полный текст открывается в отдельной области формы.

Структура детализации#

Таблица aud.jexlexechistoryDet хранит детализацию по объектам доступа, которые проверялись при выполнении администрируемого JEXL.

Поле

Описание

id

Идентификатор строки детализации

idMaster

Ссылка на запись aud.jexlexechistory.id

sType

Тип проверяемого объекта доступа

sEntity

Сущность или имя объекта доступа

bHasRights

Признак наличия прав

gidSrc

Объект-источник, унаследованный от основной записи

В форме значения sType приводятся к значениям Api, Package, Request, если такое преобразование возможно.

Запись событий#

Журнал заполняется автоматически при выполнении JEXL, если запуск проходит через инфраструктуру, которая вызывает insertIntoJexlAudit и Btk_JexlScriptRunnerPkg.audInsert(...).

Основная запись выполняется методом Btk_JexlScriptRunnerPkg.audInsert(...). Метод получает:

  • время начала и окончания выполнения;

  • текст JEXL;

  • результат выполнения;

  • стек ошибки;

  • gidSrc;

  • IP-адрес.

Пользователь определяется из текущей сессии через Btk_UserApi().getCurrentUserName. Дополнительная информация собирается из буфера audInfoAB.

Дополнительные строки в буфер аудита добавляются через Btk_JexlScriptRunnerPkg.audInfo(...). Буфер заполняется только при включенном флаге bAudOn. После вставки записи содержимое буфера очищается.

Вызов audInsert(...) подключен через расширение Btk_GtkExt.insertIntoJexlAudit. Расширение принимает данные выполнения из JObject, при наличии имени фоновой задачи добавляет его в дополнительную информацию и передает значения в пакет аудита.

Условия автоматической записи#

Физическая запись в aud.jexlexechistory выполняется только для администрируемого JEXL. Внутри audInsert(...) выполняется проверка Gtk_JexlPkg().isAdministratedJexl.

Если режим не администрируемый, строка в таблицу журнала не вставляется. При этом событие выполнения передается в аудит информационной безопасности через:

  • Btk_InfoSecurityPkg.execJexlSuccess(...);

  • Btk_InfoSecurityPkg.execJexlFail(...).

Детализация по объектам доступа появляется только при наличии административных данных JEXL. Для заполнения детализации используется настройка JexlAccessJournal.

Представления формы#

Для просмотра данных используются представления:

  • Btk_JexlScriptAuditAvi.list();

  • Btk_JexlScriptAuditAvi.list_gidSrc();

  • Btk_JexlScriptAuditAvi.list_JexlExecHistory();

  • Btk_JexlScriptAuditAvi.html_ErrorStack();

  • Btk_JexlScriptAuditAvi.html_AdditionalInfo();

  • Btk_JexlScriptAuditAvi.html_JexlScript().

Хранение и очистка#

Журнал JEXL содержит объемные текстовые данные: полный текст скрипта, стек ошибки и дополнительную диагностическую информацию. Поэтому для рабочей базы рекомендуется ограничивать срок хранения записей.

Для очистки предусмотрена штатная задача. Метод Btk_JexlScriptRunnerPkg.regCleanupJob() регистрирует задачу CleanupJob со скриптом Btk_JexlScriptRunnerPkg.clearOldExec(...).

По умолчанию:

  • срок хранения — 60 дней;

  • задача регистрируется в неактивном состоянии.

Метод clearOldExec(npDaysKeep = 30) удаляет записи старше указанного количества дней по полю dEndExec. Удаление выполняется пакетами. Вместе с мастер-записями удаляются строки детализации из aud.jexlexechistoryDet.

Оценка объема журнала#

Объем журнала зависит от:

  • количества запусков JEXL за период;

  • длины выполняемых скриптов;

  • частоты ошибок;

  • размера стеков ошибок;

  • объема дополнительной информации;

  • количества проверенных объектов доступа.

Для оценки роста журнала рекомендуется анализировать:

  • среднее число записей в aud.jexlexechistory за день;

  • средний размер строк с длинными скриптами и ошибками;

  • долю запусков, для которых создаются строки в aud.jexlexechistoryDet;

  • распределение записей по sUser, sPlace, sContext, nResult;

  • фактический размер таблиц и индексов.

Рекомендации по обслуживанию#

Для рабочей базы рекомендуется включить штатную задачу очистки и подобрать срок хранения по статистике роста.

Перед включением очистки проверьте:

  • сколько записей создается в день;

  • сколько места занимают основная таблица и детализация;

  • нужны ли записи старше выбранного срока для расследований, контроля изменений или анализа ошибок.

Если журнал нужен для долгосрочного контроля, старые записи лучше переносить в архив. В рабочей базе рекомендуется оставлять только актуальный период.

Внимание

Очистку следует выполнять через clearOldExec(...), чтобы вместе с основными строками корректно удалялась детализация и не оставались зависшие записи в aud.jexlexechistoryDet.

Использование#

Анализ ошибки выполнения JEXL#

  1. Откройте форму аудита JEXL.

  2. Укажите дату начала выполнения.

  3. Найдите запись с результатом ошибки.

  4. Откройте стек ошибки.

  5. Проверьте текст выполненного скрипта.

  6. При необходимости откройте объект-источник.

Анализ запусков пользователя#

  1. Откройте форму аудита JEXL.

  2. Укажите период.

  3. Отберите записи по пользователю.

  4. Проверьте список выполненных скриптов.

  5. Проанализируйте результат выполнения и место запуска.

Анализ проверок доступа#

  1. Найдите запись выполнения администрируемого JEXL.

  2. Откройте детализацию по объектам доступа.

  3. Проверьте тип объекта, сущность и признак наличия прав.

  4. Сопоставьте результат проверки с текстом скрипта и контекстом выполнения.