![保护 elasticsearch](https://linux22.com/image/623329/%E4%BF%9D%E6%8A%A4%20elasticsearch.png)
尽管安装的 elasticsearch 极易被利用,但似乎严重缺乏这方面的信息。
我使用它的主要担心是,作为非专家,我不知道可能存在的漏洞是什么以及如何弥补它们。
有人可以向我解释一种锁定 elasticsearch 的方法,以便我可以在安全的环境中执行以下操作:
每个用户有多个索引。假设我可以提前为他们创建这个,用户不应该能够对其他用户的索引执行操作,除非在获得许可的情况下可以查询它们。(可能是每个用户的 URL 中都有某种形式的密钥?)
用户可以随意在其索引中添加或删除对象,但不能删除其索引。
对用户的内存大小进行某种形式的限制,以便如果出现问题,他们就不会导致服务超载。
我猜想其中一些必须在应用程序级别完成,我不能指望你为我编写这个,但是默认配置过于开放,即使我为此提供了自定义 API 层,某些人也可以轻松绕过它并直接与服务器通信。
答案1
在我看来,以您要求的方式保护 ES 的唯一方法是将其锁定在另一个应用程序层后面,并让该层处理 https/ssl 传输、身份验证和授权控制。
在 ES 方面,有一个开发了的 jetty ES 安全插件,不知道它是否成功,当我第一次部署 ES 时,该插件即将发布,所以看看它:
答案2
我猜你需要创建一个包含所有这些“业务逻辑”的中间 HTTP 代理,并且只允许从本地主机访问 ElasticSearch。这样,对 ES 的直接访问就会被阻止,你可以确定并执行任何你想要的策略(耶!;)
“即使我为此提供了自定义 API 层,某些人也可以轻松绕过它”:如果 ES 仅接受来自本地主机的连接,他们就无法做到这一点。
我认为内存使用限制是不可能的,也许您可以在代理层内预先批准查询?
答案3
我使用在 ES 前面运行的 Nginx 做了类似的事情。可以根据 URL 中的关键字在 Nginx 中设置“授权”。请参阅此文档中定义的用例:http://www.elasticsearch.org/blog/playing-http-tricks-nginx/
答案4
我将 elasticsearch 绑定到 openvpn 隧道:
在 /etc/elasticsearch/elasticsearch.yml 中:
network.host: 172.16.xxx.xxx
其中172.16.xxx.xxx是openvpn分配的IP地址。