es基于search-guard插件实现加密认证

系列文章目录

第一章 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加密认证。这两种方法就可以完全实现生产环境的应用。
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值