安全限制编辑

插件编辑

Elasticsearch 的插件基础架构在可扩展性方面非常灵活。虽然它为 Elasticsearch 开启了各种(通常是自定义的)附加功能,但在安全性方面,这种高度可扩展性是有代价的。我们无法控制第三方插件的代码(开源或非开源),因此我们无法保证它们符合 Elastic Stack 安全功能。因此,在启用了安全功能的集群上,官方不支持第三方插件。

通配符行为的变化编辑

启用了安全功能的 Elasticsearch 集群会将 _all 和其他通配符应用于当前用户有权访问的数据流、索引和别名,而不是集群上的所有数据流、索引和别名。

多文档 API编辑

当尝试访问用户无权访问的不存在的索引时,多获取和多词向量 API 会抛出 IndexNotFoundException。这样做会泄露有关数据流或索引不存在的信息,而用户无权了解有关这些数据流或索引的任何信息。

过滤索引别名编辑

由于使用别名时可能会泄露索引和字段名称中描述的限制,包含过滤器的别名不是限制对单个文档访问的 安全方法。Elastic Stack 安全功能提供了一种通过文档级别安全功能限制对文档访问的安全方法。

字段和文档级别安全限制编辑

当用户的角色为数据流或索引启用文档或字段级别安全

  • 用户无法执行写操作

    • 不支持更新 API。
    • 不支持批量请求中包含的更新请求。
  • 用户无法执行可以有效地使内容以其他名称访问的操作,包括以下 API 中的操作

  • 如果满足以下任一条件,则会针对搜索请求禁用请求缓存

    • 定义文档级别安全的规则查询是使用存储的脚本模板化的。
    • 目标索引是本地索引和远程索引的混合。

当用户的角色为数据流或索引启用文档级别安全

  • 文档级别安全不会影响相关性评分使用的全局索引统计信息。这意味着计算分数时不考虑规则查询。与规则查询不匹配的文档永远不会返回。
  • 在规则定义中,不支持将 has_childhas_parent 查询用作查询参数。在启用了文档级别安全的搜索 API 中,可以使用 has_childhas_parent 查询。
  • 日期数学表达式在使用日期字段的范围查询中不能包含 now
  • 不支持任何进行远程调用以获取查询数据的查询,包括以下查询

    • 带有词项查找的 terms 查询
    • 带有索引形状的 geo_shape 查询
    • percolate 查询
  • 如果指定了建议器并启用了文档级别安全,则会忽略指定的建议器。
  • 如果启用了文档级别安全,则无法分析搜索请求。
  • 如果启用了文档级别安全,则词项枚举 API 不会返回词项。

虽然文档级别安全可以防止用户查看受限文档,但仍然可以编写返回有关整个索引的聚合信息的搜索请求。访问权限仅限于索引中特定文档的用户仍然可以了解仅存在于不可访问文档中的字段名称和词项,并计算包含给定词项的不可访问文档的数量。

使用别名时可能会泄露索引和字段名称编辑

对别名调用某些 Elasticsearch API 可能会泄露有关用户无权访问的索引的信息。例如,当你使用 _mapping API 获取别名的映射时,响应中会包含别名应用到的每个索引的索引名称和映射。

在解决此限制之前,请避免使用包含机密或敏感信息的索引和字段名称。

LDAP 领域编辑

LDAP 领域 目前不支持发现嵌套的 LDAP 组。例如,如果用户是 group_1 的成员,而 group_1group_2 的成员,则只会发现 group_1。但是,Active Directory 领域 确实 支持传递组成员身份。

用户和 API 密钥的资源共享检查编辑

异步搜索滚动 请求的结果可以在稍后由提交初始请求的同一用户或 API 密钥检索。验证过程涉及比较用户名、身份验证领域类型和(对于文件或本机以外的领域)领域名称。如果你使用 API 密钥提交请求,则只有该密钥才能检索结果。此逻辑也有一些限制

  • 两个不同的领域在不同的节点上可以具有相同的名称。这不是推荐的配置领域的方式,因此资源共享检查不会尝试检测这种不一致。
  • 可以重命名领域。当你提交异步搜索或滚动,然后重命名领域并尝试检索结果时,这可能会导致资源共享检查不一致。因此,更改领域名称应该谨慎处理,因为它不仅会给资源共享检查带来复杂性。
  • 对于由某些外部身份验证提供程序支持的领域,用户名是动态计算的。例如,用户名可以从 LDAP 领域中 DN 的一部分派生。从理论上讲,来自外部系统的两个不同用户可能会映射到同一个用户名。我们建议首先避免这种情况。因此,资源共享检查不会考虑这种潜在的差异。