公號:碼農充電站pro
主頁:https://codeshellme.github.iohtml
在安裝完 ES 後,ES 默認是沒有任何安全防禦的。node
ES 的安全管理主要包括如下內容:git
這裏有一些免費的安全方案:github
ES 中提供的認證叫作 Realms,有如下幾種方式,可分爲兩類:shell
用戶鑑權經過定義一個角色,並分配一組權限;而後將角色分配給用戶,使得用戶擁有這些權限。api
ES 中的權限有不一樣的級別,包括集羣級別(30 多種)和索引級別(不到 20 種)。安全
ES 中提供了不少內置角色(不到 30 種)可供使用。app
ES 中提供了不少關於用戶與角色的 API:curl
下面演示如何使用 ES 的安全功能。elasticsearch
啓動 ES 並經過 xpack.security.enabled 參數打開安全功能:
bin\elasticsearch -E node.name=node0 -E cluster.name=mycluster -E path.data=node0_data -E http.port=9200 -E xpack.security.enabled=true
使用 elasticsearch-setup-passwords 命令啓用 ES內置用戶及初始 6 位密碼(須要手動輸入,好比是 111111
):
bin\elasticsearch-setup-passwords interactive
該命令會啓用下面這些用戶:
啓用 ES 的安全功能後,訪問 ES 就須要輸入用戶名和密碼:
也能夠經過 curl 命令(並指定用戶)來訪問 ES:
curl -u elastic 'localhost:9200'
更多內容可參考這裏。
打開 Kibana 的配置文件 kibana.yml
,寫入下面內容:
elasticsearch.username: "kibana_system" # 用戶名 elasticsearch.password: "111111" # 密碼
而後使用 bin\kibana
命令啓動 Kibana。
訪問 Kibana 也須要用戶和密碼(這裏使用的是超級用戶):
下面演示如何使用 Kibana 建立角色和用戶。登陸 Kibana 以後進行以下操做:
點擊 Stack Management
後進入下面頁面:
點擊 Create role
建立角色:
建立角色須要填寫以下內容:
通過上面的操做,建立的角色名爲 test_role
,該角色對 test_index
索引有只讀權限;若是進行超越範圍的操做,將發生錯誤。
進入到建立用戶的界面,點擊 Create user
建立用戶:
填寫用戶名和密碼,並將角色 test_role
賦予該用戶。
使用新建立的用戶登陸 Kibana:
該用戶只對 test_index
索引有只讀權限;若是進行超越範圍的操做,將發生錯誤。
傳輸加密指的是在數據的傳輸過程當中,對數據進行加密(可防止數據被抓包)。
傳輸加密分爲集羣內加密和集羣間加密:
更多的內容可參考這裏。
在 ES 中可使用 TLS 協議對數據進行加密,須要進行如下步驟:
使用以下命令建立 CA:
bin\elasticsearch-certutil ca
成功後,能夠看到當前文件夾下多了一個文件:
elastic-stack-ca.p12
使用以下命令爲 ES 中的節點生成證書和私鑰
bin\elasticsearch-certutil cert --ca elastic-stack-ca.p12
成功後,能夠看到當前文件夾下多了一個文件:
elastic-certificates.p12
將建立好的證書 elastic-certificates.p12
放在 config/certs
目錄下。
# 啓動第一個節點 bin\elasticsearch -E node.name=node0 -E cluster.name=mycluster -E path.data=node0_data -E http.port=9200 -E xpack.security.enabled=true -E xpack.security.transport.ssl.enabled=true -E xpack.security.transport.ssl.verification_mode=certificate -E xpack.security.transport.ssl.keystore.path=certs\elastic-certificates.p12 -E xpack.security.transport.ssl.truststore.path=certs\elastic-certificates.p12 # 啓動第二個節點 bin\elasticsearch -E node.name=node1 -E cluster.name=mycluster -E path.data=node1_data -E http.port=9201 -E xpack.security.enabled=true -E xpack.security.transport.ssl.enabled=true -E xpack.security.transport.ssl.verification_mode=certificate -E xpack.security.transport.ssl.keystore.path=certs\elastic-certificates.p12 -E xpack.security.transport.ssl.truststore.path=certs\elastic-certificates.p12
不提供證書的節點將沒法加入集羣:
bin\elasticsearch -E node.name=node2 -E cluster.name=mycluster -E path.data=node2_data -E http.port=9202 -E xpack.security.enabled=true -E xpack.security.transport.ssl.enabled=true -E xpack.security.transport.ssl.verification_mode=certificate # 加入失敗
也能夠將配置寫在配置文件 elasticsearch.yml
中,以下:
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
經過配置以下三個參數,使得 ES 支持 HTTPS:
xpack.security.http.ssl.enabled: true xpack.security.http.ssl.keystore.path: certs/elastic-certificates.p12 xpack.security.http.ssl.truststore.path: certs/elastic-certificates.p12
在命令行啓動:
bin\elasticsearch -E node.name=node0 -E cluster.name=mycluster -E path.data=node0_data -E http.port=9200 -E xpack.security.enabled=true -E xpack.security.transport.ssl.enabled=true -E xpack.security.transport.ssl.verification_mode=certificate -E xpack.security.transport.ssl.keystore.path=certs\elastic-certificates.p12 -E xpack.security.transport.ssl.truststore.path=certs\elastic-certificates.p12 -E xpack.security.http.ssl.enabled=true -E xpack.security.http.ssl.keystore.path=certs\elastic-certificates.p12 -E xpack.security.http.ssl.truststore.path=certs\elastic-certificates.p12
啓動成功後,能夠經過 HTTPS 協議訪問 ES:
https://localhost:5601/
首先用 openssl
爲 kibana 生成 pem:
openssl pkcs12 -in elastic-certificates.p12 -cacerts -nokeys -out elastic-ca.pem
成功後會生成以下文件:
elastic-ca.pem
將該文件放在 config\certs
目錄下。
在 Kibana 的配置文件 kibana.yml
中配置以下參數:
elasticsearch.hosts: ["https://localhost:9200"] elasticsearch.ssl.certificateAuthorities: ["C:\\elasticsearch-7.10.1\\config\\certs\\elastic-ca.pem"] elasticsearch.ssl.verificationMode: certificate
bin\kibana
bin/elasticsearch-certutil ca --pem
上面命令執行成功後會生成以下 zip 文件:
elastic-stack-ca.zip
將該文件解壓,會有兩個文件:
ca.crt ca.key
將這兩個文件放到 Kibana 的配置文件目錄 config\certs
。
在 Kibana 的配置文件 kibana.yml
中配置以下參數:
server.ssl.enabled: true server.ssl.certificate: config\\certs\\ca.crt server.ssl.key: config\\certs\\ca.key
bin\kibana
啓動成功後,能夠經過 HTTPS 協議訪問 Kibana:
https://localhost:5601/
(本節完。)
推薦閱讀:
歡迎關注做者公衆號,獲取更多技術乾貨。