Elastic Stack的组件是不安全的,因为它没有内置的固有安全性。 这意味着任何人都可以访问它。 在生产环境中运行Elastic Stack时,这会带来安全风险。 为了防止生产中未经授权的访问,采用了不同的机制来施加安全性,例如在防火墙后运行Elastic Stack并通过反向代理(例如nginx,HAProxy等)进行保护。 Elastic提供商业产品来保护Elastic Stack。 此产品是X-Pack的一部分,模块称为安全性。

在今天的文章中,我们来讲述如何为我们的Elastics索引设置字段级的安全。这样有的字段对有些用户是可见的,而对另外一些用户是不可见的。我们也可以通过对用户安全的设置,使得不同的用户有不同的权限。

User authentication

在X-Pack安全性中,安全资源是基于用户的安全性的基础。 安全资源是需要访问以执行Elasticsearch集群操作的资源,例如索引,文档或字段。 X-Pack安全性通过分配给用户的角色的权限来实现。 权限是针对受保护资源的一项或多项特权。 特权是一个命名的组,代表用户可以针对安全资源执行的一个或多个操作。 用户可以具有一个或多个角色,并且用户拥有的总权限集定义为其所有角色的权限的并集,如下图所示:

从上面的图上可以看出来:一个用户可以用多个role,而每个role可以对应多个permission(权限)。在接下来的练习中,我们来展示如何创建用户,role(角色)以及把permission分配到每个role。通过这样的组合,我们可以实现对字段级的安全控制。

为Elastic设置安全及创建用户

当我们设置完我们的安全账户后,最开始我们使用最原始的elastic的账号进行登录。请注意这里的密码是我们设置elastic账号的密码:

