Elasticsearch 自研权限系统介绍

一、背景

     ELKB(Elasticsearch、Logstash、Kibana、Beat的组合)是一套开源的分布式日志管理方案。凭借其检索性能高效、集群线性扩展、处理方式灵活、配置简单易上手等特点,ELKB在最近几年迅速崛起,成为实时日志处理领域的首要选择。Elasticsearch作为其中重要的一环, 主要提供分布式、可扩展且实时的数据储存分析与搜索功能。随着Elasticsearch的广泛使用,为了做好数据共享、访问隔离,防止用户误操作、数据泄露等,权限控制方面的需求愈来愈多。

     Elastic官方提供了安全插件X-Pack来解决Elasticsearch的权限管理问题,不足之处在于插件是收费的,且较为笨重。因此我们为Elasticsearch设计了一套权限系统。

二、权限系统总体设计

     我们基于Elasticsearch扩展能力开发Plugin,在REST层(用户访问接口) 和Transport层(内部访问接口)间进行权限校验。 在设计权限系统的接口和实现时,我们参考Elastic官方权限系统和MySQL权限系统设计,支持进行用户、机器白名单、权限管理等操作,风格和官方接口保持一致。权限元数据作为Elasticsearch元数据的一部分,由Elasticsearch托管。

    Elasticsearch权限系统总体设计脑图如下:

1500991544_42_w1011_h613.jpeg

三、权限接口用法介绍

1 . 查看机器白名单

GET \_auth/hosts

举个例子,在linux下使用curl 在root用户调用该接口(Elasticsearch端口为 localhost:9200):

curl -u root -XGET localhost:9200/\_auth/hosts?pretty

2. 增加机器白名单

POST \_auth/host/{ip}

增加免密码访问的机器白名单

3. 删除机器白名单

DELETE \_auth/host/{ip}

4. 查看用户列表

GET \_auth/users

返回当前已经存在的所有账户

5. 创建用户

POST \_auth/user/{user} -d '{

 "password": "123456"

}'

创建一个空账号

6. 删除用户

DELETE \_auth/user/{user}

删除该用户以及其下面的所有规则

7. 修改用户密码

PUT \_auth/password/{user} -d '{

 "password": "123456"

}'

特别说明:如果请求认证已经提供用户名,那么 _auth/password/{user}可以省略为 _auth/password

8.查看某个用户权限

GET \_auth/grant/{user}

特别说明:如果请求认证已经提供用户名,那么 _auth/grant/{user}可以省略为 _auth/grant

9.赋予某个用户权限

POST \_auth/grant/{user}  -d '{

 "index": "logstash\_\*",               // 针对的index名,支持通配符\*,一次仅允许填写一个,非空

 "privileges": "read,write",     // 对该index可行使的权限,非空

 "kibana": "monitor"    // kibana访问该index时相关的权限,可选

}'

privileges 填写说明:

  • read:只读权限;
  • wrirte:只写权限;
  • manage:读写index并对index进行管理的权限,例如创建和删除;
  • admin: root用户权限,可对所有index进行管理,要求index必须为*

kibana填写说明:

  • monitor:kibana访问时的只读权限;
  • admin:kibana访问时的读写权限

10.撤销某个用户权限

DELETE \_auth/grant/{user}  -d '{

 "index": "index1",

 "privileges": "read",

 "kibana": "monitor/admin"

}'

特别说明:撤销权限必须针对已存的权限进行撤销,不可撤销某个权限的子权限,如果某个index的privileges为空,那么这个index的规则就会被删除

四、性能测试

     为了保证权限的正常使用,我们针对以上每个权限接口设计了大量单元测试和集成测试,并对系统的性能也做了测试,在Elasticsearch 5.0.0版本下安装权限系统前后 运行100次测试然后取平均结果对比如下:

平均写入速度(条/秒)

平均查询并发数(次/秒)

未安装权限系统

224636

28100

安装权限系统

220759

27950

权限系统的性能影响约为1%左右,符合预期。

五、后续计划

     目前我们的权限系统只提供了REST层的用户访问接口,用户权限也比较简单。完善这一块是后续计划之一。后续我们也将根据用户的需求和反馈对权限系统做进一步的优化。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏木头编程 - moTzxx

小程序 报错 errcode: 40029, errmsg: "invalid code, hints: [ req_id: HQd79a0747th31 ]

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

2.7K40
来自专栏HTML5学堂

移动端及时调试工具 - weinre使用方法

HTML5学堂:在前一篇文章当中,我们借着weinre讲解了NodeJS中的一些简单命令,也讲解了weinre的安装方法,今天我们把weinre的使用“完结”掉...

30630
来自专栏北京马哥教育

SQLAlchemy基本使用

云豆贴心提醒,本文阅读时间6分钟,文末有秘密! ORM介绍 ORM(Object-Relational Mapping) 架构,采用元数据来描述对象-关系映射...

40170
来自专栏IT米粉

系统日志管理那点事

日志管理的第一件事,就是日志的收集。日志收集是开发者必备的技巧,不管是哪个开发语言,哪个开发平台,日志收集的插件都是有很多选择的。例如:

41060
来自专栏java工会

java网站页面静态化方案

在大型网站中,如京东和当当商品详情界面,看到的页面基本上是静态页面。为什么都要把页面静态化呢?把页面静态化,好处有很多。例如:访问速度快,更有利于搜索引擎收录等...

31130
来自专栏张善友的专栏

系统进程管理工具Process Explorer

系统进程往往是不少读者操作的“禁区”,其实借助一些功能强大的工具即可消除对该禁区的恐惧。Process Explorer就是一款系统进程管理工具,它不仅能方便地...

26370
来自专栏java工会

java网站页面静态化方案

在大型网站中,如京东和当当商品详情界面,看到的页面基本上是静态页面。为什么都要把页面静态化呢?把页面静态化,好处有很多。例如:访问速度快,更有利于搜索引擎收录等...

20940
来自专栏小工匠技术圈

【Java小工匠】JavaNIO-基础概念

阻塞与非阻塞主要是程序等待消息通知时的状态角度来说的。阻塞调用是指调用结果返回之前,当前线程会被挂起,一直处于等待消息通知,不能够执行其他业务。

8330
来自专栏java思维导图

Cookie、Session、Token那点事儿

前言:新公司项目中使用到了Cookie,在各大Android技术讨论群向前辈们取经讨论这cookie、session、token这仨哥们的时候,很多开发者说法不...

40630
来自专栏编程微刊

本地运行github上的vue2.0仿饿了么webapp项目

在vue刚刚开始流行的时候,大多数人学习大概都见到过这样的一个项目吧,可以作为学习此框架的一个模板了

49630

扫码关注云+社区

领取腾讯云代金券