安装search-guard插件

由于使用的是elasticsearch5.6.3

./elasticsearch-plugin install -b com.floragunn:search-guard-5:5.6.3-19.1

5.X版本对应网址
6.X版本对应网址

生成CA证书和信任库文件

下载安装search-guard-ssl

git clone https://github.com/floragunncom/search-guard-ssl.git

在example-pki-scripts目录中即为相对应的脚本

clean.sh //清除脚本
example.sh //批量生成脚本
gen_client_node_cert.sh //客户端生成脚本
gen_node_cert.sh //节点证书生成标本
gen_node_cert_openssl.sh
gen_revoked_cert_openssl.sh
gen_root_ca.sh //根证书生成脚本
gen_unittest_certs.sh

使用官方脚本自己生成证书然后配置集群环境
可以修改/etc/下的root-ca.conf和signing-ca.conf修改证书配置项

[ ca_dn ]
0.domainComponent = "com"
1.domainComponent = "example"
organizationName = "Example Com Inc."
organizationalUnitName = "Example Com Inc. Root CA"
commonName = "Example Com Inc. Root CA"

之后按需求修改example.sh文件

#!/bin/bash
OPENSSL_VER="$(openssl version)"
if [[ $OPENSSL_VER == *"0.9"* ]]; then
echo "Your OpenSSL version is too old: $OPENSSL_VER"
echo "Please install version 1.0.1 or later"
exit -1
else
echo "Your OpenSSL version is: $OPENSSL_VER"
fi
set -e
./clean.sh
# 生成CA根证书,第一个参数为CA根证书密码,第二个参数为truststore信任证书密码
./gen_root_ca.sh capass changeit
# 生成节点证书: 第一个参数为节点编号,第二个参数为keystore文件密码,第三个参数为CA根证书密码。
# 此处我们只生成两个节点证书
./gen_node_cert.sh 0 changeit capass && ./gen_node_cert.sh 1 changeit capass && ./gen_node_cert.sh 2 changeit capass
# 生成客户端证书 第一个参数为客户端名称, 第二个参数为keystore文件名称,第三个参数为CA根证书名称。
./gen_client_node_cert.sh spock changeit capass
./gen_client_node_cert.sh kirk changeit capass
./gen_client_node_cert.sh logstash changeit capass
./gen_client_node_cert.sh filebeat changeit capass
./gen_client_node_cert.sh kibana changeit capass
#./gen_client_node_cert.sh sgadmin changeit capass
rm -f ./*tmp*

由于changeit 和capass密码过于简单建议使用密码生成器生成密码
OS X系统的钥匙串程序可以帮忙

然后运行example.sh生成证书文件
之后拷贝节点证书node-*-keystroe.jks和信任证书truststore.jks文件到elasicsearch程序的conf目录下。
单独拷贝sgadmin-keystore.jks到某一台节点作为之后生成searchguard index命令执行的服务器

修改elasticsearch的elasticsearch.yml配置文件

# 配置节点间通信证书,节点间通信使用TLS是强制的
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
# 设置不校验hostname
searchguard.ssl.transport.enforce_hostname_verification: false
searchguard.ssl.transport.resolve_hostname: false
#配置restful为https访问,此处为了方便暂时不配置
#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
# 配置管理员证书DN
searchguard.authcz.admin_dn:
- CN=sgadmin,OU=client,O=client,L=Test, C=DE
# 配置节点识别证书DN
searchguard.nodes_dn:
- 'CN=node-*.example.com,OU=SSL,O=Test,L=Test,C=DE'

启动es服务
执行

./sgadmin.sh -cd ../sgconfig -ks ../../../config/sgadmin-keystore.jks -kspass changeit -ts ../../../config/truststore.jks -tspass changeit -nhnv
# 如果需要指定ES服务IP请使用 -h 参数

访问es服务

账户名密码为admin admin

search-guard 权限配置

searchguard 主要有5个配置文件在plugins/search-guard-5/sgconfig 下:
1、sg_config.yml:主配置文件不需要做改动。
2、sg_internal_users.yml:本地用户文件,定义用户密码以及对应的权限。
3、sg_roles.yml:权限配置文件
4、sg_roles_mapping.yml:定义用户的映射关系
5、sg_action_groups.yml:定义权限

sg_internal_users.yml

定义search的用户
语法为

<username>:
hash: <hashed password>
roles:
- <rolename>
- <rolename>
#example
admin:
hash: $2a$12$xZOcnwYPYQ3zIadnlQIJ0eNhX1ngwMkTN.oMwkKxoGvDVPn4/6XtO
roles:
- readall
- writeall
# rolename应在sg_roles.yml文件中定义

sg_roles.yml

该配置文件定义角色划分
定义cluster级别的权限

sg-role-name:
cluster:
- '<action group or single permission>'
indices:
...

定义index级别的权限

sg-role-name:
cluster:
- '<action group or single permission>'
indices:
'?kibana': #索引库名称 可以使用正则匹配
'*': #类型
- INDICES_ALL #INDICES_ALL需要在sg_action_groups.yml定义

官方配置roles参考资料

sg_action_groups.yml

该配置文件定义具体的执行权限

<action group name>:
- '<permission or action groups>'
- '<permission or action group>'
- ...

官方配置action参考资料

sg_roles_mapping.yml

该配置文件定义用户和角色的映射关系

<Search Guard role name>:
users:
- <username>
- ...
backendroles:
- <rolename>
- ...
hosts:
- <hostname>
- ...
#example
dubo_read:
users:
- dubor
dubo_writer:
users:
- dubow
-

官方配置mapping-users-roles参考资料

reload配置命令

在/plugins/search-guard-5/tools/目录下执行

./sgadmin.sh -cd ../sgconfig -ks ../../../config/sgadmin-keystore.jks -kspass changeit -ts ../../../config/truststore.jks -tspass changeit -nhnv -icl

使用postman进行查询

使用了search-guard需要授权,在Authorization的tag页下进行配置

kibana-search-guard插件安装

GitHub-release找到对应的kibana插件版本下载

#example
wget https://github.com/floragunncom/search-guard-kibana-plugin/releases/download/v5.6.15-7/searchguard-kibana-5.6.15-7.zip
#安装插件
./bin/kibana-plugin install file:///opt/bigdata/searchguard-kibana-5.6.3-5.zip

修改kibana配置文件官方文档

elasticsearch.username: "kibanaserver" elasticsearch.password: "kibanaserver"
elasticsearch.url: "http://localhost:9200"
elasticsearch.ssl.ca: "/path/to/your/root-ca.pem"
elasticsearch.ssl.verify: true

之后启动kibana

参考资料

Elasticsearch5.5.0+Kibana5.5.0+SearchGuard5.5.0集群搭建
官方文档