zoukankan      html  css  js  c++  java
  • 基于x-pack的ES用户管理(认证)

    基于x-pack的ES用户管理(认证)

    Elasticsearch安全管理插件通过用户认证、用户授权、加密通信、审计日志、IP过滤等多种手段来保证集群的安全。

    领域(realms)和 领域链(realms chain)

    • 领域(realms)
      x-pack的安全插件可以通过用户名密码、证书、令牌和其他多种方法实现用户认证。
      Elasticsearch支持通过多种后台服务实现用户认证,这些后台服务方式通称为“领域”(realms),常见的realms有:native、ldap、active_directory、file、pki、file、saml、oidc。
    • 领域链(realms chain)
      不同的realms可以组成认证链,前一个realms没有认证通过时,使用后面的realms进行认证,直到所有的realms都没认证通过时才返回失败,只要一个返回成功就属于认证成功。默认的认证链中有native和file。
      realms分为两类:内部的realm和外部的realm,native和file都是es自带的内部realms,不需要和外部交互就能完成用户认证。
      内部的realms只能在认证链中配置一次,比如一个认证链中最多有一个native relams和file relams,但是可以有多个ldap realms配置。
      • native realm:
        通过native realm管理的用户数据,存储在集群的.secutrity-7索引中,可以通过user api和kibana UI进行人员的管理操作,人员数据在整个集群有效。
      • file realm:
        通过file realm 管理的用户数据存储在ES_HOME/config/users和users_roles的配置文件中,可以通过ES_HOME/bin/elasticsearch-users命令维护,人员数据在node级别有效,需要人为保证集群中每个节点数据都一致。
        users_roles中的人员角色数据需要角色在前,人员在后,如:
     [wangzhen@hellow-pc config]$ cat users_roles
      superuser:admin,sa
     [wangzhen@hellow-pc config]$ ../bin/elasticsearch-users list
      admin          : superuser
       sa            : superuser
    

    支持安全管理的ES版本

    Elasticsearch 从6.8.0/7.1.0后xpack 开源,基础版不需要授权免费使用,支持用户认证、授权、监控等功能

    Elasticsearch 5.X的版本无法免费使用xpack提供的安全功能

    内建用户和系统用户

    Elasticsearch在打开安全配置后,会有系统自带的管理帐号,称为内建用户。同时也有自带的系统用户。
    系统用户和内建用户的区别是:内建用户可以用来登陆,系统用户是es集群内部通信使用的,不能用来登陆,但是可以在审计日志中看到这些用户产生的事件。

    • 内建用户
      • elastic
      • kibana
      • beats_system
      • apm_system
      • remote_monitoring_user
    • 系统用户
      • _system
      • _xpack
      • _xpack_security

    用户数据的存储

    当使用Elasticsearch默认的native服务做用户认证授权时,用户数据存储在.security-7 所引中,索引数据可查看、修改、删除

    curl -X GET -i 'http://localhost:9200/.security-7/_search'
    
    {
      "took": 3,
      "timed_out": false,
      "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
      },
      "hits": {
        "total": {
          "value": 5,
          "relation": "eq"
        },
        "max_score": 1.0,
        "hits": [{
          "_index": ".security-7",
          "_type": "_doc",
          "_id": "reserved-user-kibana",
          "_score": 1.0,
          "_source": {
            "password": "$2a$10$EthtJnnPL9BXDnG2iH8LVedy5s4tOIPrvpZyRSJALw2IIR1ge/jl.",
            "enabled": true,
            "type": "reserved-user"
          }
        },...
        }]
      }
    }
    

    如何开启用户认证和授权功能

    • 第一步,打开安全开关

      修改 ES_HOME/config/elasticsearch.yml,添加 xpack.security.enabled: true

    • 第二步,初始化内建用户的密码

      执行 ES_HOME/bin/elasticsearch-set-passwords.sh interactive,通过交互的方式依次设置内建用户的密码

    • 第三步,登陆

      curl -XGET "http://localhost:9200" -u elastic:6789@jkl
      
      {
        "name" : "node-1",
        "cluster_name" : "my-application",
        "cluster_uuid" : "gZRcq4pUTFOdZSRy-JHrFQ",
        "version" : {
          "number" : "7.2.0",
          "build_flavor" : "default",
          "build_type" : "tar",
          "build_hash" : "508c38a",
          "build_date" : "2019-06-20T15:54:18.811730Z",
          "build_snapshot" : false,
          "lucene_version" : "8.0.0",
          "minimum_wire_compatibility_version" : "6.8.0",
          "minimum_index_compatibility_version" : "6.0.0-beta1"
        },
        "tagline" : "You Know, for Search"
      }
      

    如何进行用户增删改(native realm)

    用户管理操作可以通过两种方式进行:

    第一种,使用kibana通过图形化界面完成,模块路径:Management-->Security-->Users/Roles

    第二中,通过x-pack的API操作,如:

    • 新增用户

      PUT /_security/user/wangzhen
      {
        "password": "123456",
        "roles": ["superuser"],
        "full_name": "wangzhen",
        "email":"wangzhen@126.com",
        "metadata": {
          "age":21,
          "sex":"男"
        }
      }
      
    • 修改用户

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

      PUT /_security/user/wangzhen
      {
        "roles": ["superuser"],
        "full_name": "wangzhen",
        "email":"wangzhen@126.com",
        "metadata": {
          "age":21,
          "sex":"男"
        }
      }
      
    • 修改用户密码

      返回空json结构{ } 代表成功

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

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

      PUT /_security/user/wangzhen/_enable
      PUT /_security/user/wangzhen/_disable
      
  • 相关阅读:
    107. Binary Tree Level Order Traversal II
    103. Binary Tree Zigzag Level Order Traversal
    102. Binary Tree Level Order Traversal
    690. Employee Importance
    1723. Find Minimum Time to Finish All Jobs
    LeetCode 329 矩阵中最长增长路径
    7.2 物理内存管理
    LeetCode 面试题 特定深度节点链表
    LeetCode 100 相同的树
    npm安装包命令详解,dependencies与devDependencies实际区别
  • 原文地址:https://www.cnblogs.com/wangzhen3798/p/13307229.html
Copyright © 2011-2022 走看看