一、关于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插件
安装完成后看在plugin文件夹下是否有searchguard目录。
2.下载 search-guard-ssl
github地址:
下载后在目录中找到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的权限:
其中 sg_internal_users.yml 保存着默认的用户和密码
使用浏览器访问:http://localhost:9200 提示输入密码,输入默认用户: admin admin ,可登陆表示正常。
4.配置REST-API 基于https连接
使用浏览器访问:https://localhost:9200 提示输入密码,输入默认用户: admin admin ,可登陆表示正常
http://localhost:9200 无加密拒绝访问。
5.配置kibana
修改 kibana.yml 参数
修改kibana console插件参数,如果不修改,无法使用kibana console的功能。
重启kibana,提示要求输入密码 admin admin