淺談Elasticsearch的AAA (I)

wyzsk發表於2020-08-19
作者: 淡定淞淞 · 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支援比較好,兩個版本安裝方法不同,

  • es 1.5

直接使用外掛安裝 ,

 bin/plugin -i com.floragunn/search-guard/0.5
  • es1.6

首先需要安裝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中。

  1. 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.