我目前正在研究用于集中日志文件分析的ELK(Elasticsearch,Logstash,Kibana)堆栈。
计划是使用logstash和基于日期的索引将多个应用程序的日志存储在同一个Elasticsearch集群中。
所有文档都包含一个名为application的字段,例如" application":" superapp"。
现在我们正在寻找一种实现这种访问控制的方法:
A)超级用户能够查看所有应用程序的日志条目。
B)开发人员:只能查看允许的应用程序的日志条目。例如开发团队申请" superapp"应该只能看到这个应用程序的条目。
要将其包装起来:我们需要基于字段应用程序中的值进行访问控制。
在阅读Elastisearch和Shield的文档时,我找不到明显的方法。
我们如何才能以与Kibana 3和4一起使用的方式实现这一目标?
我的第一个想法是使用使用索引模板自动分配给文档的别名。我想知道这是否是正确的方向。
答案 0 :(得分:0)
我在elasticsearch Google Group上问了这个问题here并得到了这个回复:
"您可以将不同类型的日志分离到他们自己的索引中,这会使事情变得更容易,您还可以使用过滤器设置别名,然后为某些用户提供对该别名的访问权限。 目前KB不是多租户,但它是一个将要添加的功能,您必须设置多个实例,每个实例都会使用自己的别名。"
总结一下:多租户需要在前端(Kibana)和后端(Elasticsearch)处理。
前端:使用代理Kibana
https://github.com/salyh/elastic-defender
https://github.com/fangli/kibana-authentication-proxy
后端:使用过滤后的别名和别名模板的几种方法
Limiting Indexes and Operations
Faking Index per User with Aliases -
http://engineering.aweber.com/using-elasticsearchs-aliases/
http://opennomad.com/content/controlling-access-elasticsearch-filtered-aliases-nginx-and-tokens