首页 > 解决方案 > Elasticsearch 在 dls(文档级安全)查询中使用正则表达式过滤访问

问题描述

我正在尝试使用 DLS 控制对索引的读取访问,基于将主机字段与给定的正则表达式匹配。

这方面的文档是有限的,我还没有找到任何使用正则表达式的示例。我已经尝试了一些不同的东西,但在这一点上,我想至少确认这是可能的。

目前查询看起来像:

elastic_dls_test:
  - indices:
    'index1_*':
          '*':
            - READ
          _dls_: '{"bool": { "filter": { "regexp": { "host.keyword": {"value": "/hostname_to_match[0-9]*/"} }}}}}' 
   

这似乎没有为角色 elastic_dls_test 的用户过滤任何内容。

标签: regexelasticsearchsearch-guard

解决方案


是的,这应该是可能的。您可以对 DLS 使用任何 Elasticsearch 查询,包括正则表达式查询。如果不查看配置的其余部分和基础数据,就很难说出它为什么不起作用。但是有几个一般步骤可以调试问题:

  1. 使用对索引具有完全访问权限的用户直接运行 DLS 查询(如使用“_search”端点)并查看它是否返回预期结果
  2. 检查用户是否真的被分配到了 elastic_dls_test 角色,所以实际上应用了 DLS。查看角色和权限的故障排除:https ://docs.search-guard.com/latest/troubleshooting-search-guard-user-roles
  3. 检查 Elasticsearch 日志文件,看看是否有任何错误

如果您从您的 index1_* 索引之一发布示例文档,这也会有所帮助。


推荐阅读