基于字段值的Elasticsearch访问控制

时间:2015-03-20 15:55:45

标签: authentication elasticsearch role-based-access-control elasticsearch-shield

我目前正在研究用于集中日志文件分析的ELK(Elasticsearch,Logstash,Kibana)堆栈。

计划是使用logstash和基于日期的索引将多个应用程序的日志存储在同一个Elasticsearch集群中。

所有文档都包含一个名为application的字段,例如" application":" superapp"。

现在我们正在寻找一种实现这种访问控制的方法:

A)超级用户能够查看所有应用程序的日志条目。

B)开发人员:只能查看允许的应用程序的日志条目。例如开发团队申请" superapp"应该只能看到这个应用程序的条目。

要将其包装起来:我们需要基于字段应用程序中的值进行访问控制。

在阅读Elastisearch和Shield的文档时,我找不到明显的方法。

我们如何才能以与Kibana 3和4一起使用的方式实现这一目标?

我的第一个想法是使用使用索引模板自动分配给文档的别名。我想知道这是否是正确的方向。

1 个答案:

答案 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