随着ES的广泛使用,其安全问题也备受关注,虽然ES集群一般部署于公司内网,但多个业务部门使用同一套ES集群的情况非常多,如何做好数据共享、访问隔离,防止用户误操作、数据泄露等,这需要一套良好的权限控制机制。

1.方案调研

目前官方的安全模块Shield需要收费,所以普及率并不高,下面调研了以下几种方案:

1)elasticsearch-http-basic

https://github.com/Asquera/elasticsearch-http-basic
支持版本:目前最高支持elasticsearch.1.7.0
特点:部署简单,实现了账号认证和IP白名单认证功能,功能单一。

2)kibana-authentication-proxy

https://github.com/fangli/kibana-authentication-proxy
支持版本:Kibana 3 ,代码最后一次更新是2年前。
特点:针对kibana实现的认证,支持Google OAuth2,Basic Authentication, CAS Auth。

3)Shield

https://www.elastic.co/downloads/shield
支持版本:支持到Elaticsearch 2.x
特点:功能丰富,文档齐全,30天试用;

4)search-guard

https://github.com/floragunncom/search-guard


2.编译打包

mvn package -DskipTests

如果报以下错误:

[ERROR][com.floragunn.searchguard.SearchGuardPlugin] Class enhancements for DLS/FLS not successful due to javassist.CannotCompileException: [source error] no such field: context

修改SearchGuardPlugin类源码,并重新编译:

//me.insertAt(559, "if(callback != null) {callback.onCreateContext(context, request);}");
me.insertAt(574, "if(callback != null) {callback.onCreateContext(context, request);}");

pom文件:

<build>
<plugins><plugin><artifactId>maven-assembly-plugin</artifactId><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin><plugin><groupId>org.codehaus.mojo</groupId><artifactId>exec-maven-plugin</artifactId><version>1.2.1</version><executions><execution><goals><goal>exec</goal></goals></execution></executions></plugin>
</plugins>

拷贝jar包到elastic search/plusgin/search-guard,注意目录target/releases/:

target/releases/search-guard-0.6-SNAPSHOT.jar

否则报错:

Caused by: java.lang.ClassNotFoundException: javassist.ClassPool
[2015-11-19 18:37:24,287][INFO ][watcher.trigger.schedule ] [idc] using [ticker] schedule trigger engine
{1.7.1}: Initialization Failed ...
- NoClassDefFoundError[waffle/windows/auth/IWindowsAuthProvider]

3.手动安装

 ../bin/plugin -u file:./search-guard-0.6-SNAPSHOT.jar  -i search-guard

日志:

-> Installing search-guard...
Trying file:./search-guard-0.6-SNAPSHOT-jar-with-dependencies.jar...
Downloading.........................................................................
DONE
Installed search-guard into /usr/local/webserver/elasticsearch/plugins/search-guard

4.权限测试

{"error": "ClassCastException[com.petalmd.armor.http.netty.SessionAwareNettyHttpChannel cannot be cast to org.elasticsearch.http.HttpChannel]","status": 500

}

权限修改

curl -XPUT 'http://***.***.***.***:9200/armor/ac/ac' -d '{
"acl": [
{"__Comment__": "By default no filters are executed and no filters a by-passed. In such a case an exception is thrown and access will be denied.","hosts": ["*"], "indices": ["*"],"filters_bypass": [],"filters_execute": ["actionrequestfilter.readonly"]},{"__Comment__": "For role *root* all filters are bypassed (so none will be executed). This means unrestricted access.","hosts": ["*"],"roles": ["root"],"indices": ["*"],"filters_bypass": ["*"],"filters_execute": []}]

}’

armor 索引只允许在部署elasticsearch的机器上访问,否则会报错:

[2015-11-30 15:49:39,610][ERROR][com.petalmd.armor.filter.ArmorActionFilter] Forbidden while apply() due to com.petalmd.armor.authorization.ForbiddenException: Only allowed from localhost (loopback) for action indices:data/read/search
com.petalmd.armor.authorization.ForbiddenException: Only allowed from localhost (loopback)

user1用户只有只读权限,在head界面创建索引时,会报如下错:

[2015-11-30 15:25:21,565][ERROR][com.petalmd.armor.filter.ArmorActionFilter] Forbidden while apply() due to com.petalmd.armor.authorization.ForbiddenException: Action 'indices:admin/create' is forbidden due to DEFAULT for action indices:admin/create
com.petalmd.armor.authorization.ForbiddenException: Action 'indices:admin/create' is forbidden due to DEFAULT

通过admin用户则成功创建test-log索引。

在添加权限后,往测试索引中添加数据无响应:

 curl -XPOST 'http://***.***.***.***:9200/test-log/order' -d '{"date":"2015-11-20 15:39:00","customerID":"user1”}’,

需要加上具有写权限的用户名/密码:

