ELK——elasticsearch Search-guard 认证

本文内容

最近 ELK 搭建完成,赶紧着手把认证做啦~要是什么人都能用 head 插件访问,可受不了~

结果,还真经历了点坎坷~

需求

能想到的大概有如下几点:

  • 需求一:账号认证(登录)是必须的。解决 ES 匿名访问的问题。head 插件简单易用,可惜不提供认证功能。
  • 需求二:要能单点登录就锦上添花了。ES 是个集群,在一个节点登录,肯定不期望换了一个节点,再登录一次吧。
  • 需求三:若能授权管理那就更完美了。对不同的账号区别对待,控制对 ES INDEX 的访问。

对于这几个需求,应该看你更关注哪个,以及项目进度。

环境

  • ES v.2.1.1
  • search-guard-ssl v.2.1.1.5

选择

找了相关资料,如果你想用 ES 2.2.* 以上版本,能选择的不多。因为,ELK 更新速度太快,很多插件跟不上。比如,elasticsearch-http-basic 验证插件,只支持到 ES 1.7,作者明确说不支持 2 以上版本,可官网都已经出到 2.2.3 啦(到 2016年5月)~

下面说一下,有几个选择:

  • elasticsearch-http-basic。的确简单,提供账号验证和白名单功能,可惜不支持 ES 1.7 以上版本的ES。因为,作者在 github 上提供源代码,也提供编译后 jar 包,最新版本是 1.5,但我们粗略知道 ES 从 2.* 版本开始,所有插件都需要 plugin-descriptor.properties 文件,可 elasticsearch-http-basic 没有,想试试加一个是否好使,看了源代码,知道会调用什么类,但不好使,又发现,该插件依赖的 elasticsearch jar 包的版本只有 1.5,显然过低,结果还真是,运行 ES 报错,提示找不到 AbstractPlugin 类(自定义插件都需要继承该类),看来高版本的 ES 已经去掉或重新命名了该类——此路不通。而且,只能解决需求一。
  • kibana-authentication-proxy。现在可能不叫这个名字,但是针对 kibana 肯定是有认证的,支持“Google OAuth2, BasicAuth(multiple users supported) and CAS Authentication”,能解决单点登录,跟 elasticsearch-http-basic 一起使用,能解决第一个和第三个问题,但是个人感觉 kibana,版本杂了点,kibana 3和 kibana 4 思路和目标完全不同,对 ES 的版本要求比较严格。 
  • Shield。ELK 官方提供,文档自然丰富,功能也强大,还能实现 TLS/SSL(集群内部通信当然是加密更安全),能满足上述需求。另外,还能实现集群之间的单点登录。但是,不是彻底免费的(只能免费用一个月,之后会有注册认证提醒,虽然还能继续使用)。 
  • 再就是使用 LDAP 或者 AD(Active Directory)。有点生僻,我就不研究了~
  • nginx,实现简单,ngnix 本来就有单点登录功能。如果把 nginx 放在 ES 集群前面,那自然可以实现认证,但感觉仅此而已,再复杂点的需求,估计就实现不了了~而且,试想,如果我只是想实现登录功能(单点登录),还要再搞台服务器,并且 ES 集群自己就能做均衡负载,我要 nginx 有什么用,只为了做认证?另外,从架构角度考虑,ES 集群的前面将来一定是应用,应用的前面才是 Nginx,这样的话,为了 ES 集群认证而搭的 Nginx 就显得很多余~总之,用 Nginx 实现 ES 集群的认证就不够美啦~ 
  • search-guard。功能丰富,还免费,除了不能实现单点登录,有点复杂外,其他都可以。

因此,我选择了 Search-guard 插件。

Search-guard-ssl

参考资料

  • search-guard-ssl
  • Open SSL setup

 

【未写完,待续】

你可能感兴趣的:(ELK——elasticsearch Search-guard 认证)