1. 程式人生 > >ElasticSearch2.4.2安裝search-guard外掛

ElasticSearch2.4.2安裝search-guard外掛

(1)環境;
elasticsearch 2.4.2

(2):github上分支沒有2.4.x版本的分支,筆者一度找了好久才找到下面一個版本關係對應表
elasticsearch與search-guard以及search-guard-ssl:

這裡寫圖片描述

(3): 進入elasticsearch的bin目錄,執行命令安裝search-guard

./plugin install -b com.floragunn/search-guard-2/2.4.2.10

這裡寫圖片描述
注:當es的版本大於2.2時,安裝過程中可能會有WARNING提示,這個不影響。其它ES版本,請對照表格替換命令列後的版本號即可。

(4):安裝 search-guard-ssl

./plugin install -b com.floragunn/search-guard-ssl/2.4.2.10

(5)安裝完成後,會在plugins目錄中生成兩個目錄
這裡寫圖片描述
(6):下載 searchguard-ssl 的包,裡面包含自動建立證書的指令碼:

wget https://github.com/floragunncom/search-guard-ssl/archive/v2.4.2.19.zip
unzip v2.4.2.19.zip 
cd search-guard-ssl-2.4.2.19/example-pki-scripts/

這裡寫圖片描述

編輯指令碼 vim example.sh

原始example.sh檔案內容:

set -e
./clean.sh
./gen_root_ca.sh capass changeit
./gen_node_cert.sh 0 changeit capass && ./gen_node_cert.sh 1 changeit capass &&  ./gen_node_cert.sh 2 changeit capass
./gen_client_node_cert.sh spock changeit capass
./gen_client_node_cert.sh kirk changeit capass

修改後example.sh中檔案內容

set -e
./clean.sh
./gen_root_ca.sh elastic elastic
./gen_node_cert.sh 181 elastic elastic
./gen_node_cert.sh 182 elastic elastic
./gen_node_cert.sh 183 elastic elastic
./gen_client_node_cert.sh admin elastic elastic
cp truststore.jks node-181-keystore.jks /a/apps/elasticsearch-2.4.2/config/
cp truststore.jks admin-keystore.jks /a/apps/elasticsearch-2.4.2/plugins/search-guard-2/sgconfig/

執行 ./example.sh命令,會在當前目錄生成多個證書檔案
這裡寫圖片描述

(7):編輯elasticsearch-2.4.2/config/elasticsearch.yml配置檔案 新增如下內容

#-------------------search guard config--------------------------
security.manager.enabled: false
searchguard.authcz.admin_dn:
   - "CN=admin, OU=client, O=client, L=Test, C=DE"
#上面的admin是要和example.sh中的對應上

#-------------------search guard ssl----------------------------------------
#------------------------transport layer SSL------------------------------------
searchguard.ssl.transport.enabled: true
searchguard.ssl.transport.keystore_filepath: node-181-keystore.jks
searchguard.ssl.transport.keystore_password: elastic
searchguard.ssl.transport.truststore_filepath: truststore.jks
searchguard.ssl.transport.truststore_password: elastic
searchguard.ssl.transport.enforce_hostname_verification: false
searchguard.ssl.transport.resolve_hostname: false
searchguard.ssl.http.enabled: true       #設定成true瀏覽器也無法訪問,測試請改為false
searchguard.ssl.http.keystore_filepath: node-181-keystore.jks
searchguard.ssl.http.keystore_password: elastic
searchguard.ssl.http.truststore_filepath: truststore.jks
searchguard.ssl.http.truststore_password: elastic
searchguard.allow_all_from_loopback: true

(8):在elasticsearch根目錄 執行命令 將配置插入

./plugins/search-guard-2/tools/sgadmin.sh -cn 叢集名稱 -h hostname -cd plugins/search-guard-2/sgconfig -ks plugins/search-guard-2/sgconfig/admin-keystore.jks -kspass elastic -ts plugins/search-guard-2/sgconfig/truststore.jks -tspass elastic -nhnv

./plugins/search-guard-2/tools/sgadmin.sh -cn admin -h 172.100.50.181-cd plugins/search-guard-2/sgconfig -ks plugins/search-guard-2/sgconfig/admin-keystore.jks -kspass elastic -ts plugins/search-guard-2/sgconfig/truststore.jks -tspass elastic -nhnv

這裡寫圖片描述

需要注意:
如果提示沒有操作許可權,則必須先把hash.sh檔案的許可權開放

chmod -R 777 ./plugins/search-guard-2/tools/sgadmin.sh

如成功寫入配置,則會顯示以下資訊:
這裡寫圖片描述

9):search guard配置檔案配置
search-guard中的使用者許可權管理

相關配置檔案的介紹

searchguard 主要有5個配置檔案在plugins/search-guard-2/sgconfig 下:

1、sg_config.yml:主配置檔案不需要做改動。

2、sg_internal_users.yml:本地使用者檔案,定義使用者密碼以及對應的許可權。

3、sg_roles.yml:許可權配置檔案

4、sg_roles_mapping.yml:定義使用者的對映關係

5、sg_action_groups.yml:定義許可權

修改內建使用者密碼,然後再執行一次search guard 配置寫入命令。

1.則先用plugins/search-guard-2/tools/hash.sh生成hash字串,生成密碼:
這裡寫圖片描述
先修改許可權。再生成密碼。
2:將字串複製到sg_internal_users.yml檔案的對應使用者密碼位置,在密碼下面記得寫入原密碼的提示,難保你那天忘記了。

vim plugins/search-guard-2/sgconfig/sg_internal_users.yml

這裡寫圖片描述

3:新增使用者許可權
vim sg_roles_mapping.yml
這裡寫圖片描述

4:重新寫入配置檔案
先回到elasticsearch的安裝資料夾
執行命令

./plugins/search-guard-2/tools/sgadmin.sh -cn admin -h 172.100.50.181-cd plugins/search-guard-2/sgconfig -ks plugins/search-guard-2/sgconfig/admin-keystore.jks -kspass elastic -ts plugins/search-guard-2/sgconfig/truststore.jks -tspass elastic -nhnv

注:admin 為叢集名稱。

番外篇:
叢集部署:
配置好一臺機器後,需要把這臺機器中的plugins資料夾中的下面兩個資料夾cp到其它節點
這裡寫圖片描述
然後把
這裡寫圖片描述

這兩個檔案cp到對應機器的elasticsearch安裝目錄的config資料夾下。
修改其它節點的elasticsearch.yml配置檔案,參考本機器。至此,叢集部署成功。

測試問題:
(1):叢集名稱不能包含“-”符號,如es-kz,這個叢集名稱無法生成searchguard索引。
(2):測試時,把searchguard.ssl.http.enabled: true設定成false,設定成true瀏覽器也無法訪問
(3):如果elasticsearch添加了searchguard許可權控制,則kibana,logstash等就不能再連線上es了,請參考下兩篇文章解決該問題