基于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
    
原文地址:https://www.cnblogs.com/wangzhen3798/p/13307229.html