Интеграция с планировщиком задач
Общая информация
Интеграция 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"]
}"""
}
На этом настройка узла завершена.
Запуск задачи
После настройки задачи узла можно запускать задачу.
Для запуска задачи перейдите в Навигационное меню
- Планировщик задач
- Список задач
и на созданной задаче раскройте список действий с заданием, нажав на кнопку в виде трех точек справа в таблице. В открывшемся списке выберите пункт Включить
.