Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›Скрипты

Скрипты и безопасность

Painless и Elasticsearch реализуют слои безопасности, чтобы построить стратегию защиты в глубину для безопасного выполнения скриптов.

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

Вторым уровнем безопасности является менеджер безопасности Java. В процессе запуска Elasticsearch включает менеджер безопасности Java, чтобы ограничить действия частей кода. Painless использует менеджер безопасности Java как дополнительный уровень защиты, чтобы предотвратить выполнение скриптами таких действий, как запись файлов и прослушивание сокетов.

Elasticsearch использует seccomp в Linux, Seatbelt в macOS и ActiveProcessLimit в Windows как дополнительные уровни безопасности, чтобы предотвратить форкинг Elasticsearch или запуск других процессов.

Наконец, скрипты, используемые в агрегациях метрик со скриптами, могут быть ограничены определённым списком скриптов или запрещены полностью. Это может предотвратить выполнение пользователями особенно медленных или ресурсоёмких запросов агрегации.

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

Настройка разрешённых типов скриптов

Elasticsearch поддерживает два типа скриптов: inline и stored. По умолчанию Elasticsearch настроен на выполнение обоих типов скриптов. Чтобы ограничить типы выполняемых скриптов, установите script.allowed_types на inline или stored. Чтобы предотвратить выполнение любых скриптов, установите script.allowed_types на none.

Если вы используете Kibana, установите script.allowed_types на оба или только на inline. Некоторые функции Kibana полагаются на встроенные скрипты, и они не будут работать должным образом, если Elasticsearch не разрешает встроенные скрипты.

Например, чтобы выполнить скрипты inline, но не stored:

script.allowed_types: inline

Настройка разрешённых контекстов скриптов

По умолчанию разрешены все контексты скриптов. Используйте настройку script.allowed_contexts, чтобы указать разрешённые контексты. Чтобы указать, что контексты не разрешены, установите script.allowed_contexts на none.

Например, чтобы разрешить выполнение скриптов только в контекстах scoring и update:

script.allowed_contexts: score, update

Разрешённые скрипты в агрегациях метрик со скриптами

По умолчанию все скрипты разрешены в агрегациях метрик со скриптами. Чтобы ограничить набор разрешённых скриптов, установите search.aggs.only_allowed_metric_scripts на true и предоставьте разрешённые скрипты, используя search.aggs.allowed_inline_metric_scripts и/или search.aggs.allowed_stored_metric_scripts.

Чтобы запретить определённые типы скриптов, опустите соответствующий список скриптов (search.aggs.allowed_inline_metric_scripts или search.aggs.allowed_stored_metric_scripts) или установите его на пустой массив. Когда оба списка скриптов не пустые, указанные сохранённые скрипты и указанные встроенные скрипты будут разрешены.

Следующий пример разрешает использование только 4-х определённых сохранённых скриптов и не разрешает использование встроенных скриптов:

search.aggs.only_allowed_metric_scripts: true
search.aggs.allowed_inline_metric_scripts: []
search.aggs.allowed_stored_metric_scripts:
   - script_id_1
   - script_id_2
   - script_id_3
   - script_id_4

В противоположность этому, следующий пример разрешает определённые встроенные скрипты, но не разрешает сохранённые скрипты:

search.aggs.only_allowed_metric_scripts: true
search.aggs.allowed_inline_metric_scripts:
   - 'state.transactions = []'
   - 'state.transactions.add(doc.some_field.value)'
   - 'long sum = 0; for (t in state.transactions) { sum += t } return sum'
   - 'long sum = 0; for (a in states) { sum += a } return sum'
search.aggs.allowed_stored_metric_scripts: []

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/modules-scripting-security.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API