前言
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的默認表現不一致)
