基於xpack的ES用戶管理(授權)


基於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.enabledxpack.security.dls_fls.enabledtrue

在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可以看到所有的文檔)
  • 文檔級和字段級的權限只對"讀"操作有效,對於"寫"操作無效,即仍然可以修改看不到的字段


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM