1、安裝search guard插件必需要安裝兩部分:node
①search-guard-xxgit
②search-guard-sslgithub
(XX指的是與elasticsearch引擎對應的版本)vim
github地址:bash
https://github.com/floragunncom/search-guard
這裏以elasticsearch 2.3.5版本爲例app
進入到elasticsearch安裝目錄(若是是用RPM包安裝的,默認位置是,也可用命令whereis elasticsearch查看安裝位置)dom
cd /usr/share/elasticsearch
安裝方法:curl
(1)search-guardelasticsearch
elasticsearch版本:elasticsearch 2.x工具
bin/plugin install -b com.floragunn/search-guard-2/<version>
elasticsearch 2.3.5版本:
bin/plugin install -b com.floragunn/search-guard-2/2.3.5.10
elasticsearch版本:elasticsearch 5.x
bin/elasticsearch-plugin install -b com.floragunn:search-guard-5:<version>
(2)search-guard-ssl
elasticsearch 2.x
bin/plugin install -b com.floragunn/search-guard-ssl/<version>
elasticsearch 2.3.5版本:
bin/plugin install -b com.floragunn/search-guard-ssl/2.3.5.19
elasticsearch 5.x
bin/elasticsearch-plugin install -b com.floragunn:search-guard-ssl:<version>
注意事項:
當es的版本大於2.2時,安裝過程當中可能會有以下提示:
這個是正常現象,只要看到有如下提示就表示安裝成功:
Installed search-guard-ssl into /usr/share/elasticsearch/plugins/search-guard-ssl
Installed search-guard-2 into /usr/share/elasticsearch/plugins/search-guard-2
2、生成證書文件
1.下載search guard 源碼工具,裏面包含證書生成工具
git clone https://github.com/floragunncom/search-guard-ssl.git
2.切換到search guard ssl 源碼目錄,進入example-pki-scripts文件夾,裏面有3個腳本
cd search-guard-ssl/example-pki-scripts
gen_client_node_cert.sh 建立客戶端證書
gen_node_cert.sh 建立節點證書
gen_root_ca.sh 建立根證書
2.進入example-pki-scripts/etc目錄,裏面是證書生成時的一些配置文件,可根據須要修改相應的信息
root-ca.conf 根證書配置
signing-ca.conf 簽名證書配置
其中自定義的信息以下:
0.domainComponent = "www.test.com」 域名 1.domainComponent = "www.test.com" 域名 organizationName = "Test" 組織名稱 organizationalUnitName = "Test Root CA" 組織單位名稱 commonName = "Test Root CA" 通用名稱
以上信息隨便填寫,只要保證生成證書時跟證書、簽名證書中的信息一致便可
3.生成證書
返回到example-pki-scripts目錄下,修改example.sh文件:
修改以後以下:
#!/bin/bash set -e ./clean.sh ./gen_root_ca.sh 12345678 12345678 ./gen_node_cert.sh 0 12345678 12345678&& ./gen_node_cert.sh 1 12345678 12345678 && ./gen_node_cert.sh 2 12345678 12345678 ./gen_client_node_cert.sh test 12345678 12345678 ./gen_client_node_cert.sh test 12345678 12345678
參數說明:
./gen_root_ca.sh 12345678 12345678
第一個參數爲CA_PASS,即CA密碼(根證書密碼)
第二個參數爲TS_PASS,即TS密碼(truststore,信任證書密碼)
./gen_node_cert.sh 0 12345678 12345678
第一個參數爲node編號,生成證書後的文件名爲node-0*
第二個參數爲KS_PASS(keystore文件密碼)
第三個參數爲CA_PASS
./gen_client_node_cert.sh test 12345678
第一個參數爲客戶端節點名稱,生成證書後的文件名爲test*
第二個參數爲KS_PASS
第三個參數爲CA_PASS
4.運行example.sh文件,會在當前目錄下生成各類證書文件:
sh example.sh
3、配置
1.證書上傳到elasticsearch
將example-pki-scripts文件夾中的node-0-keystore.jks和truststore.jks複製到elasticsearch的配置目錄中(/etc/elasticsearch)
cp node-0-keystore.jks /etc/elasticsearch cp truststore.jks /etc/elasticsearch
將example-pki-scripts文件夾中的test-keystore.jks和truststore.jks複製到elasticsearch程序目錄下的plugins/search-guard-2/sgconfig下,若是這個節點是主節點,則全部節點的search guard配置都從這個節點中配置,而後分發到其它節點中
cp test-keystore.jks /usr/share/elasticsearch/plugins/search-guard-2/sgconfig/ cp truststore.jks /usr/share/elasticsearch/plugins/search-guard-2/sgconfig/
2.修改elasticsearch配置文件:
vim /etc/elasticsearch/elasticsearch.yml
修改如下配置:
17 cluster.name: test 23 node.name: node-0
54 network.host: 0.0.0.0
增長如下配置:
# search-guard配置 # 配置ssl searchguard.ssl.transport.enabled: true searchguard.ssl.transport.keystore_filepath: node-0-keystore.jks searchguard.ssl.transport.keystore_password: 12345678 searchguard.ssl.transport.truststore_filepath: truststore.jks searchguard.ssl.transport.truststore_password: 12345678 searchguard.ssl.transport.enforce_hostname_verification: false searchguard.ssl.transport.resolve_hostname: false # 配置http # http配置,這裏我只是爲了測試方便,配置完,應該設置爲true searchguard.ssl.http.enabled: false searchguard.ssl.http.keystore_filepath: node-0-keystore.jks searchguard.ssl.http.keystore_password: 12345678 searchguard.ssl.http.truststore_filepath: truststore.jks searchguard.ssl.http.truststore_password: 12345678
searchguard.allow_all_from_loopback: true # 這裏注意,下面的配置必定要和籤的客戶端證書一致,不然不能插入配置 searchguard.authcz.admin_dn: - CN=test, OU=client, O=client, L=Test, C=DE
注意事項:
配置文件中的全部配置項開頭必需要留一個空格符,不然會啓動不了elasticsearch,這個是配置文件的格式
3.配置完後重啓elasticsearch
systemctl restart elasticsearch
systemctl status elasticsearc
4、將配置寫入運行中的elasticsearch
進入到elasticsearch安裝目錄中
cd /usr/share/elasticsearch/
運行以下命令將配置寫入到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 password -ts plugins/search-guard-2/sgconfig/truststore.jks -tspass password -nhnv
hostname:指的是elasticsearch的elasticsearch.yml配置文件中 network.host 設置的值
根據上面的配置,輸入的命令以下:
./plugins/search-guard-2/tools/sgadmin.sh -cn test -h 0.0.0.0 -cd plugins/search-guard-2/sgconfig -ks plugins/search-guard-2/sgconfig/test-keystore.jks -kspass 12345678 -ts plugins/search-guard-2/sgconfig/truststore.jks -tspass 12345678 -nhnv
須要注意:
若是提示沒有操做權限,則必須先把hash.sh文件的權限開放
chmod -R 777 plugins/search-guard-2/tools/sgadmin.sh
的是這時候elasticsearch的服務必須是運行狀態。若是插入配置失敗,檢查配置文件,好比前面提到的,生成客戶端證書的時候dname的參數 必須與配置文件中searchguard.authcz.admin_dn:下的認證列表進行對應。
如成功寫入配置,則會顯示如下信息:
5、search guard 配置文件介紹
search-guard中的用戶權限管理
相關配置文件的介紹
searchguard 主要有5個配置文件在plugins/search-guard-2/sgconfig 下:
一、sg_config.yml:主配置文件不須要作改動。
二、sg_internal_users.yml:本地用戶文件,定義用戶密碼以及對應的權限。
三、sg_roles.yml:權限配置文件
四、sg_roles_mapping.yml:定義用戶的映射關係
五、sg_action_groups.yml:定義權限
修改內置用戶密碼,而後再運行一次search guard 配置寫入命令。
1.則先用plugins/search-guard-2/tools/hash.sh生成hash字符串,生成密碼:
cd /usr/share/elasticsearch/
plugins/search-guard-2/tools/hash.sh -p 123456
若是提示沒有操做權限,則必須先把hash.sh文件的權限開放
chmod -R 777 plugins/search-guard-2/tools/hash.sh
得到哈希生成後的密碼
2.將字符串複製到sg_internal_users.yml文件的對應用戶密碼位置,在密碼下面記得寫入原密碼的提示,難保你那天忘記了。
vim plugins/search-guard-2/sgconfig/sg_internal_users.yml
3.添加用戶權限
vim /usr/share/elasticsearch/plugins/search-guard-2/sgconfig/sg_roles_mapping.yml
在39行處的sg_all_access添加你新增的用戶名,就得到全部權限了
4.從新寫入配置
先回到elasticsearch的安裝文件夾
cd /usr/share/elasticsearch/
./plugins/search-guard-2/tools/sgadmin.sh -cn test -h 0.0.0.0 -cd plugins/search-guard-2/sgconfig -ks plugins/search-guard-2/sgconfig/test-keystore.jks -kspass 12345678 -ts plugins/search-guard-2/sgconfig/truststore.jks -tspass 12345678 -nhnv
5.測試
curl -XGET "http://shifu:123456@127.0.0.1:9200"
若是密碼設置成功則顯示
如今每次想訪問你網站的9200端口都必需要有搜索認證的保護了。