前言
Elasticsearch(以下簡稱ES)廣泛應用于互聯(lián)網企業(yè)(Github,Netflix,DigitalOcean...)潦匈,ES并未提供免費的安全插件來守護ES集群,對于一家商業(yè)公司這么做無可厚非赤惊,但這更說明ES安全模塊的重要性寒屯。本文將簡單介紹ES、ES的插件體系并著重介紹ES安全模塊的實現处面。
ES 簡介
ElasticSearch 是一個分布式魂角,實時智绸,全文搜索引擎访忿。底層實現基于Lucene全文搜索引擎并提供了RESTful接口實現斯稳,數據以JSON文檔的格式存儲索引挣惰,不需要預先規(guī)定范式。
通用的應用場景包括:搜索引擎珍语、NOSQL存儲竖幔、ELK。
ES除了充分利用的Lucene提供的全文搜索功能還擴展了以下功能:
可搜索的分布式文件存儲
實時分析的分布式搜索引擎
橫向擴展非常容易募逞,可處理PB級數據
ES 插件體系
和很多系統(tǒng)一樣饿幅,ES也通過插件來增強系統(tǒng)核心功能。ES主要支持兩種類型的插件:
Java插件 (Shield,SearchGuard)
該類型插件只包含Jar文件透乾,通過攔截請求實現功能磕秤,且須安裝在集群中的每個節(jié)點上并且需要重新啟動后才能生效。
Site插件 (kopf,marvel)
site插件主要包含WEB資源文件汉操,如Js蒙兰、HTML、CSS采缚,通過ES內嵌的服務器挠他,可直接訪問http://es-cluster:9200/_plugin/plugin 來查看相應的插件。
基于插件的安全實現
根據ES提供的插件機制贸呢,我們可以通過插件攔截請求實現以下安全控制:
攔截、認證HTTP怔鳖、Transport請求
用戶權限驗證
審計功能
節(jié)點通信證書加密
SearchGuard簡介
Search Guard 2(以下簡稱SG2)是一個提供了加密败砂、認證魏铅、授權功能的ES開源插件(依賴Search Guard SSL插件)并且提供了細粒度到文檔坚芜、字段級別的權限控制鸿竖,是商業(yè)版Shield插件的開源替代。SG和Shield的實現大同小異缚忧,通過分析SG即可了解ES的安全模塊的設計與實現 闪水。另:SG1版已廢棄,不推薦使用球榆。
下面簡單介紹集成配置和關鍵源碼(偽代碼)簡析持钉。
配置
安裝SG、SG-SSL插件
bin/plugin install -b com.floragunn/search-guard-ssl/version
bin/plugin install -b com.floragunn/search-guard-2/version
證書文件可自行提供或根據seaerch_guard_ssl提供的example-pki-scripts腳本文件生成始腾。
ES配置
更新權限管理信息
生成新密碼并替換sg_internal_users.yml
plugins/search-guard-2/tools/hasher.sh -p mycleartextpassword
啟動ES空执,在sgconfig目錄下設置好角色脆烟、用戶權限,運行腳本將信息寫入ES集群
plugins/search-guard-2/tools/sgadmin.sh -cd plugins/search-guard-2/sgconfig/ -ks plugins/search-guard-2/sgconfig/keystore.jks -ts plugins/search-guard-2/sgconfig/truststore.jks -nhnv
關鍵源碼簡析
元數據
SG元數據在ES中的存儲位置: searchguard.[ config | roles | rolesmapping | internalusers | actiongroups ]
用戶認證
Transport認證
SG插件啟動時注冊SearchGuardFilter,并設置在filter chain中的執(zhí)行順序(from lowest order to highest)為Integer.MIN_VALUE驼抹,即第一個被執(zhí)行框冀,保證所有請求都會被SG攔截驗證。
HTTP認證
BackendRegistry中注冊REST請求預處理器-SearchGuardRestFilter攔截處理REST請求
權限管理
YAML格式權限配置文件,支持通配符和action group設置權限
過濾掉只能由admin和internal user等可以訪問的索引,然后再角色的權限設置(有通配符和無通配符的權限會分開處理)對普通用戶的action進行權限驗證
審計
記錄用戶在ES集群中的操作日志并存儲到ES中绣硝,以單獨的插件提供審計模塊撑刺,若需要審計功能則需要集將其加到SG2的依賴中。
總結
本文簡單介紹了ES甫菠、ES插件體系以及基于該插件機制的SG的特性寂诱、配置以及關鍵源碼的簡單分析安聘,還有一些特性值得我們去研究,比如DLS带迟、FLS級別的控制囱桨,更多樣的認證方式,與kibana舍肠、logstash的集成等翠语,希望大家能夠以更安全、方便的使用ES肌括。
本文作者:卜玉凱(點融黑幫),目前就職于點融網支付組黑滴、典型軟件工程師,專注于支付業(yè)務菜谣。愛好:夜跑晚缩、羽毛球。