系列文章目录
第一章 es集群搭建
第二章 es集群基本操作命令
文章目录
前言
在实际生产环境中,中间件必须做到加密认证,因此本篇文章主要讲解以search-guard插件的方式实现es集群加密认证
一、search-guard是什么?
search-guard是Elasticsearch的一个安全权限plugin,特性包括:
权限控制粒度可以到indices,types,甚至可以到过滤field层次。同时也可以限制用户行为CRUD, admin权限等。
search-guard可以实现用户访问es中日志需要登陆授权,不同用户访问不同索引,不授权的索引无法查看,分组控制不同user查看各自的业务。
search-guard插件包含两部分,search-guard-ssl和search-guard-2两个插件
二、安装search-guard插件
0.安装Search Guard 插件的前提工作
1、关闭ES的分片功能
curl -XPUT 'http://xxx:9200/_cluster/settings?pretty' -H 'Content-Type: application/json' -d'
{
"persistent": {
"cluster.routing.allocation.enable": "none"
}
}'
2、停止es节点
Kill pid
1.下载插件
下载search-guard插件
(es版本和search-guard插件有对应版本 https://docs.search-guard.com/6.x-25/search-guard-versions)
wget https://releases.floragunn.com/search-guard-6/6.8.13-25.6/search-guard-6-6.8.13-25.6.zip
2.安装插件
使用ES已有的插件工具,安装命令如下。会自动在ES的plugins目录下创建search-guard文件
执行安装命令,前提是已安装es
/export/server/elasticsearch-6.8.13/bin/elasticsearch-plugin install -b file:///root/search-guard-6-6.8.13-25.6.zip
备注:
切记,plugins目录下不能存放任何打包后的文件,否则es启动会报相关错误
3.安装TLS工具
该工具主要用于生成es认证证书
下载TLS工具
wget https://repo1.maven.org/maven2/com/floragunn/search-guard-tlstool/1.6/search-guard-tlstool-1.7.tar.gz
解压
tar xf /root/search-guard-tlstool-1.7.tar.gz -C /export/server/search-guard-tlstool/
生成证书文件
执行以下命令
cd /export/server/esearch-guard-tlstool/config
cp example.yml tlsconfig.yml
#含义:
yibai 是公司名称
ca: 根证书配置
node: 节点证书配置
clients: 客户端证书配置
vim tlsconfig.yml
ca:
root:
dn: CN=root.ca.test.com,OU=CA,O=test ,DC=test,DC=com #自定义即可
keysize: 2048
validityDays: 3650
pkPassword: none
file: root-ca.pem
intermediate:
dn: CN=signing.ca.test.com,OU=CA,O=test,DC=test,DC=com #同第一步的自定义即可
keysize: 2048
# The validity of the generated certificate in days from now
validityDays: 3650
pkPassword: none
crlDistributionPoints: URI:https://raw.githubusercontent.com/floragunncom/unittest-assets/master/revoked.crl
defaults:
validityDays: 3650
pkPassword: none
nodesDn:
- "CN=*.test.com,OU=Ops,O=test,DC=test,DC=com"
nodeOid: "1.2.3.4.5.5"
generatedPasswordLength: 12
httpsEnabled: true
reuseTransportCertificatesForHttp: false
nodes:
- name: es
dn: CN=es.test.com,OU=Ops,O=test,DC=test,DC=com
dns: es
clients:
- name: spock
dn: CN=spock.test.com,OU=Ops,O=test,DC=test,DC=com
- name: kirk
dn: CN=kirk.test.com,OU=Ops,O=test,DC=test,DC=com
admin: true
4.生成CA和node、client证书
cd /export/server/search-guard-tlstool/tools
./sgtlstool.sh -c ../config/tlsconfig.yml -ca #ca
##会在tools下生成out目录
./sgtlstool.sh -c ../config/tlsconfig.yml -crt #node、client
5.给证书赋权、并修改es的配置目录权限
证书赋权
cd /export/server/search-guard-tlstool/tools/out
chmod 600 root-ca.* signing-ca.* es* spock.* kirk.*
修改es的配置目录权限
chmod 700 /export/server/elasticsearch-6.8.13/config
6.分发证书配置文件到每个es-node节点
cp /export/server/search-guard-tlstool/tools/out/{root-ca.pem,kirk.pem,kirk.key,es.pem,es.key} /export/server/elasticsearch-6.8.13/config
7.修改每台elasticsearch配置文件并重启服务
#添加以下配置
searchguard.ssl.transport.pemcert_filepath: es.pem
searchguard.ssl.transport.pemkey_filepath: es.key
searchguard.ssl.transport.pemtrustedcas_filepath: root-ca.pem
searchguard.ssl.transport.enforce_hostname_verification: false
searchguard.ssl.transport.resolve_hostname: false
xpack.security.enabled: false
searchguard.restapi.roles_enabled: ["sg_all_access"]
searchguard.authcz.admin_dn:
- CN=kirk.test.com,OU=Ops,O=test,DC=test,DC=com
searchguard.cert.oid: 1.2.3.4.5.5
#重启服务
su elasticsearch
/export/server/elasticsearch-6.8.13/bin/elasticsearch -d
8.每台节点使用sgadmin 启动 shard allocation
#因为第一步关闭了es分片功能,因此需要重启这个功能
cd /export/server/elasticsearch-6.8.13/plugins/search-guard-6/tools/
./sgadmin.sh -icl -nhnv -h 节点ip地址 --enable-shard-allocation -cacert ../../../config/root-ca.pem -cert ../../../config/kirk.pem -key ../../../config/kirk.key
9.es集群初始化
cd /export/server/elasticsearch-6.8.13/plugins/search-guard-6/tools/
./sgadmin.sh -icl -nhnv -h 节点IP地址 -cd ../sgconfig/ -cacert ../../../config/root-ca.pem -cert ../../../config/kirk.pem -key ../../../config/kirk.key
10.验证es集群认证功能
#默认用户密码是admin/admin
方法一:
http://xxx:9200/_searchguard/health
方法二:
curl -u admin:admin -k -XGET 'http://xxx:9200/_cat?pretty'
11.修改admin用户的默认密码
1、修改密码
cd /export/server/elasticsearch-6.8.13/plugins/search-guard-6/tools
./hash.sh -p 新密码 会产生出一段密钥
2、复制hash出来的密钥
cd /export/server/elasticsearch-6.8.13/plugins/search-guard-6/sgconfig
vim sg_internal_users.yml (注意每台es机器相同的密码hash之后的密钥都是不同的,因此该文件不能复用,每台机器都需要执行修改密码操作)
#password is: j7fc03HZg3HB5NWa
admin:
readonly: true
#hash: $2y$12$aUHp2s/6kC9MIwIzRlyTROJJC7a1ew4ZOgyxps/SSb6C2XcYDCHuO(旧的hash值)
hash: $2y$12$RPIUUgNPFIVjt/CyBkVDVOYWSlut1t2F7DuiQIVvExjttFBi4n90O(第三步生成的hash值复制在这里)
roles:
- admin
attributes:
#no dots allowed in attribute names
attribute1: value1
attribute2: value2
attribute3: value3
3、执行tools/目录下的install_demo_configuration.sh脚本
sh install_demo_configuration.sh
有三步,分别输入y即可
4、执行集群初始化sgadmin.sh脚本 看到success字样即完成密码修改(前提是es集群已处于运行中)
cd /export/server/elasticsearch-6.8.13/plugins/search-guard-6/tools
./sgadmin.sh -cd ../sgconfig -key ../../../config/kirk.key -cert ../../../config/kirk.pem -cacert ../../../config/root-ca.pem -nhnv -icl
12.配置新用户密码
1、产生密钥
cd /export/server/elasticsearch-6.8.13/plugins/search-guard-6/tools
./hash.sh -p 新密码 会产生出一段密钥
2、修改配置文件并添加新用户及密钥
cd /export/server/elasticsearch-6.8.13/plugins/search-guard-6/sgconfig
vim sg_internal_users.yml (注意每台es机器相同的密码hash之后的密钥都是不同的,因此该文件不能复用,每台机器都需要执行修改密码操作)
icity: #新用户
readonly: true #是否只读
hash: $2y$12$aUHp2s/6kC9MIwIzRlyTROJJC7a1ew4ZOgyxps/SSb6C2XcYDCHuO #第一步产生的密钥
roles:
- admin #这个icity对应的角色是admin超管角色
attributes:
#no dots allowed in attribute names
attribute1: value1
attribute2: value2
attribute3: value3
3、执行tools/目录下的install_demo_configuration.sh脚本
sh install_demo_configuration.sh
有三步,分别输入y即可
4、执行集群初始化sgadmin.sh脚本 看到success字样即完成新用户添加及密码修改(前提是es集群已处于运行中)
cd /export/server/elasticsearch-6.8.13/plugins/search-guard-6/tools
./sgadmin.sh -cd ../sgconfig -key ../../../config/kirk.key -cert ../../../config/kirk.pem -cacert ../../../config/root-ca.pem -nhnv -icl
总结
本篇文章主要以search-guard插件的方式来实现es集群的加密认证,包含了创建认证证书、创建新用户、修改密码等操作,还可以给不同的用户赋予不同的权限及设置不同的角色role,此处就不再过多讲解,后期会再新增一个基于x-pack加密认证。这两种方法就可以完全实现生产环境的应用。