基于open_distro的ES用户管理(认证)
基于open_distro的ES用户管理(认证)
背景
open distro for elasticsearch 是由亚马逊AWS支持的基于Apache License,Version 2.0协议的100%开源的Elasticsearch发行版。与Elastic公司官方的Elasticsearch版本最大的区别是:剔除了基于elastic协议发布的xpack插件,增加了开源插件。新增插件功能包括安全、告警、索引生命周期管理、性能分析、SQL等企业级功能。简单理解就是集成了开源版xpack插件的elasticsearch。
用户认证
和xpack一样open distro也提供了security插件,实现加密通信、用户登陆认证、操作授权、文档和字段级别访问控制、日志审计等企业级安全功能。opendisro_security插件也支持有internaldatabase、Active Directory, LDAP,OpenID Connect 等多种后台认证服务组成的认证链。默认采用internaldatabase方式实现用户管理,内部的用户数据、权限数据、角色数据存储在ES集群的.opendistro_security
索引中,和xpack的native realms 类似。系统默认初始化的用户有:
- admin 超级管理员
- readall 只读帐号
- logstash logstash连接es时的后台帐号
- kibanaserver kibana连接es时的后台帐号
- kibanaro kibana只读帐号,不能修改kibana可视化面板
- snapshotrestore 快照备份恢复帐号
用户管理的方式
opendisro_security插件默认支持三种用户管理方式:配置文件、kibana图形化界面、API命令
-
配置文件
-
应用场景:适合Elasticsearch安装后初始化用户数据,不适合后续业务管理。
-
操作方法:
-
第一步,在ES_HOME/plugins/opendistro_security/securityconfig/中编辑internal_users.yml、roles_maping.yml、roles.yml 文件中的用户、角色和权限数据
-
第二步,启动Elasticsearch服务
-
第三步,运行plugins/opendistro_security/tools/securityadmin.sh 脚本将数据更新到
.opendistro_security
索引中
-
-
-
kibana图形化界面
- 应用场景: 适合生产环境运维人员做人员管理
- 操作方法:
- 第一步, 安装并启动opendistrroforelasticsearch-kibana 版本的kibana
- 第二步, 在 security 模块添加用户和角色
-
API 命令
- 应用场景: 以上两种方式做用户管理时,不方便项目管理,不能用git等版本管理追踪到项目的全量和增量脚本,API 方式很好的弥补了这个问题.
常用的用户管理API
-
查看用户
GET _opendistro/_security/api/internalusers
-
新建用户
PUT _opendistro/_security/api/internalusers/wangzhen { "password":"6789@jkl", "backend_roles":[], "attributes":{ "age":18 } } #响应 { "status" : "CREATED", "message" : "'wangzhen' created." }
-
修改用户
官方推荐的PATCH 方法修改用户并不能成功,并报错
PATCH _opendistro/_security/api/internalusers/wangzhen { "op":"replace", "path":"/backend_roles", "value":["admin"] }
应该使用和新建用户一样的方法,且可以更新密码:
PUT _opendistro/_security/api/internalusers/wangzhen { "password":"6789@jkl", "backend_roles":["admin"], "attributes":{ "age":18 } } #响应 { "status" : "OK", "message" : "'wangzhen' updated." }
-
删除用户
DELETE /_opendistro/_security/api/internalusers/wangzhen #响应 { "status" : "OK", "message" : "'wangzhen' deleted." }