我想创建一个安全的Elasticsearch集群。
关于我的用例。我想要一个多租户系统。用户必须具有对自己的命名空间的管理访问权经过几次尝试,我现在只是给用户他们自己的集群(通过docker)。
尝试1:屏蔽多租户的专用节点。这要求我为每个用户修改角色yml文件。这很麻烦,很痛苦。
尝试2: Docker容器+ Shield:经过一些试验和错误看起来工作正常,但我不喜欢许可,而且我也不明白它是如何确保tcp transport。
尝试3: Docker容器+ nginx反向代理& htpasswd:这适用于保护http传输,并且现在basic auth is supported in Kibana与kibana一起使用效果很好。不幸的是,这限制了我的聚类能力,因为9300是敞开的。
尝试4:我即将尝试使用docker container + Search Guard:这看起来像是一个不错的选项,但我仍然不确定如何保护tcp传输。< / p>
人们如何实际保护多租户Elasticsearch集群?
答案 0 :(得分:0)
你走在正确的轨道上。 ES本身并不是多租户,您实际上无法确定您是否已正确保护/命名空间访问权限。此外,ES缺乏身份验证和https,所以你也会遇到这些问题。我知道你可以为这个特权买单,而且还有其他一些黑客可以做到这一点,但实际上,系统是按客户而不是多租户。
我还要提醒使用docker的多租户是一个可行的解决方案。同样,docker安全性还不是一个众所周知/已解决的问题。在内核上进行虚拟化时存在风险。主要风险是内核是大量代码与硬件上接受的虚拟化技术。以在管理程序上运行的amazon ec2实例为例。虚拟机管理程序通过硬件实现虚拟机之间的大部分边界 - 即特殊的CPU过程,有助于在硬件级别隔离不同的虚拟机。
由于虚拟机管理程序是一小部分代码(与内核相比),因此审计起来要容易得多。由于虚拟机管理程序使用硬件功能来强制隔离,因此更加安全。
在一个方面,Docker实际上在每个进程的基础上增加了安全性(IE,如果运行nginx的应用程序被黑客攻击并且docker设置得很好,那么入侵者也必须突破docker实例)。另一方面,它不如机器虚拟化那么好。
我的建议是为每个客户创建一个群集VM,并在每个VM群集上运行ES docker和其他应用程序泊坞窗。