zoukankan      html  css  js  c++  java
  • 基于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两个角色时,反而能看到所有的文档和字段
    • 文档级和字段级的权限只对"读"操作有效,对于"写"操作无效,即仍然可以修改看不到的字段

  • 相关阅读:
    Linux
    memory库函数的实现
    剑指Offer面试题1
    Linux
    Linux-配置vim开发环境
    Linux-Find命令
    busybox,alphine,ubuntu,centos/fedore操作系统
    端口映射与容器互联
    docker 数据管理数据卷
    Celery
  • 原文地址:https://www.cnblogs.com/wangzhen3798/p/13366520.html
Copyright © 2011-2022 走看看