配置集群安全访问-Elastic Stack 实战手册

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 为了防止生产中未经授权的访问,采用了不同的机制来施加安全性,例如在防火墙后运行Elastic Stack并通过反向代理(例如 nginx,HAProxy 等)进行保护

970X90.png

· 更多精彩内容,请下载阅读全本《Elastic Stack实战手册》

· 加入创作人行列,一起交流碰撞,参与技术圈年度盛事吧

创作人:刘晓国

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

本文中将介绍如何为我们的 Elastic 索引设置字段级的安全。这样有的字段对有些用户是可见的,而对另外一些用户是不可见的。我们也可以通过对用户安全的设置,使得不同的用户有不同的权限。

User authentication

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

1.png

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

为 Elastic 设置安全及创建用户

当我们设置完我们的安全账户后,最开始我们使用最原始的 Elastic 的账号进行登录。

请注意这里的密码是我们设置 Elastic 账号的密码

2.png

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

3.png

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

4.png

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

5.png

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

6.png

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

7.png

准备实验数据

在我们还没退出 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 的索引之中。

8.png

创建新的 role

由于字段级安全是白金版特有的功能,在一下的字段级安全配置中,我们需要启动白金版试用。 对于不想使用字段级安全的用户来说,请忽略下面启动白金版试用的步骤。下面展示如何启动白金版试用:

9.png

10.png

11.png

12.png

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

13.png

当我们点击 roles 后:

14.png

我们点击 Create role 按钮。

15.png

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

把 role 赋予给用户

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

16.png

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

17.png

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

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

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

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

18.png

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

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

显示的结果是:

19.png

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

文档级或字段级安全

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

案例1

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

20.png

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

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

21.png

设置好的用户界面为:

22.png

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

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

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

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

23.png

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

案例2

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

24.png

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

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

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

25.png

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

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

显示的结果:

26.png

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

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
安全 应用服务中间件 网络安全
带你读《Elastic Stack 实战手册》之12:——3.4.1.5.配置集群安全访问(1)
带你读《Elastic Stack 实战手册》之12:——3.4.1.5.配置集群安全访问(1)
117 0
带你读《Elastic Stack 实战手册》之12:——3.4.1.5.配置集群安全访问(1)
|
安全 API 数据安全/隐私保护
带你读《Elastic Stack 实战手册》之12:——3.4.1.5.配置集群安全访问(2)
带你读《Elastic Stack 实战手册》之12:——3.4.1.5.配置集群安全访问(2)
121 0
带你读《Elastic Stack 实战手册》之12:——3.4.1.5.配置集群安全访问(2)
|
安全 Ubuntu 物联网
带你读《Elastic Stack 实战手册》之12:——3.4.1.5.配置集群安全访问(5)
带你读《Elastic Stack 实战手册》之12:——3.4.1.5.配置集群安全访问(5)
113 0
|
安全 索引
带你读《Elastic Stack 实战手册》之12:——3.4.1.5.配置集群安全访问(4)
带你读《Elastic Stack 实战手册》之12:——3.4.1.5.配置集群安全访问(4)
101 0
|
安全
带你读《Elastic Stack 实战手册》之12:——3.4.1.5.配置集群安全访问(3)
带你读《Elastic Stack 实战手册》之12:——3.4.1.5.配置集群安全访问(3)
114 0
|
JSON 数据库 数据格式
带你读《Elastic Stack 实战手册》之7:——3.3.2.专有名词解释(2)
带你读《Elastic Stack 实战手册》之7:——3.3.2.专有名词解释(2)
136 0
|
应用服务中间件 nginx
带你读《Elastic Stack 实战手册》之7:——3.3.2.专有名词解释(1)
带你读《Elastic Stack 实战手册》之7:——3.3.2.专有名词解释(1)
125 0
|
存储 搜索推荐 网络架构
带你读《Elastic Stack 实战手册》之7:——3.3.2.专有名词解释(4)
带你读《Elastic Stack 实战手册》之7:——3.3.2.专有名词解释(4)
109 0
|
存储 定位技术 数据库
带你读《Elastic Stack 实战手册》之7:——3.3.2.专有名词解释(3)
带你读《Elastic Stack 实战手册》之7:——3.3.2.专有名词解释(3)
143 0
|
Ubuntu 物联网 大数据
带你读《Elastic Stack 实战手册》之7:——3.3.2.专有名词解释(5)
带你读《Elastic Stack 实战手册》之7:——3.3.2.专有名词解释(5)
111 0