SearchGuard简介
Search Guard 是 Elasticsearch 的安全插件。它为后端系统(如LDAP或Kerberos)提供身份验证和授权,并向Elasticsearch添加审核日志记录和文档/字段级安全性。
Search Guard 所有基本安全功能都是免费的,并且内置在Search Guard中。 Search Guard 支持OpenSSL并与Kibana和logstash配合使用。
基本安全功能包括:
通过SSL / TLS进行节点到节点加密
通过HTTPS(SSL / TLS)安全REST层
灵活的REST层访问控制(基于用户/角色;基于别名,索引和类型)
灵活的传输层访问控制(基于用户/角色;基于别名,索引和类型)
HTTP基本认证
HTTP代理身份验证
HTTP SSL/客户端证书身份验证
X-Forwarded-For(XFF)支持
内部认证/授权
匿名登录/未认证访问
用户模拟
Tribe 节点支持
Elasticsearch与SearchGuard-Elasticsearch插件安装
此处以两个节点的集群为例,准备两台CentOS7虚拟机cluster201(192.168.88.201)、cluster202(192.168.88.202)
先在cluster201上进行配置:
[hadoop@cluster201 bigdata]$ pwd
/opt/bigdata
# 下载elasticsearch安装包
[hadoop@cluster201 bigdata]$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.0.zip
# 解压安装包
[hadoop@cluster201 bigdata]$ unzip elasticsearch-5.5.0.zip
# 进入解压出来的目录
[hadoop@cluster201 bigdata]$ cd elasticsearch-5.5.0
[hadoop@cluster201 elasticsearch-5.5.0]$ pwd
/opt/bigdata/elasticsearch-5.5.0
# 在线安装searchguard插件,请通过github查看最先版本
[hadoop@cluster201 elasticsearch-5.5.0]$ ./bin/elasticsearch-plugin install -b com.floragunn:search-guard-5:5.5.0-15
# 若服务器不能连接外网,可现在一台可访问外网的主机现在安装包,然后进行在线安装,安装包现在地址:
# http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22com.floragunn%22%20AND%20a%3A%22search-guard-5%22
# 比如下载5.5.0-15的地址:http://search.maven.org/remotecontent?filepath=com/floragunn/search-guard-5/5.5.0-15/search-guard-5-5.5.0-15.zip
# 我们下载下来将search-guard-5-5.5.0-15.zip放入/opt/bigdata目录,然后执行如下命令进行离线安装
# [hadoop@cluster201 elasticsearch-5.5.0]$ ./bin/elasticsearch-plugin install -b file:///opt/bigdata/search-guard-5-5.5.0-15.zip
利用官方脚本快速配置与初始化请参考:http://floragunncom.github.io/search-guard-docs/installation.html
下面我们使用官方脚本自己生成证书然后配置集群环境:
# 回到bigdata目录
[hadoop@cluster201 elasticsearch-5.5.0]$ cd /opt/bigdata/
[hadoop@cluster201 bigdata]$ pwd
/opt/bigdata
# 从github克隆search-guard-ssl项目
[hadoop@cluster201 bigdata]$ git clone https://github.com/floragunncom/search-guard-ssl.git
# 进入生成证书的目录
[hadoop@cluster201 bigdata]$ cd search-guard-ssl/example-pki-scripts/
[hadoop@cluster201 example-pki-scripts]$ ll
总用量 28
# 清除已生成证书的相关文件
-rwxrwxr-x. 1 hadoop hadoop 154 8月 14 14:21 clean.sh
# 证书生成配置:root-ca.conf 根证书配置 signing-ca.conf 签名证书配置
drwxrwxr-x. 2 hadoop hadoop 49 8月 14 14:27 etc
# 生成所有相关证书的脚本
-rwxrwxr-x. 1 hadoop hadoop 1165 8月 14 14:32 example.sh
# 生成客户端证书的脚本
-rwxrwxr-x. 1 hadoop hadoop 2279 8月 14 14:21 gen_client_node_cert.sh
-rwxrwxr-x. 1 hadoop hadoop 1764 8月 14 14:21 gen_node_cert_openssl.sh
# 生成节点证书的脚本
-rwxrwxr-x. 1 hadoop hadoop 2734 8月 14 14:21 gen_node_cert.sh
-rwxrwxr-x. 1 hadoop hadoop 2104 8月 14 14:21 gen_revoked_cert_openssl.sh
# 生成ca根的脚本
-rwxrwxr-x. 1 hadoop hadoop 1993 8月 14 14:21 gen_root_ca.sh
可修改etc下证书配置文件中的自定义项:
0.domainComponent = "www.test.com” #域名,如:test.cn
1.domainComponent = "www.test.com" #域名, 如:test.com.cn
organizationName = "Test" #组织名称, 如:test
organizationalUnitName = "Test Root CA" #组织单位名称, 如:bigdata
commonName = "Test Root CA" #通用名称(如主机名), 如: es.node-1.test.cn
也可修改生成节点证书与客户端证书中的自定义项,其中简写含义如下:
CN=commonName #通用名称(如主机名), 如: es.node-1.test.cn
OU=organizationalUnitName #组织单位名称, 如:bigdata
O=organizationName #组织名称, 如:test
L=localityName #地区名称, 如:chengdu
C=countryName # 国家名称,如:CN
此处我们不对自定一项进行修改
下面修改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根证书密码,第二个参数为TS密码(truststore,信任证书密码)
./gen_root_ca.sh capass changeit
# 生成节点证书: 第一个参数为节点编号,第二个参数为keystore文件密码,第三个参数为CA根证书密码。
# 此处我们只生成两个节点证书
./gen_node_cert.sh 0 changeit capass && ./gen_node_cert.sh 1 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
# 生成一个sgadmin客户端证书,用于配置管理
./gen_client_node_cert.sh sgadmin changeit capass
# 生成一个javaapi访问的客户端证书
./gen_client_node_cert.sh javaapi changeit capass
rm -f ./*tmp*
然后运行example.sh生成证书文件:
[hadoop@cluster201 example-pki-scripts]$ ./example.sh
# 将相关证书文件拷贝到es的配置文件目录
[hadoop@cluster201 example-pki-scripts]$ cp node-0-keystore.jks node-1-keystore.jks sgadmin-keystore.jks truststore.jks /opt/bigdata/elasticsearch-5.5.0/config/
修改elasticsearch的配置文件
[hadoop@cluster201 example-pki-scripts]$ cd /opt/bigdata/elasticsearch-5.5.0/
[hadoop@cluster201 elasticsearch-5.5.0]$ vim config/elasticsearch.yml
增加如下内容,tls相关配置请参考:http://floragunncom.github.io/search-guard-docs/tls_configuration.html:
cluster.name: vm-cluster
node.name: node-0
network.host: 0.0.0.0
discovery.zen.ping.unicast.hosts: ["cluster201", "cluster202"]
discovery.zen.minimum_master_nodes: 1
# 配置节点间通信证书,节点间通信使用TLS是强制的
searchguard.ssl.transport.keystore_filepath: node-0-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-0-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安装包打包传输到cluster202节点:
[hadoop@cluster201 elasticsearch-5.5.0]$ cd ..
[hadoop@cluster201 bigdata]$ tar -zvcf elasticsearch-5.5.0.tar.gz elasticsearch-5.5.0
[hadoop@cluster201 bigdata]$ scp elasticsearch-5.5.0.tar.gz cluster202:/opt/bigdata
进入cluster202节点解压安装包,然后修改新增配置文件如下:
cluster.name: vm-cluster
node.name: node-1
network.host: 0.0.0.0
discovery.zen.ping.unicast.hosts: ["cluster201", "cluster202"]
discovery.zen.minimum_master_nodes: 1
# 配置节点间通信证书,节点间通信使用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节点
[hadoop@cluster201 bigdata]$ ./elasticsearch-5.5.0/bin/elasticsearch -d
[hadoop@cluster202 bigdata]$ ./elasticsearch-5.5.0/bin/elasticsearch -d
初始化用户配置信息,在cluster201上执行即可
# 进入工具目录
[hadoop@cluster201 bigdata]$ cd elasticsearch-5.5.0/plugins/search-guard-5/tools/
# 为脚本添加可执行权限
[hadoop@cluster201 tools]$ chmod +x *.sh
# 将默认配置写入es,若要修改配置,修改../sgconfig中配置文件即可,然后重新执行如下命令即可生效
[hadoop@cluster201 tools]$ ./sgadmin.sh -cn vm-cluster -cd ../sgconfig -ks ../../../config/sgadmin-keystore.jks -kspass changeit -ts ../../../config/truststore.jks -tspass changeit -nhnv
然后通过浏览器查看集群状态:
http://192.168.88.201:9200/_cluster/health
输入默认添加的admin/admin用户即可
searchguard 主要有5个配置文件在plugins/search-guard-2/sgconfig 下:
1、sg_config.yml:主配置文件不需要做改动。
2、sg_internal_users.yml:本地用户文件,定义用户密码以及对应的权限。
3、sg_roles.yml:权限配置文件
4、sg_roles_mapping.yml:定义用户的映射关系
5、sg_action_groups.yml:定义权限
详细说明请参考SearchGuard权限配置
Kibana与SearchGuard-Kibana插件安装
我们将Kibana安装在cluster201节点上即可:
[hadoop@cluster201 bigdata]$ pwd
/opt/bigdata
# 下载Kibana
[hadoop@cluster201 bigdata]$ wget https://artifacts.elastic.co/downloads/kibana/kibana-5.5.0-linux-x86_64.tar.gz
# 下载对应版本的Kibana插件:https://github.com/floragunncom/search-guard-kibana-plugin/releases
[hadoop@cluster201 bigdata]$ wget https://github.com/floragunncom/search-guard-kibana-plugin/releases/download/v5.5.0-4/searchguard-kibana-5.5.0-4.zip
# 解压Kibana,然后进入对应目录
[hadoop@cluster201 bigdata]$ tar -zvxf kibana-5.5.0-linux-x86_64.tar.gz
[hadoop@cluster201 bigdata]$ cd kibana-5.5.0-linux-x86_64
# 安装SearchGuard插件
[hadoop@cluster201 kibana-5.5.0-linux-x86_64]$ ./bin/kibana-plugin install file:///opt/bigdata/searchguard-kibana-5.5.0-4.zip
在Kibana配置文件中添加如下内容:
server.host: "0.0.0.0"
elasticsearch.url: "http://localhost:9200"
# 若restful接口配置成了https则需如下配置
# elasticsearch.url: "https://localhost:9200"
# 配置Kibana服务器用户
elasticsearch.username: "kibanaserver"
elasticsearch.password: "kibanaserver"
详细配置请参考:http://floragunncom.github.io/search-guard-docs/kibana.html
然后访问:http://192.168.88.201:5601/
参考
http://www.dongcoder.com/detail-304066.html
http://www.cnblogs.com/shifu204/p/6376683.html?utm_source=itdadao&utm_medium=referral
http://floragunncom.github.io/search-guard-docs/
https://github.com/floragunncom/search-guard
http://floragunncom.github.io/search-guard-docs/kibana.html