ElasticSearchTransportClient集成SearchGuard插件实现索引级别的权限管控

由于官方的X-pack收费,所以退而求其次选择了SearchGuard作为ElasticSearch集群的安全权限管控组件。如果已经按照官网标准为ElasticSearch每个节点都安装好了SearchGuard插件

 集群环境:三台ElasticSearch节点版本5.4.3;SearchGuard5;

本文主要提供一种基于pem证书和key密码进行TransportClient认证,从而达到和后端用户实现映射的方法。

我们其实都知道路径{ElasticSearch路径}/plugins/search-guard-5/sgconfig 中的各个配置文件的作用,但是并不知道如何将这种纯后端形式的user转换成证书的权限:

这里面涉及到了一个内部后端用户和证书的映射问题

如果是admin证书那将会有所有权限,分配出去权限设置如同虚设,如果是非admin证书,只是普通的客户端证书操作时会报错“没有该用户”;我们就可以按照这个错误去解决问题了,这个用户其实指的就是内部后端的用户,用户名就是最开始使用ssl工具刷新时使用的tlsconfig.yml中的 dn的值

主要是tlsconfig.yml中的client标签下的配置:

clients:- name: spock
dn: CN=spock.zglt.com,OU=Ops,O=Client,DC=example,DC=com
admin: true
- name: kirk
dn: CN=kirk.zglt.com,OU=Ops,O=Client,DC=example,DC=com
admin: true
- name: client
dn: CN=client.zglt.com,OU=Ops,O=Client,DC=example,DC=com

这其中的spock和kirk的证书就是admin的用户证书,可以以admin用户的权限对集群进行操作;client就是我们预留出来的访问客户端证书“CN=client.zglt.com,OU=Ops,O=Client,DC=example,DC=com”就是该证书的用户名;

注:最开始在设置dn值得时候不要有空格,字数多点没关系,千万别有空格

将该用户设置在后端系统中的sg_internal_users.yml配置文件注册成用户,生产散列密码

散列密码使用tools文件夹下的hash.sh 执行 sh hash.sh -p ”密码“ 生成

sg_roles_mapping.yml中为该用户分配角色映射:

sg_roles.yml中配置该角色的权限:

该角色的权限是对授予执行多个请求(如mget,msearch或mtv)的只读权限但也授予批量写入权限和所有别名权限,对索引company下的所有type具有READ(授予读取权限,如获取,获取或获取字段映射以及搜索权限)权限。

下面开始贴代码:

public class GetClient {public TransportClient transportClient() throws UnknownHostException {// 一定要注意,9300为elasticsearch的tcp端口InetSocketTransportAddress master = new InetSocketTransportAddress(InetAddress.getByName("hop-0"), 9300);InetSocketTransportAddress node1 = new InetSocketTransportAddress(InetAddress.getByName("hop-1"), 9300);InetSocketTransportAddress node2 = new InetSocketTransportAddress(InetAddress.getByName("hop-2"), 9300);// 集群名称Settings settings = Settings.builder().put(SSLConfigConstants.SEARCHGUARD_SSL_TRANSPORT_PEMKEY_FILEPATH, System.getProperty("user.dir")+"/src/main/resources/ssl/client.key").put(SSLConfigConstants.SEARCHGUARD_SSL_TRANSPORT_PEMCERT_FILEPATH, System.getProperty("user.dir")+"/src/main/resources/ssl/client.pem").put(SSLConfigConstants.SEARCHGUARD_SSL_TRANSPORT_PEMTRUSTEDCAS_FILEPATH, System.getProperty("user.dir")+"/src/main/resources/ssl/root-ca.pem").put(SSLConfigConstants.SEARCHGUARD_SSL_TRANSPORT_PEMKEY_PASSWORD, "dWHPUGUvBtr3")
//                .put(SSLConfigConstants.SEARCHGUARD_SSL_TRANSPORT_PEMKEY_PASSWORD, "Ne0Vxrj6YZk2").put(SSLConfigConstants.SEARCHGUARD_SSL_TRANSPORT_ENFORCE_HOSTNAME_VERIFICATION, false)
//                .put(SSLConfigConstants.SEARCHGUARD_SSL_HTTP_ENABLED, true)
//                .put("searchguard.ssl.transport.enforce_hostname_verification", false).put("client.transport.sniff",false).put("cluster.name","ES-cluster" ).build();TransportClient client = new PreBuiltTransportClient(settings, SearchGuardSSLPlugin.class);// 添加client.addTransportAddresses(master, node1, node2);
//        client.threadPool().getThreadContext().addResponseHeader("Authorization", "Basic "+ Base64.encodeBase64("admin:admin".getBytes()));return client;}}

下面还是代码…

public class PrintClient {public static void main(String[] args) throws  Exception{GetClient getClient = new GetClient();TransportClient transportClient = getClient.transportClient();SearchRequestBuilder srb = transportClient.prepareSearch("logaudit_servicetransfer_real");SearchResponse searchResponse = srb.setQuery(QueryBuilders.matchAllQuery()).execute().actionGet();SearchHits hits=searchResponse.getHits();for(SearchHit hit:hits){System.out.println(hit.getSourceAsString());}}
}

下面是一些证书的路径:

到这里就完成了一个权限的简单配置,使用client的pem和key就只能读到company索引的数据。至于其他的权限组合配置就要大家自己去探索了。
建议生产中保留两个admin证书,多生成几个client证书用于多方操作数据。

ElasticSearchTransportClient集成SearchGuard插件实现索引级别的权限管控相关推荐

