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
      
  • 相关阅读:
    Innodb之线程独享内存
    Innodb之全局共享内存
    mysql三层体系
    grep/字符/次数匹配/锚定符/小大括号/wc/tr/cut/sort/uniq
    Mysql多字段模糊查询
    小程序中使用less(最优方式)
    js控制文本框只能输入中文、英文、数字与指定特殊符号
    连接 MySQL 数据库出现问题:The server time zone value ‘�й���׼ʱ��‘ is unrecogni....
    Mysql聚簇索引和非聚簇索引
    npm run dev 和 npm run serve
  • 原文地址:https://www.cnblogs.com/wangzhen3798/p/13307229.html
Copyright © 2011-2022 走看看