基于xpack的ES用户管理常用命令
基于xpack的ES用户管理常用命令
通过对【用户认证】和【用户授权】的研究,总结一下常用的用户管理命令
环境信息
验证环境基于Elasticsearch-V7.2.0版本,且需要在ES_HOME/config/elasticsearch.yml中打开xpack.security.enabled
和 xpack.security.dls_fls.enabled
两个参数,文档和字段级权限控制需要ES xpack 黄金级或铂金级license。
xpack.security.enabled: true
xpack.security.dls_fls.enabled: true
用户管理的方式
对于默认集成的xpack插件,使用内建和基于文件管理的用户认证和授权。有三种方式可以实现用户管理
-
通过图形化基面
通过Kibana管理工具-->【Manager】-->【Users/Roles】 模块,可以方便的进行用户、角色、权限管理
-
通过配置文件
通过$ES_HOME/config目录下的users、users_roles、roles.yml、role_mapping.yml四个文件完成用户、角色、权限的初始化和管理
-
通过 API 命令
以上两种方式做用户管理时,不方便项目管理,不能用git等版本管理追踪到项目的全量和增量脚本。API 方式很好的弥补了这个问题
常用的用户管理命令
-
初始化用户名密码
运行 $ES_HOME/bin/elasticsearch-setup-passwords interactive 命令初时化用户密码
./elasticsearch-setup-passwords interactive [akes@pc143 bin]$ ./elasticsearch-setup-passwords interactive future versions of Elasticsearch will require Java 11; your Java version from [/home/akes/jdk1.8.0_161/jre] does not meet this requirement Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user. You will be prompted to enter passwords as the process progresses. Please confirm that you would like to continue [y/N]y Enter password for [elastic]: --依次输入账户所对应的密码,建议相同密码 Reenter password for [elastic]: Enter password for [apm_system]: ... ... Changed password for user [elastic]
-
查看用户
curl -XGET -u elastic:123456 "http://localhost:9200/_security/user"
-
查看角色
curl -XGET -u elastic:123456 "http://localhost:9200/_security/role"
-
添加用户
curl -XPOST -u elastic:123456 "http://localhost:9200/_security/user/wangzhen" -H 'Content-Type: application/json' -d '{ "password": "123456", "roles": ["superuser"], "full_name": "wangzhen", "email":"wangzhen@126.com", "metadata": { "age":21, "sex":"男" } }'
-
修改用户
和新增API一样,但是不能修改用户名和密码
curl -XPUT -u elastic:123456 "http://localhost:9200/_security/user/wangzhen" -H 'Content-Type: application/json' -d '{ "roles": ["superuser"], "full_name": "wangzhen", "email":"wangzhen@126.com", "metadata": { "age":22, "sex":"男" } }'
-
修改密码
返回 { } 空json代表成功PUT /_security/user/wangzhen/_password { "password":"test123456" }
-
删除用户
DELETE /_security/user/wangzhen
-
激活/禁用用户
PUT /_security/user/wangzhen/_enable PUT /_security/user/wangzhen/_disable
-
添加只读权限角色
POST /_security/role/test1_role { "indices": [ { "names": [ "test-*" ], "privileges": [ "read" ] } ] }
-
控制列/字段可见性
POST /_security/role/test2_role { "indices": [ { "names": [ "test-*" ], "privileges": [ "read","write"], "field_security" : { "grant" : [ "name", "age", "email" ] } } ] }
-
控制文档可见性
POST /_security/role/test3_role { "indices": [ { "names": [ "test-*" ], "privileges": [ "read" ,"write"], "query": "{\"match\": {\"category\": \"click\"}}" } ] }
-
同时控制文档和列可见性
POST /_security/role/test4_role { "indices": [ { "names": [ "test-*" ], "privileges": [ "read","write" ], "field_security" : { "grant" : [ "name", "age", "email" ] }, "query": "{\"match\": {\"category\": \"click\"}}" } ] }
-
给用户赋予角色(权限)
PUT /_security/user/wangzhen { roles:[clicks_admin] }
注意事项
-
不设置文档级和字段级权限控制时,默认可以看到所有文档和所有字段
-
文档级和字段级的权限是OR的关系,如:
- test_role2有字段级的限制,没有文档级限制
- test_role3有文档级限制,没有字段级限制
- 当用户同时有test_role2和test_role3两个角色时,反而能看到所有的文档和字段
-
文档级和字段级的权限只对"读"操作有效,对于"写"操作无效,即仍然可以修改看不到的字段