02.elasticsearch-security_es权限管理API概览

1.es权限管理简介

  这里主要学习一下es基于用户的权限管理是怎么运转的。在权限管理中有这样几个部分,es内部的权限管理可以认为是遵循了RBAC的模式,Role-Based-Access-Control , 对应的有这么些概念

  1. secured resource 需要限制访问的资源(索引,doc,field, aliases等)
  2. privilege 一些执行动作,(write,read)
  3. permissions 权限,是对某个资源可以执行哪些的动作的集合,比如可以对 topic这个index执行写操作,就是一个permission
  4. role 是permissions的集合

1.1 role的权限定义

用户user的创建比较简单,都是直接和role进行关联,所以role的定义变得很有内容。

PUT /_security/role/<name>
{
  "run_as": [ ... ],
  "cluster": [ ... ],
  "global": { ... },
  "indices": [ ... ],
  "applications": [ ... ]

}

可以看到,为一个role分配权限的时候包括了这样几个部分
1.run_as: 可以按照别的用户的权限来给自己授予权限
2.cluster: 集群级别的权限,主要是集群管理,监控等权限
3.global: global权限是用来管理application的,下面会详述
4.indices:这个是最常用的,就是对那些索引有什么操作权限权限
5.applications: 这个是为那些自定义权限的组件定义的,定义比较灵活

一个实例

POST /_security/role/my_admin_role
{
  "cluster": ["all"],
  "indices": [
    {
      "names": [ "index1", "index2" ],
      "privileges": ["all"],
      "field_security" : { // optional
        "grant" : [ "title", "body" ]
      },
      "query": "{\"match\": {\"title\": \"foo\"}}" // optional
    }
  ],
  "applications": [
    {
      "application": "myapp",
      "privileges": [ "admin", "read" ],
      "resources": [ "*" ]
    }
  ],
  "run_as": [ "other_user" ], // optional
  "metadata" : { // optional
    "version" : 1
  }
}

1.2 创建user

POST /_security/user/jacknich
{
  "password" : "j@rV1s",
  "roles" : [ "admin", "other_role1" ],
  "full_name" : "Jack Nicholson",
  "email" : "jacknich@example.com",
  "metadata" : {
    "intelligence" : 7
  }
}

上面的过程简单的展示了创建user和role的过程。

2. es创建role的权限详解

  通过上面已经简单了解了role的权限构成,这里会详细的介绍各个组成部分。其实对于es的主要的权限管理还是在cluster和indeces上面,run_as算是一种授权的方式,并不代表了具体的权限,applications这个是周边组件自定义权限使用,下面会详述。权限被划分为cluster级别和indices级别。

2.1 run_as权限

  run_as,对应的属性值就是一系列的user 的权限,在上一篇中已经介绍过run_as的功能了,他只是为了授权更方便,并不改变基本的权限粒度

2.2 cluster 相关权限

cluster级别的权限也有很多,大部分都是集群状态数据的管理

权限大类别权限明细含义备注
cluster
all所有cluster级别的权限
create_snapshot为现有的数据创建快照的权限
manage对集群的管理权限,包括集群的设置,rerouting等,但是不包括对security的管理
manage_ccr跨集群副本操作的权限
manage_ilmindex life manage,对索引的生命周期管理的权限,对roll up的索引进行管理
manage_index_templatesAll operations on index templates.
manage_ingest_pipelinesAll operations on ingest node pipelines.
manage_ml机器学习相关
manage_pipelineAll operations on ingest pipelines.
manage_rollup对rollup的操作任务进行管理, 包括创建,开始,停止,删除
manage_samlSAML 认证(收费项目)
manage_security所有security相关的操作,比如针对role和users的CRUD
manage_tokentoken验证(收费项目)
manage_watcher监控报警相关(收费项目)
monitor对集群所有的查询接口的操作权限,比如cluster health,state,hot threads,node info,node and cluster stats,pending cluster tasks
monitor_ml关于机器学习的所有查询操作(收费项目)
monitor_rollup针对roll up功能的所有查询操作,查询当前的rollup jobs等操作
monitor_watcher针对报警功能的查询操作(收费项目)
read_ccr跨集群相关的一些读操作(收费项目)
read_ilmindex lifecycle management 的查询操作,比如获取policies或者检查status
transport_clienttransport client 连接需要的所有权限

2.3 indices 相关权限

对哪些索引(支持*正则等)有哪些权限(read,write,create,等等)

权限大类别权限明细含义备注
index
allAny action on an index
create创建documents,但是对于已经存在doc可能会失败
create_index创建index的权限,如果一个创建索引的请求同时包含了aliases操作,那么这个请求的用户同时需要对index和aliase有 "manage"权限
deletePrivilege to delete documents
delete_indexPrivilege to delete an index
indexPrivilege to index and update documents. Also grants access to the update mapping action
manage所有的"monitor"权限,外加对index的管理员权限(aliases,analyze,cache clear,close,delete,exitsts,flush,mapping,open,force merge, refresh,settings,search shards, templates, validate)
manage_follow_index只对有follower index的有关
manage_ilmAll index lifecycle management operations 包括retrying policies, and removing a policy from an index.
manage_leader_index只对有follower index的有关
monitorAll actions that are required for monitoring (recovery, segments info, index stats and status).
read只读权限(count, explain, get, mget, get indexed scripts, more like this, multi percolate/search/termvector, percolate, scroll, clear_scroll, search, suggest,tv)
read_cross_cluster跨集群操作
view_index_metadata对index metadata的只读权限,针对(aliases, aliases exists, get index, exists, field mappings, mappings, search shards, type exists, validate, warmers, settings, ilm)
write对docment操作的所有写相关的权限,包括(index, update, delete documents ,bulk operations),同时也有update mapping的权限

2.4 applications相关权限

2.4.1 application 作用含义

这个虽然知道api和形式,但是不知道怎么用,看他官方的解释是这个样子的 这里

They do not, however, grant access to any actions or resources within Elasticsearch.
 Their purpose is to enable applications to represent 
 and store their own privilege models within Elasticsearch roles.

  这一段的描述说的大概是指application的配置并不会授予当前role任何elasticsearch的资源(cluster相关操作,indices相关的操作),他是为了让周边的应用比如kibana,filebeat能够用他们自己的方式授权。比如kibana,有很多自己的菜单页,没有必要把这些菜单页都对应成一个es的索引(这样很麻烦,而且很浪费),所以kibana自己定义了一些权限,这些权限统一以applications的形式存储在es当中了。然后自己通过一个名字为kibana-.kibana 的application来记录有哪些权限。

GET /_security/privilege/kibana-.kibana
{"kibana-.kibana" : {
   "feature_apm.read" : {
      "application" : "kibana-.kibana",
      "name" : "feature_apm.read",
      "actions" : [
        "saved_object:7.3.0:url/find",
        "saved_object:7.3.0:url/get",
        "login:",
        "saved_object:7.3.0:config/bulk_get",
        "ui:7.3.0:apm/show",
        "saved_object:7.3.0:url/bulk_get",
        "saved_object:7.3.0:config/find",
        "ui:7.3.0:navLinks/apm",
        "saved_object:7.3.0:config/get",
        "api:7.3.0:apm",
        "version:7.3.0",
        "app:7.3.0:kibana",
        "ui:7.3.0:catalogue/apm",
        "app:7.3.0:apm"
      ],
      "metadata" : { }
    },
    "feature_graph.read" : {
      "application" : "kibana-.kibana",
      "name" : "feature_graph.read",
      "actions" : [
        "saved_object:7.3.0:url/find",
        "saved_object:7.3.0:url/get",
        "ui:7.3.0:navLinks/graph",
        "login:",
        "saved_object:7.3.0:config/bulk_get",
        "saved_object:7.3.0:url/bulk_get",
        "saved_object:7.3.0:graph-workspace/get",
        "saved_object:7.3.0:config/find",
        "saved_object:7.3.0:graph-workspace/find",
        "saved_object:7.3.0:index-pattern/find",
        "saved_object:7.3.0:index-pattern/get",
        "app:7.3.0:graph",
        "saved_object:7.3.0:config/get",
        "saved_object:7.3.0:graph-workspace/bulk_get",
        "saved_object:7.3.0:index-pattern/bulk_get",
        "version:7.3.0",
        "app:7.3.0:kibana",
        "ui:7.3.0:catalogue/graph"
      ],
      "metadata" : { }
    }
  }
}

这里的application 的name是kibana-.kibana,然后他里面自定义了很多的权限(privilege),像feature_apm.read, feature_graph.read都是其中的一个权限。在创建role的时候需要选择application的那个privilege

2.4.2 application创建
PUT /_security/privilege
{
  "myapp": {
    "read": {
      "actions": [
        "data:read/*" ,
        "action:login" ],
        "metadata": {
          "description": "Read access to myapp"
        }
      }
    }
}

es对application的结构特征有要求,但是很多key都不是固定的。
1.myapp:对应了application的name
2.read :对应了myapp的一个privilege,和上面的kibana-.kibana application中的feature_apm.read, feature_graph.read是同一个级别的东西,可以是任意字符串
3.actions:这个是固定出现的,里面配置的就是具体的自定义的promission
4.metadata: 可选的,用于描述一些辅助信息
创建role的时候使用的方式

{
  "run_as": [ ... ],
  "cluster": [ ... ],
  "global": { ... },
  "indices": [ ... ],
  "applications": [ ... ]

}

{
  "application": "my_app",
  "privileges": [ ... ],
  "resources": [ ... ]
}

2.5 global相关权限

global权限是用来管理application,文档上面说global支持的唯一权限就是能够管理哪些application
参考这里

The only supported global privilege
 is the ability to manage application privileges

也就是说这个只有在创建role的时候直接使用那些已经定义好的application
创建的样例

{
  "run_as": [ ... ],
  "cluster": [ ... ],
  "global": { ... },
  "indices": [ ... ],
  "applications": [ ... ]

}

对应global的结构是
{
  "application": {
    "manage": {
        "applications": [ ... ]
    }
  }
}

2.6 es中build-in role

es中内建了一些role来辅助快速创建用户

beats_system
kibana_dashboard_only_user
kibana_system
kibana_user
logstash_system
superuser

2.7 es中的build-in user

elastic 超管

kibana
The user Kibana uses to connect and communicate with Elasticsearch.
这个也是只是kibana使用的,你能看到哪些图取决于你登录使用的账户

logstash_system
The user Logstash uses when storing monitoring information in Elasticsearch.
这个是存储montiroring data使用的账户,如果想要对es写入数据,还需要自己创建一些账户
而且老版本的logstash_system好像是没有开启的,还需要注意

beats_system
The user the Beats use when storing monitoring information in Elasticsearch.

apm_system
The user the APM server uses when storing monitoring information in Elasticsearch.
remote_monitoring_user


需要注意的是这些用户都需要激活才能使用,关于激活的方式可以看这里

3. 权限role,user创建的入口

  1. 可以在kibana的ui页面创建
  2. 可以调用对应的rest API进行访问创建

4. 简单总结

  到这里,终于把es的role给描述完了,啰里啰嗦的整了很多,希望后期再看的时候能够快速理解es的权限管理,最后,再来回顾一下es开启security的流程:

  1. 检查使用license,因为不同的license能够使用的权限验证方式也是不一样的。
  2. 检查集群,保证每一个node都进行了设置 xpack.security.enabled: true
    这个会开启security设置,也就开启了node之间使用ssl和基于用户的访问模式
  3. 开启node之间的transport层面的ssl/tls
  4. 启动es
  5. 为build-in user设置password
  6. 选择一种realm的管理方式,basic只能使用 file,native两种方式,其他的都是收费的
  7. 创建一些role和user来进行使用
elasticsearch-7.17.0-linux-x86_64.tar.gz是一个压缩文件,其中包含了elasticsearch 7.17.0版本的Linux x86_64平台的安装程序。Elasticsearch是一个开源的高度可扩展的全文搜索和分析引擎,广泛应用于构建实时搜索、数据分析和大数据处理。 这个压缩文件可以在Linux的x86_64平台上安装和部署elasticsearch。首先,需要通过解压缩命令来解压该文件,可以使用以下命令实现: tar -zxvf elasticsearch-7.17.0-linux-x86_64.tar.gz 解压后会得到一个包含elasticsearch安装文件的目录。接下来,可以通过运行elasticsearch的可执行文件来启动elasticsearch服务。可以进入该目录并执行以下命令来启动elasticsearch: ./bin/elasticsearch 在启动成功后,elasticsearch将在本地的9200端口上运行,默认提供HTTP接口用于与其进行交互。可以通过浏览器或命令行工具发送HTTP请求来与elasticsearch进行交互,使用RESTful API进行数据索引、搜索和分析等操作。 在elasticsearch-7.17.0-linux-x86_64.tar.gz压缩文件中,还包含了其他一些相关的文件和目录,如配置文件目录(config)和插件目录(plugins),可以根据需要进行相应的配置和插件安装。 总之,elasticsearch-7.17.0-linux-x86_64.tar.gz是elasticsearch 7.17.0版本在Linux x86_64平台上的安装文件,通过解压缩、启动可执行文件和配置相关参数,可以轻松地在本地部署和使用elasticsearch
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值