配置tls加密通信及身份驗證,主要目的是為了確保集群數據安全。在es早期版本,安全認證相關功能都屬於商業付費服務,一般普通公司如果集群部署在內網,基本上就忽略了這些安全認證,當然也可以通過Nginx反向代理來進行控制。現在,官方宣布從6.8和7.1開始,免費提供很多項安全功能。其中包括tls加密通信,基於角色訪問控制(RBAC)等功能。這對很多使用ELK技術棧的公司來說是一個福利。
一、配置 TLS 和身份驗證
1、我們要做的第一件事是生成證書,通過這些證書便能允許節點安全地通信。但是一般情況下,我們可以通過elasticsearch自帶的elasticsearch-certutil的命令生成證書。然后各節點通過該證書可以進行安全通信。
在搭建好es集群的條件下,生成證書:
cd /usr/local/elasticsearch
bin/elasticsearch-certutil cert -out config/elastic-certificates.p12 -pass ""
2、上面命令執行成功后,會在config文件夾下生成elastic-certificates.p12證書。然后編輯配置文件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: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
3、將上面步驟生成的elastic-certificates.p12證書復制到另外兩個node02與node03節點上對應的config文件夾中並授權,同時將上面配置選項也都復制到對應節點的elasticsearch.yml文件里。
chown -R elasticsearch. /usr/local/elasticsearch/config/elastic-certificates.p12
4、現在三台node節點上都有了證書,同時elasticsearch.yml文件中也都增加了安全配置項。啟動三個節點。待節點啟動完畢之后,進入其中一個節點elasticsearch目錄,執行以下命令,進行密碼設置:
bin/elasticsearch-setup-passwords interactive
5、由於現在Elasticsearch設置了密碼,所以logstash過濾數據之后往es集群中推送的時候以及將數據展示到kibana時,需要添加權限認證。增加es集群的用戶及密碼:
logstash:
user => "elastic"
password => "password"
kibana:
elasticsearch.username: "elastic"
elasticsearch.password: "password"
6、elasticsearch-head插件此時再去訪問有安全認證的es集群時http://node01:9100,會發現無法進行查看,打開控制台可以看到報錯:401 unauthorized,head無法登陸的問題:
在/usr/local/elasticsearch/config/elasticsearch.yml中添加如下三行配置:
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
修改三台es節點,然后重新啟動,再次url+認證信息方式可以正常訪問es集群。
http://ip:9100/?auth_user=elastic&auth_password=passwd
二、在 Kibana 中配置基於角色的訪問控制 (RBAC)
由於ELK日志管理屬於基礎設施平台,所以接入多個應用系統是正常現象,如果接入多個系統的索引文件沒有進行權限划分,那么很大程度會出現索引文件誤處理現象,為了避免這種情況發生,多用戶及權限設置必不可少。
如果是像這個例子中的全新安裝情況,Kibana 將詢問您是否希望加載一些樣本數據。
現在我們就創建角色。找到並單擊 roles(角色)選項。
單擊 Create role(創建角色)。
針對不同用戶只能查看各自系統的索引文件。第一步需要創建角色,將某個角色和索引文件進行綁定。
- 1、創建第一個應用系統test01 角色,選擇對應的索引文件,分配對應的權限read
- 2、 創建第二個系統test02角色,選擇對應的索引文件,分配對應的權限read
- 3、創建兩個用戶test01/test01(用戶名/密碼),test02/test02, 然后分配對應系統角色和kibana_user角色
- 5、用戶創建完后,可以進行登錄驗證。
登錄test01用戶,只能查詢test01的索引日志。
雖然test01用戶可以看到其他的索引index-pattern, 但是無法查詢到數據。所以保證了其他系統索引文件的安全。
登錄test02用戶,只能查詢test02 索引日志,其他索引無法查詢到數據。
test02用戶選擇其他未分配權限的索引,無法查詢到數據。
到此,系統多用戶安全認證日志平台搭建完成!