作者:
淡定淞淞
·
2015/08/18 16:24
0x00 前言
Elasticsearch(以下簡稱es)被越來越多的公司廣泛使用,而其本身安全問題也備受關注,最近出現的安全問題比較多,例如影響比較大的漏洞有CVE-2014-3120和CVE-2015-1427。
這些漏洞和es本身沒有認證授權機制有很大關係,同時公司內部多業務使用使用同一套es叢集的情況非常多,如何做好認證授權的管理的問題尤為凸顯。
官方竟然將安全模組Shield作為收費模組,所以普及率並不高。本著為公司省下仨瓜倆棗的精神尋找其他的解決方案。實現過程中走了一些彎路,記錄下來以方便其他遇到這些問題的同仁。
0x01 需求
隨著es的普及,對安全的需求越來越多,例如:
- 賬號認證,解決es匿名訪問的問題。
- 授權管理,對不同的賬號按照不同維度分配(主要是索引)訪問許可權。
- 只讀許可權,此條需求來源於 :某個Dashboard想分享給其他人,但又不想讓其他人有許可權修改。
- 統一認證,單點登入。
0x02 方案選擇
需求已確定,經過一番尋找得到以下幾種方案備選。、
elasticsearch-http-basic
:優點:此方案部署簡單快速,可以解決從無到有的過程,實現了賬號認證和ip白名單認證功能,缺點:功能單一,只解決了#1需求。
kibana-authentication-proxy
:優點:此方案是針對kibana實現的認證,優點是該方案支援“Google OAuth2, BasicAuth(multiple users supported) and CAS Authentication
”解決了需求#4中的單點登入的需求,配合方案#1中的ip白名單能基本解決需求#1和#4.缺點:目前只支援到kibana3。
Shield
:優點:功能強大,文件豐富。缺點:收費。
search-guard
:優點:功能豐富的免費模組,能夠很好的解決需求中所有問題(除了#4中的單點登入)。缺點:部署和配置稍複雜,文件較少,門檻較高。
大家應該能猜到最終的選擇了,沒錯就是方案#4。
0x03 安裝和配置
準備工作
目前官方對es1.5和1.6支援比較好,兩個版本安裝方法不同,
直接使用外掛安裝 ,
bin/plugin -i com.floragunn/search-guard/0.5
首先需要安裝maven,
#!bash
wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.3.3/binaries/apache-maven-3.3.3-bin.tar.gz
解壓後將bin目錄新增到環境變數PATH中。
下載編譯相關依賴
git clone -b es1.6 https://github.com/floragunncom/search-guard.git cd search-guard mvn package -DskipTests bin/plugin -u file:./target/search-guard-16-0.6-SNAPSHOT.jar -i search-guard
配置
Search guard
配置分為2部分,一部分是elasticsearch.yml
以及logging.yml
檔案。另一部分儲存在es中。
elasticsearch.yml
主要內容包括search guard
的一些開關,ssl
支援的配置,認證方式,許可權控制的filter
等。 下面我們來完成一個最小化的配置: 直接將git中searchguard_config_template.yml
內容貼上到elasticsearch.yml
, 然後開啟
searchguard.allow_all_from_loopback: true
以方便本地除錯。 另外需要注意的一個選項是
searchguard.key_path: /path/key
searchguard_node.key
檔案的路徑。 預設配置已開啟basic認證,
searchguard.authentication.authentication_backend.impl: com.floragunn.searchguard.authentication.backend.simple.SettingsBasedAuthenticationBackend searchguard.authentication.authorizer.impl: com.floragunn.searchguard.authorization.simple.SettingsBasedAuthorizator searchguard.authentication.http_authenticator.impl: com.floragunn.searchguard.authentication.http.basic.HTTPBasicAuthenticator
設定使用者名稱和密碼
searchguard.authentication.settingsdb.user.