用SearchGuard做elasticsearch的登录认证

来源:互联网 发布:淘宝计入最低价 编辑:程序博客网 时间:2024/06/05 04:15

用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示例

  • 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/bashset -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-1searchguard.ssl.transport.keystore_filepath: node-1-keystore.jkssearchguard.ssl.transport.keystore_password: changeitsearchguard.ssl.transport.truststore_filepath: truststore.jkssearchguard.ssl.transport.truststore_password: changeitsearchguard.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: truesearchguard.ssl.http.keystore_filepath: node-1-keystore.jkssearchguard.ssl.http.keystore_password: changeitsearchguard.ssl.http.truststore_filepath: truststore.jkssearchguard.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

0 0
原创粉丝点击