如何在共享托管环境中保护面向互联网的Elastic Search实现?

26
我一直在查阅 Elastic Search 的文档,非常喜欢它,并计划将其用于我的 ASP.NET MVC 应用程序的搜索功能。
然而,这里有几个问题。如果 ASP.NET MVC 应用程序在专用机器上,那么启动 Elastic Search 的实例并使用TCP Transport进行本地连接就很简单了。
但是,我不在专用机器上,而且似乎短期内也不会搬到那里。因此,我只能将 Elastic Search 托管在另一台机器上(在 *NIX 环境下),而且我可能会选择共享托管方式。
然而,Elastic Search 最大的问题之一是它默认不支持 HTTPS 和基本身份验证。如果支持的话,那这个问题就不存在了;我只需要在某个地方托管并确保设置非常安全的密码和启用 HTTPS 即可(可能需要使用自签名证书)。
但事实并非如此。
考虑到这一点,有什么好的方法可以以安全的方式通过互联网公开 Elastic Search?
请注意,我希望找到一些无需编写代码提供所需方法的解决方案(换句话说,不需要编写转发器)。

现在有一个插件来支持基本认证:https://github.com/Asquera/elasticsearch-http-basic。 - Karussell
基本身份验证将密码作为纯文本随每个请求一起发送。它已被认为是完全过时的。 - Jacco
是的,我没有说这是一个完整的解决方案...你需要添加https。 - Karussell
我是这个插件的作者。基本上,这是一个简短的实验,旨在测试您能否很好地替换ElasticSearch中的HttpServer类。首先,您应该通过在其前面部署某种SSL卸载器(例如Nginx)来使用HTTPS。其次:它不支持“完整”的HTTP基本身份验证,因为您无法向Elasticsearch的HTTP响应添加任意标头。这也禁止了摘要身份验证的实现。摘要身份验证还有一个主要缺点:每个新连接都需要一个往返,这在我的用例中是不可接受的。 - Skade
1
注意:此问题最终迁移到ServerFault:http://serverfault.com/questions/240707/how-to-secure-an-internet-facing-elastic-search-implementation-in-a-shared-hosti - Jay Taylor
请查看elasticsearch的shield - Giriraj Sharma
2个回答

24
现在提供了一个针对elasticsearch的插件,它允许你用嵌入式的Jetty实例替换HTTP传输方式。由于使用了Jetty来处理HTTP传输,因此它不仅可以处理SSL连接,还可以配置身份验证。请注意保留""和""和html标签。
(Note,以下仍然是有用的建议,因为这通常是将操作抽象出来的良好实践)
经过ElasticSearch邮件列表上的多次讨论,我发现当前的解决方案是将ElasticSearch托管在另一个应用程序层后,然后保护层。
推理很坚实;ElasticSearch类似于数据库,您不会使数据库面向所有人。
我(和其他人)会遇到的问题是,由于ElasticSearch使用HTTP作为传输方式,并使用JSON作为操作的语法,因此ElasticSearch被认为是公共面向的。
但是,目前有一个请求添加HTTPS传输支持(假设提供了证书)以及基本(摘要)身份验证。

在保护 Elasticsearch 前端层时,也有一些需要注意的事项。Securing Your Elasticsearch Cluster 这篇文章提供了相关的覆盖内容。 - Alex Brasetvik
提出一个问题,回答它,然后将其关闭为离题。Boss B| - Nick Rameau

6

您需要在某种方式下设定防火墙,只允许来自应用服务器的流量通过,例如在Linux中使用iptables,在Windows中使用某种个人防火墙。

这将带您进入serverfault.com领域,因为这并非编程方案解决。


考虑到将在共享环境中,我很可能无法控制那个。或者我可以吗? - casperOne
@casperOne:这个超出了我的能力范围。我在第三方Linux虚拟托管环境中使用Elastic Search(是的,我也很喜欢它),并使用主机自己的iptables来防火墙。它是虚拟化的,所以我可以随心所欲地使用它。 - skaffman
你能否评论一下这个的成本以及启动所需的条件?当然,在我的情况下,仅基于IP进行防火墙设置并不完全安全,因为同一共享实例上的其他应用程序将能够访问我的Elastic Search实例。 - casperOne
@casparOne:每月50美元,或类似的价格。那些事情我会委派他人处理 :) - skaffman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接