Elasticsearch 5.x 安裝 Search Guard 5 外掛
一、Search Guard 簡介
Search Guard 是 Elasticsearch 的安全外掛。它為後端系統(如LDAP或Kerberos)提供身份驗證和授權,並向Elasticsearch新增稽核日誌記錄和文件/欄位級安全性。
Search Guard 所有基本安全功能都是免費的,並且內建在Search Guard中。 Search Guard 支援OpenSSL並與Kibana和logstash配合使用。
基本安全功能包括:
- 通過SSL / TLS進行節點到節點加密
- 通過HTTPS(SSL / TLS)安全REST層
- 靈活的REST層訪問控制(基於使用者/角色;基於別名,索引和型別)
- 靈活的傳輸層訪問控制(基於使用者/角色;基於別名,索引和型別)
- HTTP基本認證
- HTTP代理身份驗證
- HTTP SSL/客戶端證書身份驗證
- X-Forwarded-For(XFF)支援
- 內部認證/授權
- 匿名登入/未認證訪問
- 使用者模擬
- Tribe 節點支援
二、安裝Search Guard外掛
對於Search Guard 5 只需要安裝一個外掛,即 Search Guard 。SSL層與主外掛捆綁在一起。
在Elasticsearch的安裝目錄執行:
bin/elasticsearch-plugin install -b com.floragunn:search-guard-5:5.5.1-15
在安裝Search Guard時將看到以下警告訊息,對於某些ES版本,您需要通過按“y”主動確認它:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: plugin requires additional permissions @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * java.lang.RuntimePermission accessClassInPackage.sun.misc * java.lang.RuntimePermission accessDeclaredMembers * java.lang.RuntimePermission getClassLoader* java.lang.RuntimePermission loadLibrary.* * java.lang.RuntimePermission setContextClassLoader * java.lang.RuntimePermission shutdownHooks * java.lang.reflect.ReflectPermission suppressAccessChecks * java.security.SecurityPermission getProperty.ssl.KeyManagerFactory.algorithm * java.util.PropertyPermission java.security.krb5.conf write * java.util.PropertyPermission javax.security.auth.useSubjectCredsOnly write * javax.security.auth.AuthPermission doAs * javax.security.auth.AuthPermission modifyPrivateCredentials * javax.security.auth.kerberos.ServicePermission * accept See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html for descriptions of what these permissions allow and the associated risks.
當看到 Installed search-guard-5 時,說明安裝成功,在Elasticsearch的安裝目錄plugin可以看到 search-guard-5 目錄被建立。
三、配置TLS/SSL
1.生成金鑰庫和信任庫
要使SSL正常工作,您必須擁有一個金鑰庫和一個包含每個節點上所有必需的證書和金鑰的信任庫。Search Guard 提供了兩種方法生成證書,如果瞭解TLS或者已經有PKI基礎架構,可以自己生成所需的證書。
2)PKI 例項指令碼,要求必須安裝OpenSSL且版本至少為1.0.1k。指令碼將生成包含生成的根證書的信任庫檔案。 信任庫檔案可以在所有節點上使用。
下載解壓5.0.0版本的 search-guard-ssl ,在example-pki-scripts目錄中即為相對應的指令碼。通過執行 example.sh 將自動生成證書。如果由於任何原因需要重新執行指令碼,在同一目錄中執行./clean.sh,即可自動刪除所有生成的檔案。
官方提供的指令碼固定CA證書以及節點證書的密碼分別為:capass、changeit,個人修改官方指令碼將密碼改為40位、20位的隨機字串,並將密碼寫入到Readme.txt中,指令碼下載地址:example-pki-scripts.tar.gz
2.複製金鑰庫和信任庫檔案
在每個節點上,將keystore.jks和truststore.jks檔案放在執行Elasticsearch的使用者可讀的目錄中,這裡放在了Elasticsearch的配置檔案目錄中。並且給予Elasticsearch使用者讀取檔案許可權。keystore.jks在每個節點上是特定的。
3、配置外掛
停止Elasticsearch節點,並在Elasticsearch的配置檔案中新增
searchguard.ssl.transport.keystore_filepath: node-0-keystore.jks searchguard.ssl.transport.keystore_password: e15fdd1f936e972f59c9 searchguard.ssl.transport.truststore_filepath: truststore.jks searchguard.ssl.transport.truststore_password: 4461255a948bd9777b44 searchguard.ssl.transport.enforce_hostname_verification: false
推薦每個Elasticsearch節點使用不同的金鑰庫檔案(node-0-keystore.jks)。此時節點之間的流量是TLS加密的。以上密碼是由指令碼自動生成,務必要修改為自己的密碼。
注意:每個節點的金鑰庫檔案不同,密碼也不相同,但是信任庫檔案相同,密碼也相同。
4、配置HTTPS
加密通過REST-API的http流量,新增如下配置:
(如果用 http訪問的話,searchguard.ssl.http.enabled:false)
searchguard.ssl.http.enabled: true searchguard.ssl.http.keystore_filepath: node-0-keystore.jks searchguard.ssl.http.keystore_password: e15fdd1f936e972f59c9 searchguard.ssl.http.truststore_filepath: truststore.jks searchguard.ssl.http.truststore_password: 4461255a948bd9777b44
此時Elasticsearch將不再接受http請求。
5、匯入 Root CA
為了使您的瀏覽器信任我們生成的證書,您需要匯入 Root CA,並且對於某些瀏覽器或作業系統,還要信任此證書。雙擊root-ca.crt即可安裝證書。
使用https訪問節點如下圖所示:
6、客戶端身份驗證(可選)
HTTPS通常只驗證伺服器標識,Search-Guard-SSL也提供了僅接受來自可信客戶端的HTTPS連線。
在 elasticsearch.yml 配置檔案中新增如下配置,開啟客戶端認證:
searchguard.ssl.http.clientauth_mode: REQUIRE
重新啟動節點後,請再次嘗試通過瀏覽器進行連線。你可以看到類似“基於證書的身份驗證失敗”或者“ERR_CONNECTION_CLOSED”的報錯資訊。
這意味著SG SSL要求您的瀏覽器標識自己。由於到目前為止,還沒有為此目的安裝任何證書,所以SG SSL拒絕連線。
和匯入Root CA相同,需要安裝讓ES節點信任的證書,指令碼 example.sh 也為我們生成了此類證書,證書的名稱為kirk、spock,使用與節點證書相同的Root CA證書生成,並且生成了不同合適證書提供給不同的瀏覽器和作業系統。
匯入證書後再次訪問ES節點,瀏覽器會詢問我們需要選擇的證書。
四、配置管理證書
Search Guard的幾乎所有配置設定都儲存在Elasticsearch本身中,並且可以在執行時使用sgadmin命令列工具進行更改。使用sgadmin工具將配置設定載入到Search Guard索引中。 sgadmin通過客戶端SSL證書將其自身標識為SG安全的Elasticsearch叢集。稱之為管理員證書。
務必將證書的DN配置到 elasticsearch.yml 中
searchguard.authcz.admin_dn:
- CN=sgadmin,OU=client,O=client,L=test,C=DE
可以配置多個管理證書。
sgadmin工具在 $ES_HOME/plugins/search-guard-5/tools 目錄,並賦予工具執行許可權 chmod+x tools/*.sh ,此時可以在任意節點執行指令碼,配置將被推送到節點,並根據分片複製到其他節點。
sgadmin基本引數需要指定key和truststore,以及相應密碼和配置檔案目錄。可以通過 -cn 選項指定叢集名稱,或者使用 -icl 忽略叢集名稱。
cd $ES_HOME/plugins/search-guard-5/
plugins/search-guard-5/tools/sgadmin.sh -ts plugins/search-guard-5/sgconfig/truststore.jks -tspass password123 -ks plugins/search-guard-5/sgconfig/sgadmin-keystore.jks -kspass password123 -cd plugins/search-guard-5/sgconfig/ -cn es-cluster -nhnv -h 192.168.1.45 -p 9300
此時訪問ES節點是就要求輸入賬號密碼,預設賬號密碼在 sgconfig/sg_internal_users.yml 中,可以通過工具 tools/hash.sh 設定密碼。
檢視客戶端身份驗證資訊,紅框中便是證書的DN資訊:
至此,已經成功在Elasticsearch5上安裝Search Guard 5。