基於open_distro的ES文檔訪問控制


前言

open distro for elasticsearch 是由亞馬遜AWS支持的基於Apache License,Version 2.0協議的100%開源的Elasticsearch發行版。與Elastic公司官方的Elasticsearch版本最大的區別是:剔除了基於elastic協議發布的xpack插件,增加了開源插件。新增插件功能包括安全、告警、索引生命周期管理、性能分析、SQL等企業級功能。簡單理解就是集成了開源版xpack插件的elasticsearch。

文檔級別安全控制

在一些場景下,除了集群和索引級別的權限控制,我們希望控制的粒度更細一些,希望不同的用戶只能看到自己有權限訪問的文檔,而不是一個索引中的所有文檔,open distro 提供了document level 的訪問控制,我們可以在創建角色時,指定dls屬性來實現。

配置方式

文檔級別(document level)的權限控制,是在創建角色(role)時在dls中指定的,因此也有三種方式來配置:

  • 通過配置文件初始化

    在ES_HOME/plugins/opendistro_security/securityconfig/roles.yml 中設置

  • 通過kibana的圖形話界面配置

    在kibana ->Security 模塊 -> Roles -> Index Permissions -> Document Level Security Query中配置

  • 通過REST API 配置

    配置文件初始化和kibana圖形話界面的配置方式,不方面在開發中進行腳本管理和現場實施。REST API方式很好的解決了這些問題。

REST API 設置步驟

  • 創建具有文檔權限的角色

    PUT _opendistro/_security/api/roles/public_data
    {
      "cluster_permissions": [
        "*"
      ],
      "index_permissions": [{
        "index_patterns": [
          "pub*"
        ],
        "dls": "{\"term\": { \"public\": true}}",
        "allowed_actions": [
          "read"
        ]
      }]
    }
    
  • 創建用戶,並給用戶賦予該角色

    PUT /_opendistro/_security/api/internalusers/public_user
    {
      "password":"123456"
    }
    
    PUT /_opendistro/_security/api/rolesmapping/public_data
    {
      "users":["public_user"]
    }
    

    public_user 用戶就只能查看pub開頭的索引,且文檔中public 屬性為true的字段

注意事項

  • 所有能在_search 的query中使用的語法均能在dls中使用,但是需要做字符轉義,如:雙引號轉換為反斜線加雙引號,且dls不建議寫太復雜

  • 對於文檔中沒有 public 屬性的文檔,那么用戶看不到該文檔

  • 文檔級權限之間的關系是or的關系,比如public_data_2角色只能查看name為wangzhen的文檔,public_data角色只能查看public 為true的文檔,用戶public_user 擁有public_data和public_data_2兩個角色,那么public_user能查看public為true的文檔或者name為wangzhen的文檔。

  • 如果public_data_3角色沒有設置dls,而public_data設置了dls,那么擁有這兩個角色的用戶只能查看dls設置的文檔(和xpack的默認表現不一致)


免責聲明!

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



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