保护Elasticsearch集群

我想创build一个安全的Elasticsearch集群。

关于我的使用案例。 我想要一个多租户系统。 用户必须具有对自己的名称空间的pipe理访问权限。 几次尝试后,我现在只是给用户自己的集群(通过docker)。

尝试1:在具有多租户的专用节点上屏蔽。 这需要我为每个用户修改angular色yml文件。 这是麻烦和痛苦的。

尝试2:docker集装箱+盾牌:经过一些试验和错误,这看起来工作正常,但我不喜欢的许可,我也不明白如何确保TCP传输。

尝试3: Docker容器+ nginx反向代理&htpasswd:这对于确保http传输非常有效,并且现在在Kibana中支持基本身份validation,它与kibana非常相称 。 不幸的是,这限制了我的群集能力,因为9300是开放的。

尝试4:我即将尝试docker集装箱+search卫队:这看起来像一个体面的select,但我仍然不知道如何保证TCP传输。

人们如何确保多租户Elasticsearch集群的安全?

你在正确的轨道上。 ES本质上并不是多租户,你确实无法确定你是否已经正确地获得了/命名空间的访问权限。 另外,ES缺乏认证和https,所以你也会遇到这些问题。 我知道你可以为特权付费,而且还有其他一些黑客可以做到,但实际上,这个系统是每个客户,而不是多租户。

我也谨慎反对使用码头工具的多租户是一个可行的解决方案。 再次,码头安全还不是一个众所周知的/解决的问题。 在内核之上进行虚拟化时存在风险。 主要的风险是内核是硬件上大量的代码和接受的虚拟化技术。 以管理程序上运行的亚马逊EC2实例。 虚拟机管理程序通过硬件实现了虚拟机之间的许多边界 – 即特殊的CPU程序,有助于在硬件级别隔离不同的虚拟机。

由于管理程序只是一小段代码(与内核相比),审计起来要容易得多。 由于管理程序使用硬件功能来强制隔离,因此它更安全。

在一个维度上,Docker实际上是在每个进程的基础上增加安全性的(IE,如果你的应用程序运行nginx被黑客入侵并且docker设置的很好,那么入侵者也将不得不摆脱docker实例)。 另一方面,它不如机器虚拟化。

我的建议是为每个客户创建一个集群虚拟机,并在每个虚拟机集群上运行ES docker和其他应用程序docker。