es安全认证-search-guard
REST级别的典型HTTP Basic标头如下所示:
Authorization: Basic QWxhZGRpbjpPcGVuU2VzYW1l
Basic之后的部分是Base64的表示
Aladdin:OpenSesame
使用传输客户端时,您需要将它们添加到ThreadContext标头,而不是将基本身份验证凭据添加到HTTP请求:
TransportClient client = ...
client.threadPool().getThreadContext().putHeader("Authorization", "Basic " + encode("username:password"));
tc.prepareGet(...).get();
注:可参考官网文档
https://docs.search-guard.com/latest/elasticsearch-transport-clients-search-guard
- 说明
- elasticsearch由于自身没有做登录验证,所以会出现安全问题。Elasticsearch 数据安全可能存在的风险点:
- 在公网暴露集群TCP 端口或者 HTTP 端口。
- Elasticsearch 集群节点之间通信是明文的,可以被窃取或者篡改。
- 没有细粒度控制索引的操作权限
- 非必要情况下关闭HTTP端口(只保留Client 节点的HTTP端口)
- 非必要情况下关闭动态脚本,部分脚本语言
- 安全方案
2.1. 用官方插件x-pack。优点:和elasticsearch和kibana集成较好,权限、用户比较全面。缺点:不开源。
2.2 通过nginx 指定受信服务器访问。
2.3. Search Guard。(选择searchguard的原因是开源,大部分功能可以满足我的项目需求)
- search-guard使用说明
1. search-guard 开源免费, Search Guard支持Transport Layer(Node-to-node)和REST Layer(HTTP/HTTPS)的SSL/TLS加密传输,并且Transport Layer和REST Layer都可以单独配置是否开启SSL/TLS加密.
2. Search Guard提供了一套完整的“用户-角色-权限”控制系统。免费版权限可以控制到indice/type、host级别。
注:如果需要Document level security(DLS)和Field level security(FLS)级别的权限控制,或者Audit logging审计功能,或者需要支持如LDAP、Kerberos等第三方用户认证系统的话,那就购买Enterprise License(每个集群一个License,无所谓集群规模)。
3.Search Guard权限可以动态配置,我们可以把需要的权限添加到对应的文件,这些文件都作为文档存储在Elasticsearch中的searchguard索引中,然后通过sgadmin工具来更新配置(即将文件加载到ES),加载后立即生效,无需重启ES节点。
4. Search Guard 以插件的形式发布,它要提供服务需要依赖Search Guard SSL。在Elasticsearch 5.x之前需要单独安装Search Guard和Search Guard SSL;Elasticsearch 5.x之后,Search Guard默认已经集成了对应版本的Search Guard SSL,无需单独安装了。
- Windows 安装使用search-guard
1.切换到es的bin目录安装 search-guard插件执行如下命令
例elasticsearch-plugin install -b com.floragunn:search-guard-6:6.5.4-24.0
注意:版本号一定要对应searchguard 6以后的版本与es版本号做了匹配
2.生成秘钥库文件
下载search-guard-ssl-6.5.4-25.5 (版本号)解压缩合适的地方后,切到example-pki-scripts目录下通过执行example.sh自动生成证书。如果由于任何原因需要重新执行脚本,在同一目录中执行./clean.sh,即可自动删除所有生成的文件,复制密钥库和信任库文件 到 elasticsearch 的 config文件夹下.
search-guard证书分为3类:
客户端证书(Client certificates)
管理员证书(Admin certificates)
节点证书(Node certificates)
可参考:https://github.com/werowe/search-guard-docs/blob/master/tls_overview.md
客户端证书是TLS证书,用在es 客户端,支持rest client和transport client ;
管理员证书也是客户端证书。客户端证书如果在es配置文件elasticsearch.yml中增加了如下配置,就变成了管理员证书,可以配置多个:
searchguard.authcz.admin_dn:
- CN=test, OU=yijiao, O=yijiao, L=Test, C=DE
- CN=ischool, OU=yijiao, O=yijiao, L=Test, C=DE
节点证书用在es节点。保证es节点之间通信安全。节点证书没有权限限制,即每个操作都是允许的。也不能针对节点证书配置权限。
example-pki-scripts目录下有这几个脚本文件:
gen_client_node_cert.sh 创建客户端证书
gen_node_cert.sh 创建节点证书
gen_root_ca.sh 创建根证书
etc/root-ca.conf 根证书配置
etc/signing-ca.conf 签名证书配置
3.自定义证书说明:保证根证书配置和签名证书配置一致 (内容可自定义)
0.domainComponent = "www.test.com” 域名
1.domainComponent = "www.test.com" 域名
organizationName = "Test" 组织名称
organizationalUnitName = "Test Root CA" 组织单位名称
commonName = "Test Root CA" 通用名称
3.1 修改项说明gen_client_node_cert.sh
3.1.1.修改证书发行者信息
if [ -z "$DN" ]; then
DN="CN=$CLIENT_NAME, OU=yijiao, O=yijiao, L=SH, C=DE"
fi
其中:CN=名字与姓氏,OU=组织单位名称,O=组织名称,L=城市或区域名 称,ST=州或省份名称,C=单位的两字母国家代码,
如:CN=basedata,OU=xxx.com,O=xxx,L=CS,C=CN
3.2.2、修改证书有效期:
"$BIN_PATH" -genkey \
-alias $CLIENT_NAME \
-keystore $CLIENT_NAME-keystore.jks \
-keyalg RSA \
-keysize 2048 \
-sigalg SHA256withRSA \
-validity 712 \
-keypass $KS_PASS \
-storepass $KS_PASS \
-dname "$DN"
其中$BIN_PATH 为keytool,validity为有效期,单位是天。
注:keytool为jdk自带工具。
3.2 gen_node_cert.sh修改项说明
3.2.1.修改证书发行者信息 ,步骤同上gen_client_node_cert.sh
3.2.2、修改证书有效期 ,步骤同上gen_client_node_cert.sh
3.3 生成证书
生成的证书说明:
根证书: truststore.jks
客户端证书:sgadmin-keystore.jks该证书将会配置到es配置文件,做为管理员证书
客户端证书:ischool-keystore.jks
节点证书: node-0-keystore.jks,node-1-keystore.jks
Zip包下载链接地址:
https://github.com/floragunncom/search-guard-ssl/archive/v6.5.4-25.5.zip
3.4 配置es elasticsearch.yml
# 配置ssl
searchguard.ssl.transport.enabled: true #必须要设置为true,否则es启动不了
searchguard.ssl.transport.keystore_filepath: node-0-keystore.jks
searchguard.ssl.transport.keystore_password: 12345678
searchguard.ssl.transport.truststore_filepath: truststore.jks
searchguard.ssl.transport.truststore_password: pwd123
searchguard.ssl.transport.enforce_hostname_verification: false
searchguard.ssl.transport.resolve_hostname: false
# 配置http
# http配置
#searchguard.ssl.http.enabled 配置为true时 es http不能访问
searchguard.ssl.http.enabled: false
searchguard.ssl.http.keystore_filepath: node-0-keystore.jks
searchguard.ssl.http.keystore_password: admin123
searchguard.ssl.http.truststore_filepath: truststore.jks
searchguard.ssl.http.truststore_password: admin123
#配置管理员证书,这里注意,下面的配置一定要和客户端证书一致,否则不能写入search-guard配置
searchguard.authcz.admin_dn:
- CN=ischool,OU=yijiao.com,O=yijiao,L=SH,C=CN
3.5 使用sgadmin工具配置写入ES
./plugins/search-guard-6/tools/sgadmin.sh -cd plugins/search-guard-6/sgconfig -ks plugins/search-guard-6/sgconfig/basedata-keystore.jks -kspass 12345678 -ts plugins/search-guard-6/sgconfig/truststore.jks -tspass pwd123 -cn test -h 0.0.0.0 -p 9300 -nhnv
-p 9300 对应elasticsearch transport连接的端口号
-cn test 为elasticsearch 集群名称 cluster.name
-h 0.0.0.0 对应elasticsearch配置:network.host
注:Winows 使用sgadmin.bat;以后每次调整searchguard 用户,角色和权限都需要执行一次写入search-guard配置操作;写入search-guard配置不需要重启Elasticsearch.
3.6 plugins/search-guard-2/tools/hash.sh:生成hash字符串,生成密码
hash.bat -p admin123 或 ./hash.sh -p admin123
3.7 elasticsearch.yml
添加禁用xpack安全验证xpack.security.enabled: false
- transportclient 访问使用的是SSL认证
1. 添加依赖 (注意版本号否则会引起jar包冲突)
<dependency>
<groupId>com.floragunn</groupId>
<artifactId>search-guard-ssl</artifactId>
<version>6.5.4-25.5</version>
</dependency>
2. 把生成的证书文件拷贝到项目
javaapi-keystore.jks和truststore.jks
例如:
3. 初始化客户端transportclient配置信息
4. transportclient调用执行时添加认证
使用用户名/密码验证
传输级别上的凭据与通过HTTP基本身份验证提供的凭据非常相似。您使用的格式和机制完全相同,这意味着您
- 为每个请求添加“Authenticate”标头
- 其中包含由冒号分隔的Base64编码用户名和密码
es安全认证-search-guard相关推荐
- 基于Search Guard的Elasticsearch安全认证和授权配置
文章目录 Install the Search Guard Plugin for your Elasticsearch version Disable shard allocation Stop al ...
- Mysql 与ES(Elastic Search)对比
Mysql 1.关系型数据库,顾名思义,适用于结构化数据(数据与数据之间存在强关联)的存储和查询: 2.适用于复杂的业务逻辑控制.频繁数据更改这样的场景使用: 3.需要保证数据的原子性,可认为保证多个 ...
- Search Guard 1.3 测试配置
测试配置 在上面三个小节Search Guard 1.0. 1.1.1.2中,我们配置了用户和角色.现在来测试一下这些配置是否成功. 本文: 检查配置的用户 访问Elasticsearch 在检查之前 ...
- ES cross cluster search跨集群查询
ES 5.3以后出的新功能.测试demo如下: 下载ES 5.5版本,然后分别本机创建2个实例,配置如下: cluster.name: xx1 network.host: 127.0.0.1 http ...
- 【ES实战】Search的滚动查询(Scroll)
滚动查询(Scroll) 虽然搜索请求返回结果是单个"页面",但scroll API 可用于从单个搜索请求中检索大量结果(甚至所有结果),其方式与在传统数据库使用相似. scrol ...
- 数据千万条,安全第一条
女主宣言 短短一个月内Elasticsearch被曝了5次数据泄露事件.他们一定没有看到女主大大之前发过的文章<谨慎前行-浅谈Elasticsearch安全策略>,今天带大家回顾一下~ P ...
- 宜人贷蜂巢ELK Stack之elasticsearch权限探索
前言 上文<宜人贷蜂巢API网关技术解密之Netty使用实践>提到了,API网关"承外对内",将外部请求,转发到内部各个抓取服务.在网关中,不仅可以做鉴权.加解密.路由 ...
- 龙叔学ES:Elasticsearch XPACK安全认证
目录 1.什么是Xpack 2.相关安全配置介绍 2.1.xpack.security.enabled 2.2.xpack.security.http.ssl 2.3.xpack.security.t ...
- elasticsearch 配置安全认证X-pack
在ElasticSearch6.8及以上版本开启安全认证功能 es之前版本一直无用户验证功能,不过官方有提供一x-pack,但是问题是付费.在es的6.7.0版本中,已经集成了x-pack,虽然es团 ...
最新文章
- interface接口_golang 基础(Four) 接口进阶
- 数据结构课程设计——机票售卖系统(C++)
- node-serialport —— Node.js 串口数据读写包
- mysql主从切换gtid不一致_解决mysql使用GTID主从复制错误问题
- c语言 动态内存相关函数
- ejb java_EJB继承与Java继承不同
- mysql线程缓存和表缓存
- 基于ELK和Python搭建简单的监控告警系统
- 程序猿应该记住的几条基本规则
- C语言每日一题之No.12
- python3tkinter_python3使用tkinter制作动画
- 录屏软件 Apowersoft(傲软录屏)
- 一:评分卡模型分数计算
- iOS开发通过微信学习hijack(一)函数劫持
- 【降维打击】解决加密视频录屏问题
- 你的独立思考能力正在被它吞噬掉
- 主流数据库书籍电子版下载汇总贴(84本)
- 送书福利|少儿编程能够一玩就会吗?够胆量的家长,让孩子打卡30天玩会编程!...
- iOS自动化_免越狱_免签名
- 初出茅庐 你好C语言