ELK elasticsearch7 設置賬號、權限


比較完整一篇,完整版

我們直接安裝的ELK默認是沒有賬號與密碼的。但是我們一旦放到生成上,就需要做一定的權限過濾,有些數據有些賬號才能看到。否則都能看到,就很不科學了,有可能導致一些有心的人,搞成信息泄露。這個時候我們就需要設置賬號密碼了。

用戶信息設置在LK中,也就是logstash、kibana中是沒有的,因為他們的信息數據都是來源於elasticsearch中,索引真正設置用戶密碼的是es。

這里主要記錄下先es集群。后配置登錄用戶才能訪問數據。

ES集群,因為之前已寫過 es集群,可看之前文章

https://www.cnblogs.com/a393060727/p/12292868.html

直接訪問集群。就顯示出來

http://IP:端口/_cat/nodes?pretty

現在我們要對之前的配置做一定的修改。達到需要用戶密碼才可以訪問的目的。

查看上面鏈接查看es集群。

 

查看kibana管理頁

 

 進入正題。

1、elasticsearch配置

文件修改點:

之前配置完全不變,增加兩個配置項,然后設置初始默認密碼,即可。

// 啟用密碼
xpack.security.enabled: true
// 使用默認密碼
xpack.security.authc.accept_default_password: true

之前的配置 

es04.yml
cluster.name: esinner
node.name: es04
node.master: true
node.data: true
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 172.19.0.14
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
discovery.seed_hosts: ["172.19.0.14","172.19.0.15","172.19.0.16"]
cluster.initial_master_nodes: ["172.19.0.16"]
discovery.zen.minimum_master_nodes: 2
http.cors.allow-headers: Authorization


es05.yml
cluster.name: esinner
node.name: es05
node.master: true
node.data: true
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 172.19.0.15
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
discovery.seed_hosts: ["172.19.0.14","172.19.0.15","172.19.0.16"]
cluster.initial_master_nodes: ["172.19.0.16"]
discovery.zen.minimum_master_nodes: 2
http.cors.allow-headers: Authorization


es06.yml
cluster.name: esinner
node.name: es06
node.master: true
node.data: true
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 172.19.0.16
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
discovery.seed_hosts: ["172.19.0.14","172.19.0.15","172.19.0.16"]
cluster.initial_master_nodes: ["172.19.0.16"]
discovery.zen.minimum_master_nodes: 2
http.cors.allow-headers: Authorization

修改配置后:

es04.yml
cluster.name: esinner
node.name: es04
node.master: true
node.data: true
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 172.19.0.14
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
discovery.seed_hosts: ["172.19.0.14","172.19.0.15","172.19.0.16"]
cluster.initial_master_nodes: ["172.19.0.16"]
discovery.zen.minimum_master_nodes: 2
http.cors.allow-headers: Authorization
xpack.security.enabled: true
xpack.security.authc.accept_default_password: true



es05.yml
cluster.name: esinner
node.name: es05
node.master: true
node.data: true
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 172.19.0.15
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
discovery.seed_hosts: ["172.19.0.14","172.19.0.15","172.19.0.16"]
cluster.initial_master_nodes: ["172.19.0.16"]
discovery.zen.minimum_master_nodes: 2
http.cors.allow-headers: Authorization
xpack.security.enabled: true
xpack.security.authc.accept_default_password: true


es06.yml
cluster.name: esinner
node.name: es06
node.master: true
node.data: true
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 172.19.0.16
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
discovery.seed_hosts: ["172.19.0.14","172.19.0.15","172.19.0.16"]
cluster.initial_master_nodes: ["172.19.0.16"]
discovery.zen.minimum_master_nodes: 2
http.cors.allow-headers: Authorization
xpack.security.enabled: true
xpack.security.authc.accept_default_password: true

 

啟動容器

// 容器指定自動重啟、內存限制512m、使用內部網絡(據說可以更快),指定容器IP,指定對外映射端口(其中9200是網頁http用,9300是程序tcp用),將數據掛載到宿主機,容器名稱命名。。
docker run --restart=always -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \ -d --net esnetwork --ip 172.19.0.14 -p 9204:9200 -p 9304:9300 \ -v /home/soft/ES/config/es04.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v /home/soft/ES/data/data04:/usr/share/elasticsearch/data \ -v /home/soft/ES/logs/logs04:/usr/share/elasticsearch/logs \ --name es04 elasticsearch:7.1.1 docker run --restart=always -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \ -d --net esnetwork --ip 172.19.0.15 -p 9205:9200 -p 9305:9300 \ -v /home/soft/ES/config/es05.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v /home/soft/ES/data/data05:/usr/share/elasticsearch/data \ -v /home/soft/ES/logs/logs05:/usr/share/elasticsearch/logs \ --name es05 elasticsearch:7.1.1 docker run --restart=always -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \ -d --net esnetwork --ip 172.19.0.16 -p 9206:9200 -p 9306:9300 \ -v /home/soft/ES/config/es06.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v /home/soft/ES/data/data06:/usr/share/elasticsearch/data \ -v /home/soft/ES/logs/logs06:/usr/share/elasticsearch/logs \ --name es06 elasticsearch:7.1.1

 

服務啟動成功后,需要在主節點master上設置密碼后,從1個點無需配置,自動同步。

