天天看点

基于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)

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

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

PUT /_security/user/wangzhen
{
  "roles": ["superuser"],
  "full_name": "wangzhen",
  "email":"[email protected]",
  "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      

继续阅读