基於xpack的ES用戶管理(授權)
之前研究了【基於xpack的用戶認證】,了解了用戶認證的原理和具體操作,繼續研究基於xpack的授權
基本概念
-
RBAC
Elasticsearch默認的授權管理是通過RBAC機制,也就是基於角色的訪問控制(role based access control)
-
受保護的資源(Secured Resource)
在ES中集群、索引、文檔、字段、別名、用戶都可以是被保護的對象
-
權限字(Privilege)
每個被保護的資源都有與之對應的一組允許執行的動作,集群的權限有:all,manage,monitor等,索引的權限有:all,create,delete,index,read,write,manage等
-
許可(permissions)
一組被授權的資源和其權限字的集合
-
角色(Role)
一組許可的集合,默認的角色有:superuser,kibana_system,logstash_system,apm_system,monitor_system等,可以通過命令查看
GET /_security/role
- 用戶(User)
被認證的用戶,系統自帶的用戶可以通過命令查看
GET /_security/user
授權控制級別
Elasticsearch自帶的xpack插件支持多個級別和層次的授權
-
集群級別
-
索引級別
-
文檔級別(基礎版不支持,需要license)
-
字段級別(基礎版不支持,需要license)
如何通過角色授權
首先要確保elasticsearch.yml中安全配置xpack.security.enabled
和xpack.security.dls_fls.enabled
為true
在xpack中有三種方式可以添加角色,分別是:
-
通過圖形化界面;Kibana->Security->Roles
-
設置ES_HOME/config/roles.yml
-
通過role API
-
role API的格式
POST /_security/role/clicks_admin { "run_as": [ "clicks_watcher_1" ], "cluster": [ "monitor" ], "indices": [ { "names": [ "events-*" ], "privileges": [ "read" ], "field_security" : { "grant" : [ "category", "@timestamp", "message" ] }, "query": "{\"match\": {\"category\": \"click\"}}" } ] }
-
給用戶賦予角色
PUT /_security/user/wangzhen { roles:[clicks_admin] }
-
注意事項
- field_security 和 query 即文檔級和字段級的權限需要更高級的license如黃金級和白金級
- 文檔級和字段級的權限是OR的關系,如role_1有文檔級的權限,role_2沒有,當用戶同時有role_1和role_2兩個角色是就能看到所有的文檔(因為role_2可以看到所有的文檔)
- 文檔級和字段級的權限只對"讀"操作有效,對於"寫"操作無效,即仍然可以修改看不到的字段