在 dls(文档级安全)查询中使用正则表达式的 Elasticsearch 过滤器访问
Elasticsearch filter access using a regexp in a dls (document-level security) query
我正在尝试使用 DLS 控制对索引的读取访问,基于主机字段与给定正则表达式的匹配。
这方面的文档有限,我还没有找到任何使用正则表达式的示例。我已经尝试了一些不同的东西,但在这一点上我想至少确认这是可能的。
当前查询如下:
elastic_dls_test:
- indices:
'index1_*':
'*':
- READ
_dls_: '{"bool": { "filter": { "regexp": { "host.keyword": {"value": "/hostname_to_match[0-9]*/"} }}}}}'
这似乎没有为角色 elastic_dls_test 中的用户过滤任何内容。
是的,应该可以。您可以对 DLS 使用任何 Elasticsearch 查询,包括正则表达式查询。如果不查看其余的配置和底层数据,就很难说出它为什么不起作用。但是有几个一般步骤可以调试问题:
- 运行 DLS 直接查询(如使用“_search”端点)与具有索引完全访问权限的用户并查看它是否 returns 预期结果
- 检查用户是否真的被分配到 elastic_dls_test 角色,所以 DLS 确实被应用了。查看角色和权限的故障排除:https://docs.search-guard.com/latest/troubleshooting-search-guard-user-roles
- 检查Elasticsearch日志文件,看是否有任何错误
如果您从您的 index1_* 索引之一发布示例文档,也会有所帮助。
我正在尝试使用 DLS 控制对索引的读取访问,基于主机字段与给定正则表达式的匹配。
这方面的文档有限,我还没有找到任何使用正则表达式的示例。我已经尝试了一些不同的东西,但在这一点上我想至少确认这是可能的。
当前查询如下:
elastic_dls_test:
- indices:
'index1_*':
'*':
- READ
_dls_: '{"bool": { "filter": { "regexp": { "host.keyword": {"value": "/hostname_to_match[0-9]*/"} }}}}}'
这似乎没有为角色 elastic_dls_test 中的用户过滤任何内容。
是的,应该可以。您可以对 DLS 使用任何 Elasticsearch 查询,包括正则表达式查询。如果不查看其余的配置和底层数据,就很难说出它为什么不起作用。但是有几个一般步骤可以调试问题:
- 运行 DLS 直接查询(如使用“_search”端点)与具有索引完全访问权限的用户并查看它是否 returns 预期结果
- 检查用户是否真的被分配到 elastic_dls_test 角色,所以 DLS 确实被应用了。查看角色和权限的故障排除:https://docs.search-guard.com/latest/troubleshooting-search-guard-user-roles
- 检查Elasticsearch日志文件,看是否有任何错误
如果您从您的 index1_* 索引之一发布示例文档,也会有所帮助。