Elasticsearch:Security API 介绍

Posted Elastic 中国社区官方博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 的使用有更多更深的理解。

以上是关于Elasticsearch:Security API 介绍的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch:Security API 介绍

Elasticsearch:Security API 介绍

Elasticsearch built-in security features are not enabled去除

hids Elastic Security 系列1-Elastic Security介绍

hids Elastic Security 系列1-Elastic Security介绍

给Elasticsearch 5.2.2 设置用户权限 how to setting security for elasticsearch on windows