基于xpack的ES用户管理常用命令

基于xpack的ES用户管理常用命令

通过对【用户认证】【用户授权】的研究,总结一下常用的用户管理命令

环境信息

验证环境基于Elasticsearch-V7.2.0版本,且需要在ES_HOME/config/elasticsearch.yml中打开xpack.security.enabledxpack.security.dls_fls.enabled 两个参数,文档和字段级权限控制需要ES xpack 黄金级或铂金级license

xpack.security.enabled: true
xpack.security.dls_fls.enabled: true

用户管理的方式

对于默认集成的xpack插件,使用内建和基于文件管理的用户认证和授权。有三种方式可以实现用户管理

  • 通过图形化基面

    通过Kibana管理工具-->【Manager】-->【Users/Roles】 模块,可以方便的进行用户、角色、权限管理

  • 通过配置文件

    通过$ES_HOME/config目录下的users、users_roles、roles.yml、role_mapping.yml四个文件完成用户、角色、权限的初始化和管理

  • 通过 API 命令

    以上两种方式做用户管理时,不方便项目管理,不能用git等版本管理追踪到项目的全量和增量脚本。API 方式很好的弥补了这个问题

常用的用户管理命令

  • 初始化用户名密码

    运行 $ES_HOME/bin/elasticsearch-setup-passwords interactive 命令初时化用户密码

    ./elasticsearch-setup-passwords interactive 
    [akes@pc143 bin]$ ./elasticsearch-setup-passwords interactive 
    
    future versions of Elasticsearch will require Java 11; your Java version from [/home/akes/jdk1.8.0_161/jre] does not meet this requirement
    
    Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
    
    You will be prompted to enter passwords as the process progresses.
    
    Please confirm that you would like to continue [y/N]y
    
    Enter password for [elastic]: --依次输入账户所对应的密码,建议相同密码
    
    Reenter password for [elastic]: 
    
    Enter password for [apm_system]: 
    
    ...
    ...
    
    Changed password for user [elastic]
    
  • 查看用户

    curl -XGET -u elastic:123456 "http://localhost:9200/_security/user"
    
  • 查看角色

    curl -XGET -u elastic:123456 "http://localhost:9200/_security/role"
    
  • 添加用户

    curl -XPOST -u elastic:123456 "http://localhost:9200/_security/user/wangzhen" -H 'Content-Type: application/json' -d  
    '{  
       "password": "123456",  
       "roles": ["superuser"],  
       "full_name": "wangzhen",  
       "email":"wangzhen@126.com",  
       "metadata": {    
           "age":21,    
           "sex":"男"  
           }
     }'
    
  • 修改用户

    和新增API一样,但是不能修改用户名和密码

    curl -XPUT  -u elastic:123456 "http://localhost:9200/_security/user/wangzhen" -H 'Content-Type: application/json' -d 
    '{  
       "roles": ["superuser"],  
       "full_name": "wangzhen", 
       "email":"wangzhen@126.com",  
       "metadata": 
       {    
          "age":22,    
          "sex":"男"  
        }
     }'
    
  • 修改密码
    返回 { } 空json代表成功

      PUT /_security/user/wangzhen/_password
      {
         "password":"test123456"
      }
    
  • 删除用户

    DELETE /_security/user/wangzhen
    
  • 激活/禁用用户

    PUT /_security/user/wangzhen/_enable
    PUT /_security/user/wangzhen/_disable
    
  • 添加只读权限角色

    POST /_security/role/test1_role
    {
      "indices": [
        {
          "names": [ "test-*" ],
          "privileges": [ "read" ]
        }
      ]
    }
    
  • 控制列/字段可见性

    POST /_security/role/test2_role
    {
      "indices": [
        {
          "names": [ "test-*" ],
          "privileges": [ "read","write"],
          "field_security" : {
            "grant" : [ "name", "age", "email" ]
          }
        }
      ]
    }
    
  • 控制文档可见性

    POST /_security/role/test3_role
    {
      "indices": [
        {
          "names": [ "test-*" ],
          "privileges": [ "read" ,"write"],
          "query": "{\"match\": {\"category\": \"click\"}}"
        }
      ]
    }
    
    
  • 同时控制文档和列可见性

    POST /_security/role/test4_role
    {
      "indices": [
        {
          "names": [ "test-*" ],
          "privileges": [ "read","write" ],
          "field_security" : {
            "grant" : [ "name", "age", "email" ]
          },
          "query": "{\"match\": {\"category\": \"click\"}}"
        }
      ]
    }
    
    
  • 给用户赋予角色(权限)

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

注意事项

  • 不设置文档级和字段级权限控制时,默认可以看到所有文档和所有字段

  • 文档级和字段级的权限是OR的关系,如:

    • test_role2有字段级的限制,没有文档级限制
    • test_role3有文档级限制,没有字段级限制
    • 当用户同时有test_role2和test_role3两个角色时,反而能看到所有的文档和字段
  • 文档级和字段级的权限只对"读"操作有效,对于"写"操作无效,即仍然可以修改看不到的字段

posted @ 2020-07-23 15:20  wangzhen3798  阅读(1022)  评论(0编辑  收藏  举报