1、Search Guard 簡介html
Search Guard 是 Elasticsearch 的安全插件。它爲後端系統(如LDAP或Kerberos)提供身份驗證和受權,並向Elasticsearch添加審覈日誌記錄和文檔/字段級安全性。java
Search Guard 全部基本安全功能都是免費的,而且內置在Search Guard中。 Search Guard 支持OpenSSL並與Kibana和logstash配合使用。node
基本安全功能包括:git
2、安裝Search Guard插件github
對於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 目錄被建立。架構
3、配置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在每一個節點上是特定的。
三、配置插件
中止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加密的。以上密碼是由腳本自動生成,務必要修改成本身的密碼。
注意:每一個節點的密鑰庫文件不一樣,密碼也不相同,可是信任庫文件相同,密碼也相同。
四、配置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請求。
五、導入 Root CA
爲了使您的瀏覽器信任咱們生成的證書,您須要導入 Root CA,而且對於某些瀏覽器或操做系統,還要信任此證書。雙擊root-ca.crt便可安裝證書。
使用https訪問節點以下圖所示:
六、客戶端身份驗證(可選)
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節點,瀏覽器會詢問咱們須要選擇的證書。
4、配置管理證書
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。