curl -v --user admin:admin -XPOST 'http://***.***.***.***:9200/test-log/order' -d '{"date":"2015-11-20 15:39:00","customerID":"user1”}’* Hostname was NOT found in DNS cache
*   Trying 10.1.***.***...
* Connected to 10.1.***.*** (10.1.***.***) port 9200 (#0)
* Server auth using Basic with user 'admin'
> POST /test-log/order HTTP/1.1
> Authorization: Basic YWRtaW46YWRtaW4=
> User-Agent: curl/7.37.1
> Host: 10.1.***.***:9200
> Accept: */*
> Content-Length: 51
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 51 out of 51 bytes
< HTTP/1.1 201 Created
< Content-Type: application/json; charset=UTF-8
< Content-Length: 94
<
* Connection #0 to host 10.1.***.*** left intact

返回结果:

{"_index":"test-log","_type":"order","_id":"AVFXVBQXMJgnGjM0BUcq","_version":1,"created":true}

此时在head界面,就能看到刚插入的数据了:

如果user1用户试图删除它没权限的索引:

curl -v --user user1:123 -XDELETE http://10.1.***.***:9200/armor

将返回:

 {"error":"ForbiddenException[Only allowed from localhost (loopback)]","status":403}

Elasticsearch 权限控制相关推荐

  1. ElasticSearch权限控制实战

    1 简介 当前直接使用ElasticSearch以及通过Kibana访问时,没有做任何限制,没有做用户和权限的控制,安全性上有一定风险,因此通过ES提供的X-PACK来实现这一需求.官网简介如下:X- ...

  2. Elasticsearch权限控制

    启动ES中的安全设置 打开ES的配置文件 elasticsearch/config/elasticsearch.yml 添加配置 xpack.security.enabled: true xpack. ...

  3. Kibana_X-Pack管理Elasticsearch权限

    在Kibana上面配置权限,验证对Elasticsearch权限控制, 主要步骤如下: 1.创建角色 2.创建用户,并且赋予用户角色 3.用户登陆,验证没有权限 4.赋予角色权限 5.用户登陆,验证拥 ...

  4. elasticsearch使用jetty进行简单的权限控制

    默认elasticsearch是使用netty作为http的容器,由于netty并没有权限模块,所以默认es没有任何的权限控制,直接通过http就可以进行任何操作,除非把http禁用.但如果你使用el ...

  5. 给Elasticsearch 和Kibana添加基于角色的访问权限控制

    给ELK 添加Shield权限控制 背景 这两天整个项目(电商SAAS系统)上线后,由于系统变得很大,每天产生的业务日志.访问日志.数据库慢查询.php等语言日志,都分布在不同的机器上,所以需要统一收 ...

  6. 逻辑漏洞——权限控制问题

    普及权限控制的方法.常见非授权访问漏洞以及水平越权与垂直越权的成因与利用方法.修复方法 权限控制 某个主体(subject)对某个客体(object)需要实施某种操作(operation),系统对这种 ...

  7. ElasticSearch7.17权限控制和规划实战

    0.背景 由于在版本7开始,x-pack可以免费使用了,但是权限控制免费的不够细,但是控制到索引级别都基本够用了.付费的可以体验更细致的权限控制.本文的基础是已经有了es集群的基础上进行的. 官网:S ...

  8. mysql用户控制登录_MySql用户权限控制_MySQL

    bitsCN.com MySql用户权限控制 本文将介绍MySql创建帐号,删除帐号,设置和介绍各种帐号的权限 创建用户帐号: www.bitsCN.com [sql] CREATE USER use ...

  9. 前、后端分离权限控制设计和实现思路

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:8rr.co/9QUT 简述 近几年随着react.angu ...

最新文章

  1. SpringBoot源码分析之@Scheduled
  2. nofollow标签_网站nofollow标签的应用 - 最蜘蛛池博客
  3. 如何通过HTML标记或JS代码实现跳转返回页面顶部
  4. [分享]极富挑战性的大公司面试的智力题
  5. @RequiredArgsConstructor用法
  6. 使用 JsonSchema 验证 API 的返回格式
  7. 2018蓝桥杯省赛---java---A---10(付账问题)
  8. antlr_ANTLR –语义谓词
  9. 【转】C++/CLI入门系列 第二篇:封装C++ dll库,提供接口给C#调用
  10. 猎豹浏览器小号窗口怎么打开 小号窗口打开方法简述
  11. 图解 CSS (2): border - 边框
  12. rosweb,roslib,ROS2D.PolygonMarker 绘制多边形
  13. 初识Quartz (一)
  14. elcipse 中利用maven创建web工程
  15. java素数(质数)计算
  16. javascript实现计算器
  17. 织梦程序添加音乐上传功能
  18. FFmpeg —— 录制windows系统声音(附源码)
  19. 徐思201771010132《面向对象程序设计(Java)》第十三周学习总结
  20. Cloudera Manager 理论

热门文章

  1. 3DVR全景旅游,最新数字化智慧文旅
  2. GitHubDesktop:学习:二:(第三次操作)版本回退:成功
  3. [Git]如何解决Please commit your changes or stash them before you merge.
  4. uni-app小程序实现录音功能,uniapp实现录音功能并上传java,uniapp简单实现录音功能
  5. 小度wifi启动提示应用程序错误
  6. python解码base64学习笔记
  7. 【橙子日记32】从零开始的毕业设计
  8. 清新脱俗的TensorFlow CIFAR10例程的代码重构——更简明更快的数据读取、loss accuracy实时输出
  9. ai人工智能制作视频_建立一个人工智能驱动的可搜索视频档案
  10. mybatis逆向工程插件