![](https://img-blog.csdnimg.cn/20190904225704187.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1VidW50dVRvdWNo,size_16,color_FFFFFF,t_70

等登录进去之后,现在我们去Manage/Sercurity/Users页面:

我们来创建一个新的账号。针对我的情况,我想创建一个叫做liuxg的用户名。点击当前页面的Create User按钮:

然后填入我们所需要的信息:

点击Create User按钮,这样我们就创建了我们的用户。

按照同样的步骤,我们来创建另外一个叫做user1的用户。

准备实验数据

在我们还没退出elastic用户的情况下,我们使用bulk API来把如下的文档输入到Elasticsearch中。

    POST employee/_bulk
{"index":{"_index":"employee"}}
{"name":"user1","email":"user1@packt.com","salary":5000,"gender":"M","address1":"312 Main St","address2":"Walthill","state":"NE"}
{"index":{"_index":"employee"}}
{"name":"user2","email":"user2@packt.com","salary":10000,"gender":"F","address1":"5658 N Denver Ave","address2":"Portland","state":"OR"}
{"index":{"_index":"employee"}}
{"name":"user3","email":"user3@packt.com","salary":7000,"gender":"F","address1":"300 Quinterra Ln","address2":"Danville","state":"CA"}

这样我们把三个文档存入到employee的索引之中。

创建新的role

请注意:如下的操作是在elastic用户登录的情况下进行操作的。要创建新用户,请导航到管理UI并在“Security”部分中选择“role”,或者如果您当前在“Users”屏幕上,请单击“Roles”选项。 角色屏幕显示所有已定义/可用的角色:

当我们点击roles后:

我们点击Create role按钮。

在这里,我们定义了一个叫做monitor_role,它具有monitor的权限。

把role赋予给用户

我们打开我们的用户列表。针对我的情况,我们打开liuxg用户:

我们修改liuxg账号的Roles。把刚才创建的monitor_role赋予给liuxg用户。点击Update User按钮。这样我们的设定就好了。设定好的账号是这样的:

从上面,我们可以看出来liuxg账号是有monitor_role的,而user1账号是没有的。

下面我们来做一些基本的测试。我们在一个terminal中打入如下的命令:

curl -u liuxg:123456 "http://localhost:9200/_cluster/health?pretty"

注意这里的123456是liuxg的账号密码。执行上面的显示结果是:

我们显然看到了结果。那么我们同样地对use1账号来进行实验:

curl -u user1:123456 "http://localhost:9200/_cluster/health?pretty"

显示的结果是:

显然,user1账号没有得到任何结果。这个根本的原因是因为这个账号没有相应的权限。

文档级或字段级安全

现在,我们知道了如何创建新用户,创建新角色以及将角色分配给用户,让我们探讨如何针对给定的索引/文档对文档和字段施加安全性。接下来,我们使用我之前给大家输入进的employee索引来展示。

案例1

当用户搜索员工详细信息时,该用户不允许包含在属于员工索引的文档中的薪水/地址详细信息。这就是我们所说的字段级安全。首先,让我们来创建一个叫做employee_read的role。这个role只具有employ索引的read权限。为了限制字段,我们可以在设置里做相应的配置:

我们只允许这个employee_read role访问gender,state及email字段,而且只有read权限。

运用我们刚才设置的employee_read role,我们赋予给我们的user1用户:

设置好的用户界面为:

![] (https://img-blog.csdnimg.cn/20191029213613951.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1VidW50dVRvdWNo,size_16,color_FFFFFF,t_70)

上面显示我们的user1具有employ_read的role。

在我们的一个terminal里打入如下的命令:

curl -u user1:123456 "http://localhost:9200/employee/_search?pretty"

请注意:这里的123456是user1用户的密码。上面命令显示的结果为:

显然,user1只能访问在employee_read中的三个字段。

案例2

我们想定义一个role。这个role具有read的权限,并且只能访问state为OR的那些文档。我们做一下的设置:

我们创建了一个叫做OR_state的role。它通过一个query:

{"match": {"state.keyword":"OR"}}

来匹配项对应的文档。我们接着把这个role赋予给liuxg用户:

在我们设置完后,我们接着在一个terminal中打入如下的命令:

curl -u liuxg:123456 "http://localhost:9200/employee/_search?pretty"

显示的结果:

我们可以看出来这次的显示的结果只有一个,而且这个文档的state是OR。

Elasticsearch:用户安全设置的更多相关文章

  1. 【转】linux 设置用户id 设置组id

    linux 设置用户id 设置组id   转自 linux 设置用户id 设置组id   最近看apue,简单记录对设置用户id理解(设置组id同理). 1. 相关的id好像很多,共有哪些? 文件2个 ...

  2. iOS开发--应用设置及用户默认设置【2、读取应用中的设置】

            在上一节中,我们通过探讨应用的系统设置的基本功能,了解运用bundle捆绑包以及plist文件的基本开发.用户能够使用设置应用来声明他们的偏好设置,那么我们怎样去调用用户所设置的参数呢 ...

  3. iOS开发--应用设置及用户默认设置【1、bundle的运用】

           在iphone里面,应用都会在“设置”里面有个专属的应用设置,选择该菜单界面,用户便可以在其中输入和更改各种选项,协助用户更便捷设置个人喜好与习惯. 在这一节中,希望能通过对捆绑包(bu ...

  4. iOS提醒用户进入设置界面进行重新授权通知定位等功能

    iOS 8及以上版本最不为人知的一个特点是与应用设置的深层链接,用户可以根据APP的需要授权启用位置.通知.联系人.相机.日历以及健康等设置. 大多数应用程序仅仅是弹出一个包含操作指令的警示窗口,如“ ...

  5. iOS开发--应用设置及用户默认设置——转载

    [链接]iOS开发--应用设置及用户默认设置[1.bundlehttp://www.jianshu.com/p/6f2913f6b218 在iphone里面,应用都会在“设置”里面有个专属的应用设置, ...

  6. linux普通用户权限设置为超级用户权限方法、sudo不用登陆密码

    以用户zato为例 普通用户权限设置为超级用户权限 进入有超级用户权限的账号 添加文件可写(w)权限 sudo chmod u+x /etc/sudoers 编辑/etc/sudoers文件 添加语句 ...

  7. Mysql用户密码设置修改和权限分配

    我的mysql安装在c:\mysql 一.更改密码 第一种方式: 1.更改之前root没有密码的情况 c:\mysql\bin>mysqladmin -u root password " ...

  8. Servlet之保存用户偏好设置简单功能的实现

    写在前面: 先来陈述一下为什么会有这样一个需求和这篇博文. 这是公司的一个项目,我们负责前端,后台服务由其他公司负责.该系统有一个系统偏好设置模块,用户可以设置系统的背景图片等系统样式,因为这是一个比 ...

  9. FTP服务添加用户及设置权限

    CentOS下安装vsftpd省略. 添加ftp账户: useradd ahaii -d /home/ftp/ -s /sbin/nologin 添加密码: passwd ahaii 限制该用户只能访 ...

随机推荐

  1. Map接口中的常用方法和Map集合遍历键找值方式

    Map接口中定义了很多方法,常用的如下: public V put(K key,V value) 将指定的值与此映射中的指定键相关联(可选操作) V remove(Object key); 如果此映射 ...

  2. 业务可视化-让你的流程图"Run"起来(2.问题与改进)

    前言 首先,感谢大家对上一篇文章[业务可视化-让你的流程图"Run"起来]的支持. 分享一下近期我对这个项目的一些改进. 问题&改进 问题1: 流程运行开始后,异步执行,无 ...

  3. 数码管动态显示Verilog实现(参考小梅哥教程)(视觉暂留)

    一个数码管有九个引脚,控制八段二极管的亮灭,用以显示需要的数字. 当有N个数码管时,一个一个控制的话需要N x 9 个引脚,消耗资源较多. 因此可以利用动态显示的方案通过人眼的视觉暂留特性达到静态显示 ...

  4. 如何在CentOS上找出逐渐耗尽磁盘空间的目录和文件

    起因 随着系统运行,CentOS空间不断减少,对此非常焦虑,到底磁盘空间被哪些新增文件占用了呢? 分析过程,主要使用du命令,逐层找出消耗空间的目录 1.在根目录下检索一下文件的占用情况,执行du命令 ...

  5. 用kubeadm简单部署k8s

    一.环境准备 1.三台CentOS6.7虚拟机 master:192.168.0.54 注意:主节点最好是2颗cpu,否则在k8s控制平面初始化的时候会报错: node1:192.168.0.68 n ...

  6. 编译器工程师眼中的好代码:Loop Interchange

    摘要:本文将以Loop Interchange的场景为例,讲述在编写代码时可以拿到更优性能的书写方式. 本文分享自华为云社区<编译器工程师眼中的好代码(1):Loop Interchange&g ...

  7. 关于微信豆苹果(IOS)用户1比10充值方法

    ​ 微信iOS端微信7.0.20版本之后就上线了微信豆功能,相比大家对微信豆已经不陌生了. 微信官方现在给出了微信豆的含义,微信豆是用于支付微信内虚拟物品的道具,支持在视频号中购买虚拟礼物.也可以对公 ...

  8. Apache DolphinScheduler 1.3.9 发布,新增 StandaloneServer

    点击上方 蓝字关注我们 2021 年 10 月 22 日,Apache DolphinScheduler 正式发布 1.3.9 版本.时隔一个半月,在社区贡献者的共同努力下,Apache Dolphi ...

  9. centos/windows服务器,Mysql数据库表结构损坏-已解决

    [问题原因]服务器突然断电 [故障报告]数据库表结构损坏 [解决思路]进入强制恢复模式,备份库表及数据重建 故障发现 周末公司断电,周一启动数据库就直接报错了 查看日志 上面标记的log,明确表示是非 ...

  10. 深入理解Spring事件机制(一):广播器与监听器的初始化

    前言 Spring 从 3.x 开始支持事件机制.在 Spring 的事件机制中,我们可以令一个事件类继承 ApplicationEvent 类,然后将实现了 ApplicationListener ...