  1. bootstrapDialog插件集成datatables插件遇到的异常

    bootstrapDialog插件集成datatables插件遇到的异常 参考文章: (1)bootstrapDialog插件集成datatables插件遇到的异常 (2)https://www.cn ...

  2. 如何在Cordova Android 7.0.0 以下版本集成最新插件 极光插件为例

    前提 Cordova Android 7.0.0开始改变了项目安卓平台的架构.新建一个空项目分别添加Android 6.4.0 和 Android 7.0.0平台: cordova platform ...

  3. 如何在Cordova Android 7.0.0 以下版本集成最新插件 极光插件为例 1

    2019独角兽企业重金招聘Python工程师标准>>> 前提 Cordova Android 7.0.0开始改变了项目安卓平台的架构.新建一个空项目分别添加Android 6.4.0 ...

  4. pythonidea_idea集成python插件

    idea集成python插件 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在继承安装Python插件时,请确认你是否安装Python解释器(Python官网:https://ww ...

  5. 翻译:SQL Server中的索引内部结构:到SQL Server索引级别10的阶梯。

    SQL Server中的索引内部结构:到SQL Server索引级别10的阶梯. 大卫•杜兰特2012/01/20 该系列 本文是楼梯系列的一部分:SQL Server索引的阶梯. 索引是数据库设计的 ...

  6. 翻译:集群索引:通往SQL Server索引级别3的阶梯

    集群索引:通往SQL Server索引级别3的阶梯 David Durant,2013/01/25(第一次出版:2011/06/22) 该系列 本文是楼梯系列的一部分:SQL Server索引的阶梯 ...

  7. Intellij IDEA社区版集成Maven插件

    Intellij IDEA社区版集成Maven插件 第一步: 打开Intellij IDEA , Preference -> Plugins , 搜索 Maven Intergration和Ma ...

  8. 在IDEA中集成Jenkins插件 解决Missing or bad crumb data异常

    在IDEA中集成Jenkins插件 由于项目组中使用jenkins作为持续集成工具,之前一直用web方式进行访问,感觉效率比较低下,所以想通过安装官方插件,直接在IDE上直接出触发Jenkins服务器 ...

  9. maven集成docker插件进行打包镜像并推送私服

    使用maven进行集成docker打包成镜像以及推送到docker私服 先水几句 我不会开场啊-默默无闻的送码人.不是吧不是吧.现在还有人用maven打包,然后手动上传jar.然后进行部署吗?你out ...

最新文章

  1. Hyper-V 和Ubuntu Server 16.04 配置静态IP
  2. 27_多线程_第27天(线程安全、线程同步、等待唤醒机制、单例设计模式)_讲义...
  3. 你一写长文章就焦虑拖延?
  4. JSP标签中不要省略引号
  5. 第4章操作系统基础第五版Aimin.rar
  6. 自动发卡企业商户运营版带WAP手机端+多种主题
  7. [leetcode ]429. N-ary Tree Level Order Traversale (easy)
  8. 原生js实现选中所有的checkbox
  9. linux下如何运行脚本程序设计,Uboot 如何运行脚本
  10. 《计算机操作系统》(第四版)汤小丹 第二章思维导图
  11. mathcad prime server system(PASS云计算书系统)开发
  12. Vscode 配置cmake
  13. 深圳大学计算机系在哪个校区,2021年深圳大学有几个校区,大一新生在哪个校区...
  14. ssh 所选的用户密钥未在远程主机上注册
  15. MBTI职业性格在软件研发组织中不同岗位的分布研究
  16. 阴阳师真八歧大蛇最低配置攻略,蛇黑切
  17. Idea Mac OS 80端口被占用
  18. python dataframe如何设置并处理(删除、填充)空值
  19. PID控制通俗解释与PID参数的整定方法--以温控系统为例
  20. java disconnect_Java HttpResponse.disconnect方法代码示例

热门文章

  1. CodeForces 632E Thief in a Shop(FFT)
  2. HTML5期末大作业:大学生简单个人静态HTML网页设计作品 DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载
  3. 从零开始的博客建站之旅——搭建
  4. Java多线程之JUC
  5. Air Quality Index,简称AQI
  6. python分析微博粉丝_python爬虫,对粉丝夺宝的一次数据分析
  7. TFT型液晶显示模块能够依据不同的需求分为几类?
  8. 面向2022届毕业生-自动驾驶/SLAM/DL/C++ 岗位收集整理
  9. God.Game 漏洞复盘:跑路还是黑客攻击?
  10. AOP—面向切面编程