当前位置: 首页 > news >正文

Elasticsearch:Security API 介绍

在我之前的文章 “Elasticsearch:运用 API 创建 roles 及 users” ,我展示了如何使用 Security API 来创建用户及角色来控制访问 Elasticsearch 中的索引。在今天的文章中,我将展示一个使用 Security API 来创建一个用户及角色来访问一个索引中的特定字段。这个功能属于白金版的功能之一。

更多关于订阅的信息,请在地址 订阅 | Elastic Stack 产品和支持 | Elastic 进行查看。

在如下的展示中,我将使用 Elastic Stack 8.6.1 来进行展示。

准备

首先,我们来创建如下的两个索引:

PUT twitter1/_doc/1
{"user": "GB","uid": 1,"city": "Beijing","province": "Beijing","country": "China"
}
PUT twitter2/_doc/1
{"user": "GB","uid": 1,"city": "Beijing","province": "Beijing","country": "China"
}

当我们创建上面的两个索引 twitter1 及 twitter2 时,我们可以在超级用户 elastic 登录的情况下创建。在 Kibana 的界面中,会显示该账号:

好了,我们已经创建好上面的两个索引。

创建角色

此时我们将定义我们想要授予访问权限的索引,我们将添加读取权限并选择我们希望用户有权访问的字段。重要的是要说,在角色中,我们可以创建一个查询,该查询将仅返回我们希望用户也可以访问的文档。

POST _security/role/twitter2_read
{"indices": [{"names": ["twitter2"],"privileges": ["read"],"field_security": {"grant":["user", "city"]}}]
}

如上所示,我们看到了一个错误的信息。它告诉我们当前的 license 的级别是不够的。我们需要购买白金版才可以。

在我们没有购买授权的情况下,我们可以在 Kibana 中启动试用功能。

  

 

启动白金版试用功能后,我们再次运行上面的命令:

 这次显然是成功的。它创建了一个叫做 twitter2_read 的 role。它针对 twitter2,具有 read 权限,并且只能访问它的 user,city 字段。

上述命令运行完后,我们可以在 Kibana 中的界面中进行查看:

创建用户

用户和角色的关系如下:

一个用户可以拥有一个或多个角色,而每个角色可以定义不同的访问权限。

让我们创建一个新用户并分配我们创建的角色。

POST _security/user/liuxg
{"full_name": "Xiaoguo, Liu","password": "password","roles": ["kibana_user", "twitter2_read"]
}

在上面,我们创建了一个叫做 liuxg 的用户。它的密码设置为 password,同时它具有 kibana_user 及 twitter2_read 的角色。

运行完上面的命令后,我们可以在 Kibana 中的界面中进行查看:

测试新创建的 role 

我们接下来登出之前的 elastic 超级用户,并以最新创建的账号 liuxg:password 来进行登录:

等成功登录之后,我们在 Dev Tools 中使用如下的命令来访问之前创建的 twitter1 索引:

GET twitter1/_search

上面的命令返回:

上面命令返回的结果表明 liuxg 这个用户不能访问 twitter1 这个索引,因为他没有相应的权限。

接下来,我们来尝试访问 twitter2 这个索引:

GET twitter2/_search

从上面的结果中可以看出来,我们只能看到两个字段 city 及 user,而其它的字段比如 uid,provice 和 country 都是不可见的。这个在实际的使用中非常用用。比如我们有同样的一个 employee 索引,可以供一个公司的几个不同的部门来使用。 人事部门可以看到员工的薪水,而一般员工是不可以看到员工的薪水这个字段。

接下来,让我们来尝试写入一个文档到 twitter2 里去:

POST twitter2/_doc
{"user": "GB","uid": 1,"city": "Beijing","province": "Beijing","country": "China"
}

很显然,我们的操作是失败的,因为这个用户只有读取的权限,而没有写入的权限。 这个在实际的使用中非常有用,我们有时只希望一部分用户只有读的权限,而不需要他们来修改数据。

希望这篇文档能让你对 Secrurity API 的使用有更多更深的理解。

http://www.lryc.cn/news/8977.html

相关文章:

  • springmvc考研交流平台 java ssm mysql
  • 2.15 vue3 day01 setup ref setup的参数 prop slot插槽 自定义事件通信
  • CentOs7更新Yum源
  • 【C/C++】VS2019下C++生成DLL并且成功调用(金针菇般细)
  • 如何重新安装安卓手机系统
  • ArcGIS API for JavaScript 4.15系列(7)——Dojo中的Ajax请求操作
  • 智慧校园电子班牌系统
  • 软考高项——第五章进度管理
  • 基于springboot+bootstrap+mysql+redis搭建一套完整的权限架构【二】【整合springSecurity】
  • 字节6面,成功唬住面试官拿了27K,软件测试面试也没有传说中那么难吧....
  • Qt扫盲-QMake 语言概述
  • 代码随想录二刷Day02链表:203.移除链表元素,707.设计链表,206.反转链表
  • Zabbix 3.0 从入门到精通(zabbix使用详解)
  • 基于JDBC框架的事务管理
  • 使用IPV6+DDNS连接内网主机
  • 【新2023】华为OD机试 - 高效的任务规划(Python)
  • sql复习(数据处理、约束)
  • 前端入门~
  • 工业网关控制器CK-GW06-E01与欧姆龙 PLC配置说明
  • uni-app前端H5页面底部内容被tabbar遮挡
  • 昇腾CANN算子开发揭秘
  • 华为OD机试注意事项,备考思路,刷题要点,答疑,od Base 提供
  • Python 自己简单地造一个轮子.whl文件
  • NVIDIA Tesla V100部署与使用
  • 网络知识点梳理与总结
  • 我工作5年测试才8K,应届生刚毕业就拿16K?凭什么
  • 【QT】UDP通信QUdpSocket(单播、广播、组播)
  • 【Java】properties 和 yml 的区别
  • percona软件介绍 、 innobackupex备份与恢复
  • Towards Adversarial Attack on Vision-Language Pre-training Models