用SearchGuard做elasticsearch的登录认证

一、关于elasticsearch的登录认证

elasticsearch由于自身没有做登录验证,所以会出现安全问题。Elasticsearch 数据安全可能存在的风险点: 
- 在公网暴露集群TCP 端口或者 HTTP 端口。 
- Elasticsearch 集群节点之间通信是明文的,可以被窃取或者篡改。 
- 没有细粒度控制索引的操作权限 
- 非必要情况下关闭HTTP端口(只保留Client 节点的HTTP端口) 
- 非必要情况下关闭动态脚本,部分脚本语言

在项目中要对elasticsearch进行登录验证,翻阅资料后大概是有三个办法: 
1. 用官方插件x-pack。优点:和elasticsearch和kibana集成较好,权限、用户比较全面。缺点:不开源。 
2. 通过nginx 指定受信服务器访问。 
3. Search Guard。(选择searchguard的原因是开源,大部分功能可以满足我的项目需求)

二、关于SearchGuard

search-guard是elastcisearch的一款插件,提供加密,身份验证和授权,基于search guard SSL,另外提供可插入的身份验证/授权模块,search-guard是shield的替代品,可免费提供所有的基本安全功能, 
github地址:https://github.com/floragunncom/search-guard

三、部署searchguard示例(安装参考:http://floragunncom.github.io/search-guard-docs/installation.html)
  • elasticsearch版本:5.3
  • searchguard版本:5.3.0
  • 系统环境:ubantu
1.安装searchguard插件
[root@localhost elasticsearch]# bin/elasticsearch-plugin install -b com.floragunn:search-guard-5:5.3.0-11

安装完成后看在plugin文件夹下是否有searchguard目录。

2.下载 search-guard-ssl

github地址:

https://github.com/floragunncom/search-guard-ssl/tree/es-5.3.0/example-pki-scripts   

下载后在目录中找到example.sh,打开并编辑: 
“` 
[root@localhost example-pki-scripts]# cat example.sh

!/bin/bash

set -e 
./clean.sh 
./gen_root_ca.sh capass changeit 
./gen_node_cert.sh 1 changeit capass 
./gen_client_node_cert.sh spock changeit capass 
./gen_client_node_cert.sh kirk changeit capass


修改后运行 

[root@localhost example-pki-scripts]# ./example.sh 

复制 truststore.jks node-x-keystore.jks 证书到elasticsearch: 

[root@localhost example-pki-scripts]# cp node-1-keystore.jks truststore.jks /etc/elasticsearch/ 

配置elasticsearch 各结点基于tls加密通讯: 

[root@localhost example-pki-scripts]# vim /etc/elasticsearch/elasticsearch.yml 
node.name: node-1 
searchguard.ssl.transport.keystore_filepath: node-1-keystore.jks 
searchguard.ssl.transport.keystore_password: changeit 
searchguard.ssl.transport.truststore_filepath: truststore.jks 
searchguard.ssl.transport.truststore_password: changeit 
searchguard.ssl.transport.enforce_hostname_verification: false 

重启后,elasticsearch 之间的连接已经是加密的了,但是有如下报错,此问题是没有初始化 Search Guard 索引。 
在elasticsearch控制台报错: 

[ERROR][c.f.s.a.BackendRegistry ] Not yet initialized (you may need to run sgadmin) 
“` 
##### 3.初始化 Search Guard 索引,配置帐号。

复制kirk-keystore.jks证书 

[root@localhost example-pki-scripts]# cp kirk-keystore.jks /usr/share/elasticsearch/plugins/search-guard-5/sgconfig/ 

新增以下配置参数 
“` 
[root@localhost example-pki-scripts]# vim /etc/elasticsearch/elasticsearch.yml 
searchguard.authcz.admin_dn: 
- “CN=kirk, OU=client, O=client, L=Test, C=DE”


重启elasticsearch服务 
初始化 Search Guard 索引 

[root@localhost search-guard-5]# cd /usr/share/elasticsearch/plugins/search-guard-5

[root@localhost search-guard-5]# tools/sgadmin.sh -ts /etc/elasticsearch/truststore.jks -tspass changeit -ks sgconfig/kirk-keystore.jks -kspass changeit -cd sgconfig/ -icl -nhnv -h localhost 
“` 
运行结尾为Done with success表示初始化索引成功

如果出现权限问题,请给root赋sgadmin.sh的权限:

chmod +x plugins/search-guard-2/tools/sgadmin.sh

其中 sg_internal_users.yml 保存着默认的用户和密码

admin:
  hash: $2a$12$VcCDgh2NDk07JGN0rjGbM.Ad41qVR/YFJcgHp0UGns5JDymv..TOG
  #password is: admin

使用浏览器访问:http://localhost:9200 提示输入密码,输入默认用户: admin admin ,可登陆表示正常。

4.配置REST-API 基于https连接
[root@localhost elk]# vim /etc/elasticsearch/elasticsearch.yml,

searchguard.ssl.http.enabled: true
searchguard.ssl.http.keystore_filepath: node-1-keystore.jks
searchguard.ssl.http.keystore_password: changeit
searchguard.ssl.http.truststore_filepath: truststore.jks
searchguard.ssl.http.truststore_password: changeit

使用浏览器访问:https://localhost:9200 提示输入密码,输入默认用户: admin admin ,可登陆表示正常 
http://localhost:9200 无加密拒绝访问。

5.配置kibana

修改 kibana.yml 参数

[root@localhost kibana]# vim /etc/kibana/kibana.yml 

elasticsearch.url: "https://localhost:9200"
elasticsearch.username: "kibanaserver" 
elasticsearch.password: "kibanaserver"
elasticsearch.ssl.verify: false

修改kibana console插件参数,如果不修改,无法使用kibana console的功能。

[root@localhost kibana]# vim /usr/share/kibana/src/core_plugins/console/index.js 
         ssl: {
            verify: false 默认为:true
          }

重启kibana,提示要求输入密码 admin admin

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值