Elasticsearch5.5.0+Kibana5.5.0+SearchGuard5.5.0集群搭建

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

image.png

输入默认添加的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/

image.png

参考

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容