二、開發中配置偽集群的TLS和身份驗證(基礎)
很詳細的配置,支持博客主【https://knner.wang/】 鏈接
我這里用到的是基礎板(免費的),自動申請Basic License,X-pack 的免費Auth和Node間的SSL。
1.創建三個Elasticsearch7.10的節點
在一個服務器上,創建三個節點。解壓文件,復制一個es-slave01和es-slave02,其中一個命名為master節點,好區分。
2.配置TLS和身份驗證文件
在安全的集群中,Elastic節點在與其他節點通信時使用證書來標識自己。這個集群必須驗證這些證書的真實性。推薦的方法
是信任指定的CA身份認證文件,因此,當節點加入到集群中時,它只需都擁有相同的CA簽署的證書,
這里第一步是生成證書,然后把證書分發到子節點(好區分),其中一個命名為master節點。
在這個過程中,我們需要證書讓節點安全的通信,會用到elasticsearch-certutil
的命令,此命令可以很快的生成證書。
流程:
ca證書--》根據ca證書,生成node證書--》復制node證書到其他節點--》生成用戶密碼
1.master主節點生成node證書
- 在config目錄下
[~choleen config]mkdir certs
- 在linux系統中,
cd
進入elastic的bin目錄下,這個可以不啟動執行,運行此命令
[~choleen bin]./elasticsearch-certutil cert -out elastic-certificates.p12 -pass ""
對於這個命令elasticsearch-certutil
,可以輸入--help
來查看幫助,我們來看它給解釋:
命令 | 含義 |
---|---|
elasticsearch-certutil | --help |
cert | 生成X.509的證書和密碼 |
ca | 生成一個新本地認證文件,里面包含了證書和密鑰 |
csr | 生成證書簽名 |
http | 對於這個Elastcsearch的http接口生成一個新的認證 |
cert | --help |
ca | 指向已經生成的ca密鑰文件 |
ca-cert | 指向存在的ca認證文件(節點之間認證) |
dns | 指定DNS域名 |
ip | 指定ip |
pass | 生成的私鑰密碼 |
out | 指定生成文件路徑 |
name | 證書名字 |
執行之后,在根目錄生成了elastic-certificates.p12 文件。
$ cd config
$ mkdir certs
$ mv ../elastic-certificates.p12 certs/
- 注意:
我這里沒有使用$ /bin/elasticsearch-certutil ca -v
,只是為了快速的設置SSL
正常我們應該先生成ca證書,然后根據ca證書去生成node證書。
https://www.elastic.co/guide/en/elasticsearch/reference/current/configuring-tls.html
- 配置elasticsearch.yml
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12
這里的verification_mode配置方式:
full
,認證證書是否通過信任的CA證書簽發,同時認證server的hostname 或者 IP 地址是否匹配證書中配置的cretificate
,只認證證書是否通過信任的CA證書簽發的none
,什么也不認證,相當於關閉了SSL/TLS認證,僅用於你非常相信的安全的環境
- 啟動master節點,生成集群密碼
$ bin/ elasticsearch-setup-passwords interactive
手動設置密碼,elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user,都有這些用戶。
登錄時會用到。
- Elastic節點配置TLS
由於不是后台運行,打開一個新的終端,拷貝node證書(cert文件)到字節的的config/certs目錄下。
節點中node.master: false,不能為true。
在其他節點中增加,就是xpck.security.*鍵設置為master一樣。
$ echo "xpack.security.enabled: true" >> elasticsearch.yml
$ echo ''xpack.security.transport.ssl.enabled: true" >> elasticsearch.yml
$ echo ''xpack.security.transport.ssl.verification_mode: certificate" >> elasticsearch.yml
$ echo ''xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12" >> elasticsearch.yml
$ echo ''xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12" >> elasticsearch.yml
- 運行其他兩個節點,
$ bin/elasticsearch
最后看其他兩個節點加入進去沒有。
- Kibana中設置安全
elasticsearch.username: "kibana"
elasticsearch.password: "admin123"
運行命令 bin/kibana --allow-root
打開瀏覽器,輸入 http://localhost:5601
這里的密碼,我們可以使用elastic超級用戶進行登錄,就是來自setup-password
命令。
- Kibana中可以設置Role和User
-
role
-
user
先生成證書
- 執行命令
$ bin/elasticsearch-certutil ca -v
- 其中
Please enter the desired output file [elastic-stack-ca.p12]: # 輸入保存的ca文件名稱
Enter password for elastic-stack-ca.p12 : # 輸入證書密碼,我們這里留空
- 在生成node證書時,使用
$ bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
- 其中
Enter password for CA (elastic-stack-ca.p12) : # 輸入CA證書的密碼,我們這里沒有設置,直接回車
Please enter the desired output file [elastic-certificates.p12]: # 輸入證書保存名稱,保值默認直接回車
Enter password for elastic-certificates.p12 : # 輸入證書的密碼,留空,直接回車
這種根據CA證書簽署生成的node證書elastic-certificates.p12,包含有node證書、CA證書、私鑰
3. 查看節點命令
- 查看節點信息
$ curl localhost:9200/_cat/nodes?v
- 查看節點狀態
$ curl localhost:9200/_cat/health
- 查看每台機器的屬性
$ curl localhost:9200/_cat/nodeattrs