// 查看容器啟動情況
[root@localhost data]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9cff40539dd1 elasticsearch:7.1.1 "/usr/local/bin/dock…" 3 hours ago Up 2 minutes 0.0.0.0:9206->9200/tcp, 0.0.0.0:9306->9300/tcp es06 3b37327ea7f5 elasticsearch:7.1.1 "/usr/local/bin/dock…" 3 hours ago Up 2 minutes 0.0.0.0:9205->9200/tcp, 0.0.0.0:9305->9300/tcp es05 ec5e2a2b8f43 elasticsearch:7.1.1 "/usr/local/bin/dock…" 3 hours ago Up 2 minutes 0.0.0.0:9204->9200/tcp, 0.0.0.0:9304->9300/tcp es04 // 進入容器es04
[root@localhost data]# docker exec
-it es04 /bin/bash
// 設置默認賬號密碼,如下,這些賬號在不通的服務系統接入的時候使用,其中elastic是類似超級管理員。權限最大。 [root@ec5e2a2b8f43 elasticsearch]# bin/elasticsearch-setup-passwords interactive Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user. You will be prompted to enter passwords as the process progresses. Please confirm that you would like to continue [y/N]y // 這里需要手動輸入密碼 Enter password for [elastic]: Reenter password for [elastic]: Enter password for [apm_system]: Reenter password for [apm_system]: Enter password for [kibana]: Reenter password for [kibana]: Enter password for [logstash_system]: Reenter password for [logstash_system]: Enter password for [beats_system]: Reenter password for [beats_system]: Enter password for [remote_monitoring_user]: Reenter password for [remote_monitoring_user]:
// 當出現如下內容后,證明設置成功。 Changed password
for user [apm_system] Changed password for user [kibana] Changed password for user [logstash_system] Changed password for user [beats_system] Changed password for user [remote_monitoring_user] Changed password for user [elastic]

 

設置kibana配置文件中,加入用戶名密碼,其實只是加上,kibana啟動后,會根據這個用戶名密碼訪問es,判斷是否能夠訪問,與權限無關,我們只需要給上面設置的用戶kibana就可以。

我的配置文件如下,然后重啟。

這里主要是配置了當前服務名,端口,集群es地址(其實寫一個也可以,但是一旦不巧你寫的那個節點掛掉后,就無法訪問了。所以建議多寫幾個。)

kibana我的用戶名與密碼一致

2、kibana.yml

server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://192.168.89.138:9204","http://192.168.89.138:9205", "http://192.168.89.138:9206" ]
elasticsearch.username: "kibana"
elasticsearch.password: "kibana"
server.port: 5601

 

啟動kibana

// 容器指定自動重啟、內存限制512m、使用內部網絡(據說可以更快),指定容器IP,指定對外映射端口,將數據掛載到宿主機,容器名稱命名。。
docker run --restart=always -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
-d --name kibana -p 5601:5601 \
-v /home/soft/ELK/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml \
192.168.89.132/third/kibana:7.1.1

 

啟動完成后,訪問服務kibana。可以看到已經有用戶名密碼對話框了。輸入對應用戶名字

http://192.168.89.139:5601/

 

登錄成功,但是,信息無法查看。權限沒開通,返回如下信息。

{"statusCode":403,"error":"Forbidden","message":"Forbidden"}

我使用超級用戶elastic訪問就可以進去了

 

 

 

登錄進入系統后。進入管理按鈕(Management),就可以看到多了一塊東西,就是用戶與角色權限配置

這里是用戶信息,可以看到這些用戶就是我們在es重置密碼的默認用戶。

 

 

 

 

 

 接下來,我們給kibana用戶配置相應的角色,權限。就可以用kibana登錄查看信息了。

 

3、logstash配置。

我們數據來源是通過logstash收集寫入的,

所以這里的配置文件也需要加上es的賬號密碼,我將logstash_system配置在配置文件中。

 

logstash我這采用的是與filebeat結合使用。因為logstash啟動處理消耗內存有點巨大。所以只在一台服務器上用他做接收,數據過濾,轉存信息到ES中。

配置文件 logstash.yml

path.config: /usr/share/logstash/conf.d/*.conf
path.logs: /var/log/logstash

另外配置conf.d目錄下。

增加文件 命名無所謂,反正是.conf結尾,logstash 就可以識別。change.conf

作用 

 input 是數據源

filter 數據過濾,因為這里字段很多,所以我將很多不必要的節點字段過濾掉了。

output  信息存儲到哪里。我們是ES所以就這樣了。

input {
beats {
port => 5044
codec => "json"
}
}

filter {
date {
match => [ "@timestamp" , "yyyy/MM/dd:HH:mm:ss Z" ]
}
mutate {
remove_field => ["host","ecs","json","agent","input","log","@version","tags"]
}
}

output {
elasticsearch {
hosts => ["192.168.89.138:9204","192.168.89.138:9205","192.168.89.138:9206"]
user => "logstash_system"
password => "logstash_system"
index => "%{[fields][systemid]}-%{+YYYY.MM.dd}"
}
}

 

啟動腳本。

docker run --restart=always -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
-it -d -p 5044:5044 -p 9600:9600 --name logstash \
-v /home/soft/ELK/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml \
-v /home/soft/ELK/logstash/config/conf.d/:/usr/share/logstash/conf.d/ \
192.168.89.132/third/logstash:7.1.1

 

啟動運行查看,看到數據進來了。

未修改加入用戶名密碼返回日志

[2020-03-12T15:57:14,349][WARN ][logstash.outputs.elasticsearch] Attempted to resurrect connection to dead ES instance, but got an error. {:url=>"http://192.168.89.138:9206/", :error_type=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::BadResponseCodeError, :error=>"Got response code '401' contacting Elasticsearch at URL 'http://192.168.89.138:9206/'"}

增加用戶名密碼后

 

 

4、總結:沒做過感覺很復雜,做過后,感覺我也能做。只是網上寫的經驗各種的復制粘貼一大堆。能有用的還需要看造化了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM