基于xpack的ES用户管理(授权)

基于xpack的ES用户管理(授权)

之前研究了【基于xpack的用户认证】,了解了用户认证的原理和具体操作,继续研究基于xpack的授权

基本概念

  • RBAC

    Elasticsearch默认的授权管理是通过RBAC机制,也就是基于角色的访问控制(role based access control)

  • 受保护的资源(Secured Resource)

    在ES中集群、索引、文档、字段、别名、用户都可以是被保护的对象

  • 权限字(Privilege)

    每个被保护的资源都有与之对应的一组允许执行的动作,集群的权限有:all,manage,monitor等,索引的权限有:all,create,delete,index,read,write,manage等

  • 许可(permissions)

    一组被授权的资源和其权限字的集合

  • 角色(Role)

​ 一组许可的集合,默认的角色有:superuser,kibana_system,logstash_system,apm_system,monitor_system等,可以通过命令查看

GET /_security/role
  • 用户(User)
    被认证的用户,系统自带的用户可以通过命令查看
GET /_security/user

授权控制级别

Elasticsearch自带的xpack插件支持多个级别和层次的授权

  • 集群级别

  • 索引级别

  • 文档级别(基础版不支持,需要license)

  • 字段级别(基础版不支持,需要license)

如何通过角色授权

首先要确保elasticsearch.yml中安全配置xpack.security.enabledxpack.security.dls_fls.enabledtrue

在xpack中有三种方式可以添加角色,分别是:

  • 通过图形化界面;Kibana->Security->Roles

  • 设置ES_HOME/config/roles.yml

  • 通过role API

    • role API的格式

      POST /_security/role/clicks_admin
      {
        "run_as": [ "clicks_watcher_1" ],
        "cluster": [ "monitor" ],
        "indices": [
          {
            "names": [ "events-*" ],
            "privileges": [ "read" ],
            "field_security" : {
              "grant" : [ "category", "@timestamp", "message" ]
            },
            "query": "{\"match\": {\"category\": \"click\"}}"
          }
        ]
      }
      
      
    • 给用户赋予角色

      PUT /_security/user/wangzhen
      {
        roles:[clicks_admin]
      }
      

注意事项

  • field_security 和 query 即文档级和字段级的权限需要更高级的license如黄金级和白金级
  • 文档级和字段级的权限是OR的关系,如role_1有文档级的权限,role_2没有,当用户同时有role_1和role_2两个角色是就能看到所有的文档(因为role_2可以看到所有的文档)
  • 文档级和字段级的权限只对"读"操作有效,对于"写"操作无效,即仍然可以修改看不到的字段
posted @ 2020-07-22 17:16  wangzhen3798  阅读(1282)  评论(0编辑  收藏  举报