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相关推荐

  1. 基于Search Guard的Elasticsearch安全认证和授权配置

    文章目录 Install the Search Guard Plugin for your Elasticsearch version Disable shard allocation Stop al ...

  2. Mysql 与ES(Elastic Search)对比

    Mysql 1.关系型数据库,顾名思义,适用于结构化数据(数据与数据之间存在强关联)的存储和查询: 2.适用于复杂的业务逻辑控制.频繁数据更改这样的场景使用: 3.需要保证数据的原子性,可认为保证多个 ...

  3. Search Guard 1.3 测试配置

    测试配置 在上面三个小节Search Guard 1.0. 1.1.1.2中,我们配置了用户和角色.现在来测试一下这些配置是否成功. 本文: 检查配置的用户 访问Elasticsearch 在检查之前 ...

  4. ES cross cluster search跨集群查询

    ES 5.3以后出的新功能.测试demo如下: 下载ES 5.5版本,然后分别本机创建2个实例,配置如下: cluster.name: xx1 network.host: 127.0.0.1 http ...

  5. 【ES实战】Search的滚动查询(Scroll)

    滚动查询(Scroll) 虽然搜索请求返回结果是单个"页面",但scroll API 可用于从单个搜索请求中检索大量结果(甚至所有结果),其方式与在传统数据库使用相似. scrol ...

  6. 数据千万条,安全第一条

    女主宣言 短短一个月内Elasticsearch被曝了5次数据泄露事件.他们一定没有看到女主大大之前发过的文章<谨慎前行-浅谈Elasticsearch安全策略>,今天带大家回顾一下~ P ...

  7. 宜人贷蜂巢ELK Stack之elasticsearch权限探索

    前言 上文<宜人贷蜂巢API网关技术解密之Netty使用实践>提到了,API网关"承外对内",将外部请求,转发到内部各个抓取服务.在网关中,不仅可以做鉴权.加解密.路由 ...

  8. 龙叔学ES:Elasticsearch XPACK安全认证

    目录 1.什么是Xpack 2.相关安全配置介绍 2.1.xpack.security.enabled 2.2.xpack.security.http.ssl 2.3.xpack.security.t ...

  9. elasticsearch 配置安全认证X-pack

    在ElasticSearch6.8及以上版本开启安全认证功能 es之前版本一直无用户验证功能,不过官方有提供一x-pack,但是问题是付费.在es的6.7.0版本中,已经集成了x-pack,虽然es团 ...

最新文章

  1. interface接口_golang 基础(Four) 接口进阶
  2. 数据结构课程设计——机票售卖系统(C++)
  3. node-serialport —— Node.js 串口数据读写包
  4. mysql主从切换gtid不一致_解决mysql使用GTID主从复制错误问题
  5. c语言 动态内存相关函数
  6. ejb java_EJB继承与Java继承不同
  7. mysql线程缓存和表缓存
  8. 基于ELK和Python搭建简单的监控告警系统
  9. 程序猿应该记住的几条基本规则
  10. C语言每日一题之No.12
  11. python3tkinter_python3使用tkinter制作动画
  12. 录屏软件 Apowersoft(傲软录屏)
  13. 一:评分卡模型分数计算
  14. iOS开发通过微信学习hijack(一)函数劫持
  15. 【降维打击】解决加密视频录屏问题
  16. 你的独立思考能力正在被它吞噬掉
  17. 主流数据库书籍电子版下载汇总贴(84本)
  18. 送书福利|少儿编程能够一玩就会吗?够胆量的家长,让孩子打卡30天玩会编程!...
  19. iOS自动化_免越狱_免签名
  20. 初出茅庐 你好C语言

热门文章

  1. MindSpore:MindScience之MindElec 电磁仿真结果可视化
  2. STM32F407+FreeRTOS+LwIP移植问题汇总
  3. Clause 开发技能之 CMake 进阶教程(三)
  4. 读《孙子兵法》,品启强人生
  5. 【最短路算法例题-升降梯上】-C++
  6. PHP开发的微信公众平台消息接口具体流程
  7. 在线靶场-墨者-安全意识3星-日常密码泄露分析溯源
  8. 抖音很火的情侣公众号天气推送
  9. 哈希表查找——等概率情况下查找成功和查找不成功的平均查找长度的计算
  10. 根据两地坐标,计算出距离