Elasticsearch 5.0 安裝 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.0.0-9
在安裝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基礎架構,可以自己生成所需的證書。
1)TLS生成服務,填寫相關信息便可將相關信息發送到個人郵箱中。鏈接地址為:https://floragunn.com/tls-certificate-generator/
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流量,添加如下配置:
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/ tools/sgadmin.sh -ts /etc/elasticsearch/truststore.jks -tspass 4461255a948bd9777b44 -ks sgconfig/sgadmin-keystore.jks -kspass d98a49bf3242b6873377 -cd sgconfig/ -icl -nhnv -h 10.10.51.240
此時訪問ES節點是就要求輸入賬號密碼,默認賬號密碼在 sgconfig/sg_internal_users.yml 中,可以通過工具 tools/hash.sh 設置密碼。
更多sgadmin工具命令可以查看:https://github.com/floragunncom/search-guard-docs/blob/master/sgadmin.md
查看客戶端身份驗證信息,紅框中便是證書的DN信息:
至此,已經成功在Elasticsearch5上安裝Search Guard 5。
Elasticsearch 5.0 安裝 Search Guard 5 插件