使用tornado实现elasticsearch的权限控制

前言:

    公司的应用监控平台又要有所变动了,准备把opentsdb给剔除,改用elasticsearch后端存储。去掉opentsdb的原因很简单,因为在数据量大的时候,hbase rowkey的效率达不到快速返回的需求,尤其针对聚合计算效率低。Opentsdb不支持二级索引,只有一个基于hbase rowkey的主索引,可以按行的排序顺序scan。这使得Opentsdb的tag实现从检索效率上说会很慢。


关于elasticsearch权限的文章,原文地址是 http://xiaorui.cc/2015/10/19/%E4%BD%BF%E7%94%A8tornado%E5%AE%9E%E7%8E%B0elasticsearch%E7%9A%84%E6%9D%83%E9%99%90%E6%8E%A7%E5%88%B6/


有些跑题了,咱们回到es的访问控制…

elasticsearch官方没有什么好的权限控制,倒是有个商业版的Shield Shield是Elastic公司为ElasticSearch开发的一个安全插件。在安装此插件后,Shield会拦截所有对ElasticSearch的请求,并加上认证与加密,保障ElasticSearch及相关系统的安全性。 Shield是商业插件,需ElasticSearch的商业许可。第一次安装许可的时候,会提供30天的免费试用权限。30天后,Shield将会屏蔽cluster health, cluster stats, index stats这几个API,其余功能不受影响。总觉得shield这东西不是很靠谱…

查了下相关的资料,为elasticsearch有这么几种方法。

第一种,在nginx层面做基本验证,优点是及其的简单,缺点是他的权限控制有点粗,不能针对更细致的权限进行操作。或者可以用nginx lua的方式做auth扩展。  

第二种,直接用python tornado来做http代理。 在代理层面可以很好的控制黑白名单,及index、type名单。

使用htpasswd工具来创建用户,创建密码。 

下面是nginx针对elasticsearch负载的配置

那么对于第二种开发代理服务的方式,我们可以使用python下最适合做api的框架tornado。话说 ” tornado async httpclient ” 客户端非常适合做高性能的http代理。 我这边以前写了个项目,原本是用来做爬虫http代理服务的,现在倒是觉得很适合做elasticsearch的权限控制 ,但是现在缺少一些规则的过滤,比如字段、bulk批量,delete删除的控制。

如果你用的是python下的elasticsearch模块,那么需要在创建es连接对象的时候,加入http_auth参数。

另外logstash在elasticsearch做了权限控制后,配置文件也需要加入密码。



对Golang感兴趣的朋友可以加群: 278517979 !!!
另外如果大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码, 感谢!
另外再次标注博客原地址  xiaorui.cc

1 Response

  1. feifeiiiiiiiiiii 2016年5月14日 / 下午11:39

    写个出来啊 让我forkfork

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">