我有一个 elasticsearch 实例,前面有一个 Nginx 反向代理,实现了 URL 级别的访问控制机制 - 大致如下所述本文
这给了我每个索引的粒度,非常方便。
不过,我接下来想弄清楚的是——我是否可以强制执行一个全面的过滤标准,以排除搜索和直接文档检索的结果?
我正在考虑一个“群组”模型,其中我的索引中的文档按群组标记,并且用户只能看到他们群组的结果和文档。
现在,我知道我可以为每个组创建索引,并应用 URL 级别控制。如果我做不到这一点,这可能是我的解决方法。
我已经看过别名了 - 这似乎可以满足我的 90% 的要求,因为我可以将搜索限制为别名。但我无法做的是禁止使用(未经授权的)文档 ID 直接进行“GET”请求。
有什么办法可以做到这一点,还是我只是走在一条没有出路的路上?
注意 - 我这样做的原因之一是,我正在尝试使用相当标准的 kibana 设置,并且我有重叠的用户组。
答案1
虽然我无法直接回答你的问题(+1),但我想指出,elastic 的员工最终听取了所有要求访问控制的人的请求,Elasticsearch
并引入了盾. 引用网站内容:
随着 Elasticsearch 的快速普及,存储、搜索和分析数据变得前所未有的简单。Shield 可让您使用用户名和密码轻松保护这些数据,同时简化您的架构。加密、基于角色的访问控制、IP 过滤和审计等高级安全功能也可在您需要时使用。
您的数据正日益成为您最宝贵的资产。使用 Shield 密码保护数据。
也许至少看一看是否满足您的要求是值得的。
答案2
今天在工作中开始使用 Elasticsearch 的新项目时,我做了一些研究,发现Search Guard - 免费的 Elasticsearch 安全保护。显然,我(目前)还不能判断这个方法的效果如何,但我想在这里留下一个指示,以防你或其他人仍在寻找解决方案,并且以防由于某种原因无法使用 Shield。
引用该网站,这些是其特点:
- 灵活的 REST 层访问控制(基于用户/角色;基于别名、索引和类型)
- 灵活的传输层访问控制(基于用户/角色;基于别名、索引和类型)
- 文档级安全性 (DLS):仅检索符合条件的文档
- 字段级安全性 (FLS):从搜索响应中过滤掉字段/源部分
- HTTP 身份验证(基本、代理标头、SPNEGO/Kerberos、相互 SSL/CLIENT-CERT)
- 通过 cookie 支持 HTTP 会话
- 灵活的身份验证后端(LDAP/Active Directory、基于文件、代理标头、通过 WAFFLE 的本机 Windows)
- 灵活的授权后端(LDAP/Active Directory、基于文件、通过 WAFFLE 的本机 Windows)
- 通过 SSL/TLS(传输层)进行节点到节点加密
- 通过 HTTPS(SSL/TLS)保护 REST 层
- X-Forwarded-For (XFF) 支持
- 审计日志
- 匿名登录/未经身份验证的访问
- 与 Kibana 4 和 logstash 配合使用
但是,也存在局限性:
- 使用 DLS 或 FLS 时,您仍然可以搜索所有文档/字段,但不会返回所有文档/字段
- 仅使用简单的用户名/密码登录进行传输层访问控制
- 没有自动多索引过滤器(见下文)
- 目前,集群监控不需要身份验证,并且始终允许(将来可能会改变)
也许这对您或其他看到这篇文章的人来说是有帮助和价值的。