Перейти к основному содержимому
Версия: 5.1

Интеграция с планировщиком задач

Общая информация

Интеграция Smart EDR с планировщиком задач работает так, что скрипт run_edr_task.py c помощью активного действия в задаче на хосте EDR выполняет запуск задач и распределяет их по агентам в хосте BI.ZONE.

Обратите внимание!

Перед началом интеграции Smart EDR с планировщиком задач убедитесь, что проведено развертывание скриптов.

Создание и настройка задачи

Для создания запланированного задания в компоненте Планировщик задач необходимо перейти в Навигационное меню - Планировщик задач - Список задач - Создать.

Настройка в разделе Главное

После создания задачи в разделе Главное в поле Поисковой запрос укажите запрос для поиска полей и их значений в индексе bizone-irp-alerts-*.

Пример поискового запроса в задаче: Пример поискового запроса

Пример поискового запроса в задаче
source bizone-irp-alerts-*
| search dev_os_type="linux"
| table alert_name, dev_id, proc_p_file_path, proc_id
| eval reg_path = proc_p_file_path
| eval pid = proc_id
Обратите внимание!

Для удобства в примере запроса с помощью команды eval значения из существующих полей записываются в новые поля reg_path и pid, названия которых совпадают с полями в колонке parameters в задаче из лукапа dim_bizone_task. Далее значения этих полей будут передаваться в активные действия.

Про настройку других полей и блоков можно найти в соответствующей статье по созданию уведомлений.

Настройка в разделе Активные действия

Для создания активного действия с запуском скрипта перейдите в раздел Активные действия - Добавить - Запуск скрипта - Добавить.

Теперь в поле Путь до скрипта укажите интерпретатор, путь до скрипта и аргументы и их значения.

Пример указанного вызова скрипта: Пример запуск скрипта

Полный пример указанного вызова скрипта
python3 /app/opensearch/utils/scripts/jobscheduler-action/run_edr_task.py --dev-id {{_source.dev_id}} --param-names reg_path pid --param-values {{_source.reg_path}} {{_source.pid}} --tasks '[BZ] [Win] Remove registry key/value' '[BZ] [Win] Kill process by PID' '[BZ] [Win] Update group policies'

При вызове скрипта указываются следующие аргументы:

  • --dev-id - параметр dev_id, который передается из SML-запроса. Значение записывается всегда в виде {{_source.dev_id}}
  • --param-names - названия параметров (или одного параметра), имеющие те же названия (можно в нижнем регистре), что в результате SML-запроса и в колонке parameters в задаче из лукапа dim_bizone_task, которые скрипт заменит значениями из параметров param-values. В примере вызова скрипта указывается название параметра pid, что соответствует полю, которое необходимо заменить в указанной задаче из лукапа: Пример
  • --param-values - значения (или одно значение), которые необходимо подставить в поле parameters в задаче вместо исходного значения, например {{PID}}. Указывается, например, в виде {{_source.pid}}. Передаются из SML-запроса
  • --tasks - названия задач из лукапа EDR
Обратите внимание!

Аргументы --dev-id и --tasks являются обязательными, а аргументы --param-names и --param-values можно не указывать, если в задаче не требуется заменить поле в колонке parameters в задаче из лукапа dim_bizone_task.

Настройка узла

Для работы скрипта run_edr_task.py необходимы параметры, которые берутся из конфигурационного файла (config.json) и keystore.

Добавление параметров в конфигурационный файл

Из конфигурационного файла, который расположен в директории /app/opensearch/utils/scripts/jobscheduler-action, берется:

  • lookup_edr - название лукапа в EDR, из которого берутся задачи BI.ZONE

Данный параметр задается в файле config.json:

{
"edr": {
"lookup_edr": "dim_bizone_task"
}
}

Добавление параметров в keystore

Из keystore берутся следующие параметры:

  • api_edr_token - API-токен для взаимодействия с BI.ZONE
  • bizone_host - IP-хоста BI.ZONE
  • bizone_port - порт хоста BI.ZONE
  • edr_host - IP-хоста EDR
  • edr_port - порт хоста EDR
  • edr_name - имя пользователя на хосте EDR
  • edr_pswd - пароль от хоста EDR

Для их добавления в keystore используйте следующие команды:

sudo -u opensearch ${OS_HOME}/bin/opensearch-keystore add jobscheduler.script.pass.api_edr_token
sudo -u opensearch ${OS_HOME}/bin/opensearch-keystore add jobscheduler.script.pass.bizone_host
sudo -u opensearch ${OS_HOME}/bin/opensearch-keystore add jobscheduler.script.pass.bizone_port
sudo -u opensearch ${OS_HOME}/bin/opensearch-keystore add jobscheduler.script.pass.edr_host
sudo -u opensearch ${OS_HOME}/bin/opensearch-keystore add jobscheduler.script.pass.edr_name
sudo -u opensearch ${OS_HOME}/bin/opensearch-keystore add jobscheduler.script.pass.edr_port
sudo -u opensearch ${OS_HOME}/bin/opensearch-keystore add jobscheduler.script.pass.edr_pswd

После добавления параметров в keystore проверьте их наличие командой:

sudo -u opensearch /app/opensearch/bin/opensearch-keystore list

Пример результата выполнения команды: Пример результата

Обратите внимание!

Если команда выполняется без опции -u opensearch, то после изменений в хранилище паролей необходимо проверить права на файл хранилища паролей ${OS_CONFIG}/opensearch.keystore. Для изменения прав можно воспользоваться следующей командой:

sudo chown opensearch:opensearch ${OS_CONFIG}/opensearch.keystore

После изменения keystore через терминал требуется перезагрузка OpenSearch. Для кластеров состоящих из нескольких узлов для перезагрузки предварительно рекомендуется отключать аллокацию через консоль разработчика (Навигационное меню - Параметры системы - Консоль разработчика) выполнив команду:

PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "none"
}
}

Сделать тоже самое можно из терминала следующей командой:

curl -XPUT -k -u admin "https://127.0.0.1:9200/_cluster/settings?pretty" -H "Content-Type: application/json" -d '{"persistent":{"cluster.routing.allocation.enable": "none"}}'

Затем перезагрузите узел OpenSearch:

systemctl restart opensearch.service

После запуска службы дождитесь появления узла в списке узлов кластера.

GET _cluster/health
GET _cat/nodes

Сделать тоже самое можно из терминала следующей командой:

curl -k -u admin "https://127.0.0.1:9200/_cluster/health?pretty"
curl -k -u admin "https://127.0.0.1:9200/_cat/nodes"

После появления узла в кластере включите аллокацию:

PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "all"
}
}

Сделать тоже самое можно из терминала следующей командой:

curl -XPUT -k -u admin "https://127.0.0.1:9200/_cluster/settings?pretty" -H "Content-Type: application/json" -d '{"persistent":{"cluster.routing.allocation.enable": "all"}}'

Поскольку в скрипт будут передаваться данные из keystore, необходимо указать в настройках планировщика задач, какой задаче какие переменные из keystore можно использовать. Для этого используйте команду:

PUT _core/settings/job-scheduler
{
"script_environments": """{
"<идентификатор задачи>": ["api_edr_token", "bizone_host", "bizone_port", "edr_host", "edr_name", "edr_port", "edr_pswd"]
}"""
}

На этом настройка узла завершена.

Запуск задачи

После настройки задачи узла можно запускать задачу.

Для запуска задачи перейдите в Навигационное меню - Планировщик задач - Список задач и на созданной задаче раскройте список действий с заданием, нажав на кнопку в виде трех точек справа в таблице. В открывшемся списке выберите пункт Включить. Пункт включить