ElasticSearchTransportClient集成SearchGuard插件实现索引级别的权限管控
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插件实现索引级别的权限管控相关推荐
- bootstrapDialog插件集成datatables插件遇到的异常
bootstrapDialog插件集成datatables插件遇到的异常 参考文章: (1)bootstrapDialog插件集成datatables插件遇到的异常 (2)https://www.cn ...
- 如何在Cordova Android 7.0.0 以下版本集成最新插件 极光插件为例
前提 Cordova Android 7.0.0开始改变了项目安卓平台的架构.新建一个空项目分别添加Android 6.4.0 和 Android 7.0.0平台: cordova platform ...
- 如何在Cordova Android 7.0.0 以下版本集成最新插件 极光插件为例 1
2019独角兽企业重金招聘Python工程师标准>>> 前提 Cordova Android 7.0.0开始改变了项目安卓平台的架构.新建一个空项目分别添加Android 6.4.0 ...
- pythonidea_idea集成python插件
idea集成python插件 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在继承安装Python插件时,请确认你是否安装Python解释器(Python官网:https://ww ...
- 翻译:SQL Server中的索引内部结构:到SQL Server索引级别10的阶梯。
SQL Server中的索引内部结构:到SQL Server索引级别10的阶梯. 大卫•杜兰特2012/01/20 该系列 本文是楼梯系列的一部分:SQL Server索引的阶梯. 索引是数据库设计的 ...
- 翻译:集群索引:通往SQL Server索引级别3的阶梯
集群索引:通往SQL Server索引级别3的阶梯 David Durant,2013/01/25(第一次出版:2011/06/22) 该系列 本文是楼梯系列的一部分:SQL Server索引的阶梯 ...
- Intellij IDEA社区版集成Maven插件
Intellij IDEA社区版集成Maven插件 第一步: 打开Intellij IDEA , Preference -> Plugins , 搜索 Maven Intergration和Ma ...
- 在IDEA中集成Jenkins插件 解决Missing or bad crumb data异常
在IDEA中集成Jenkins插件 由于项目组中使用jenkins作为持续集成工具,之前一直用web方式进行访问,感觉效率比较低下,所以想通过安装官方插件,直接在IDE上直接出触发Jenkins服务器 ...
- maven集成docker插件进行打包镜像并推送私服
使用maven进行集成docker打包成镜像以及推送到docker私服 先水几句 我不会开场啊-默默无闻的送码人.不是吧不是吧.现在还有人用maven打包,然后手动上传jar.然后进行部署吗?你out ...
最新文章
- Hyper-V 和Ubuntu Server 16.04 配置静态IP
- 27_多线程_第27天(线程安全、线程同步、等待唤醒机制、单例设计模式)_讲义...
- 你一写长文章就焦虑拖延?
- JSP标签中不要省略引号
- 第4章操作系统基础第五版Aimin.rar
- 自动发卡企业商户运营版带WAP手机端+多种主题
- [leetcode ]429. N-ary Tree Level Order Traversale (easy)
- 原生js实现选中所有的checkbox
- linux下如何运行脚本程序设计,Uboot 如何运行脚本
- 《计算机操作系统》(第四版)汤小丹 第二章思维导图
- mathcad prime server system(PASS云计算书系统)开发
- Vscode 配置cmake
- 深圳大学计算机系在哪个校区,2021年深圳大学有几个校区,大一新生在哪个校区...
- ssh 所选的用户密钥未在远程主机上注册
- MBTI职业性格在软件研发组织中不同岗位的分布研究
- 阴阳师真八歧大蛇最低配置攻略,蛇黑切
- Idea Mac OS 80端口被占用
- python dataframe如何设置并处理(删除、填充)空值
- PID控制通俗解释与PID参数的整定方法--以温控系统为例
- java disconnect_Java HttpResponse.disconnect方法代码示例
热门文章
- CodeForces 632E Thief in a Shop(FFT)
- HTML5期末大作业:大学生简单个人静态HTML网页设计作品 DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载
- 从零开始的博客建站之旅——搭建
- Java多线程之JUC
- Air Quality Index,简称AQI
- python分析微博粉丝_python爬虫,对粉丝夺宝的一次数据分析
- TFT型液晶显示模块能够依据不同的需求分为几类?
- 面向2022届毕业生-自动驾驶/SLAM/DL/C++ 岗位收集整理
- God.Game 漏洞复盘:跑路还是黑客攻击?
- AOP—面向切面编程