脚本和安全
编辑脚本和安全编辑
Painless 和 Elasticsearch 实施了多层安全机制,以构建深度防御策略,安全地运行脚本。
Painless 使用细粒度的允许列表。任何不在允许列表中的内容都会导致编译错误。此功能是深度防御策略中脚本安全的第一层。
第二层安全机制是 Java 安全管理器。作为启动序列的一部分,Elasticsearch 启用 Java 安全管理器来限制代码部分可以执行的操作。 Painless 使用 Java 安全管理器作为额外的防御层,以防止脚本执行诸如写入文件和监听套接字等操作。
Elasticsearch 在 Linux 中使用 seccomp,在 macOS 中使用 Seatbelt,在 Windows 中使用 ActiveProcessLimit 作为额外的安全层,以防止 Elasticsearch 分叉或运行其他进程。
您可以修改以下脚本设置,以限制允许运行的脚本类型,并控制脚本可以运行的可用 上下文。要实施深度防御策略中的其他层,请遵循 Elasticsearch 安全原则。
允许的脚本类型设置编辑
Elasticsearch 支持两种脚本类型:inline
和 stored
。默认情况下,Elasticsearch 配置为运行这两种类型的脚本。要限制运行的脚本类型,请将 script.allowed_types
设置为 inline
或 stored
。要阻止任何脚本运行,请将 script.allowed_types
设置为 none
。
如果您使用 Kibana,请将 script.allowed_types
设置为 both 或仅 inline
。某些 Kibana 功能依赖于内联脚本,如果 Elasticsearch 不允许内联脚本,则这些功能将无法按预期工作。
例如,要运行 inline
脚本但不运行 stored
脚本
script.allowed_types: inline
允许的脚本上下文设置编辑
默认情况下,所有脚本上下文都是允许的。使用 script.allowed_contexts
设置指定允许的上下文。要指定不允许任何上下文,请将 script.allowed_contexts
设置为 none
。
例如,要允许脚本仅在 scoring
和 update
上下文中运行
script.allowed_contexts: score, update