前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Elasticsearch最佳实践之自研权限系统

Elasticsearch最佳实践之自研权限系统

原创
作者头像
老生姜
修改2018-12-07 22:53:52
2.1K2
修改2018-12-07 22:53:52
举报

一、背景

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

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

二、权限系统总体设计

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

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

添加描述

三、权限接口用法介绍

1 . 查看机器白名单

代码语言:javascript
复制
GET \_auth/hosts

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

代码语言:javascript
复制
curl -u root -XGET localhost:9200/\_auth/hosts?pretty

2. 增加机器白名单

代码语言:javascript
复制
POST \_auth/host/{ip}

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

3. 删除机器白名单

代码语言:javascript
复制
DELETE \_auth/host/{ip}

4. 查看用户列表

代码语言:javascript
复制
GET \_auth/users

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

5. 创建用户

代码语言:javascript
复制
POST \_auth/user/{user} -d '{

 "password": "123456"

}'

创建一个空账号

6. 删除用户

代码语言:javascript
复制
DELETE \_auth/user/{user}

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

7. 修改用户密码

代码语言:javascript
复制
PUT \_auth/password/{user} -d '{

 "password": "123456"

}'

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

8.查看某个用户权限

代码语言:javascript
复制
GET \_auth/grant/{user}

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

9.赋予某个用户权限

代码语言:javascript
复制
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.撤销某个用户权限

代码语言:javascript
复制
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层的用户访问接口,赋予用户的权限也比较简单。丰富这一块是后续计划之一。后续我们也将根据用户的需求和反馈对权限系统做进一步的优化。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、背景
  • 二、权限系统总体设计
  • 三、权限接口用法介绍
    • 1 . 查看机器白名单
      • 2. 增加机器白名单
        • 3. 删除机器白名单
          • 4. 查看用户列表
            • 5. 创建用户
              • 6. 删除用户
                • 7. 修改用户密码
                  • 8.查看某个用户权限
                    • 9.赋予某个用户权限
                      • 10.撤销某个用户权限
                      • 四、性能测试
                      • 五、后续计划
                      相关产品与服务
                      Elasticsearch Service
                      腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档