居然有人想白嫖我的日誌,趕緊開啓安全保護壓壓驚 實現原理 Elasticsearch設置密碼 SpringBoot安全訪問 Logstash安全訪問

你居然還去服務器上撈日誌,搭個日誌收集系統難道不香麼 一文中我們介紹過ELK日誌收集系統的搭建,由於我們的Kibana沒有任何安全保護機制,如果部署到公網上去的話,任何人都可以查看你的日誌了。日誌暴露在網絡上可不是件好事情,今天教大家如何給Kibana設置登錄認證來保護它

實現原理

由於Kibana的日誌信息都存儲在Elasticsearch中,所以只要給Elasticsearch開啓X-PACK中的安全功能,並給預置的賬號設置好密碼即可。Elasticsearch設置好之後,就可以在Kibana中對用戶、角色、權限進行管理了,本文使用的ELK組件版本均爲7.6.2。

Elasticsearch設置密碼

  • 修改Elasticsearch的配置文件並開啓X-PACK中的安全功能,該配置文件在安裝目錄的config文件夾下面,例如elasticsearch-7.6.2\config\elasticsearch.yml;
http.cors.enabled           : true
http.cors.allow - origin        : "*"
http.cors.allow - headers       : Authorization
xpack.security.enabled          : true
xpack.security.transport.ssl.enabled    : true
  • 啓動Elasticsearch服務,啓動命令在bin目錄下,例如elasticsearch-7.6.2\bin\elasticsearch.bat;
  • 在bin目錄下使用如下命令elasticsearch-setup-passwords interactive修改預置賬號的密碼,期間需要設置多個賬號密碼,我都設置成了123456;
  • 期間設置了好幾個賬號,我們先來了解下這些賬號都有啥作用吧;
elastic : 超級管 理 員 賬 號
kibana : Kibana訪問 專 用賬號logstash_system : Logstash訪問 專 用賬號beats_system : FileBeat訪問 專 用賬號apm_system : APM系統 專 用賬號remote_monitoring_user : 遠 監控 賬 號
  • 接下來我們需要在Kibana的配置文件中添加可以訪問Elasticsearch的賬號,該配置文件在安裝目錄的config文件夾下面,例如kibana-7.6.2\config\kibana.yml;
elasticsearch.username: "kibana"elasticsearch.password: "123456"
  • 啓動Kibana服務,啓動命令在bin目錄下,例如kibana-7.6.2\bin\kibana.bat;
  • 當Kibana啓動完成後,我們訪問的時就需要登錄認證了,使用超級管理員賬號elastic:123456可以進行登錄,訪問地址:http://localhost:5601
  • 登錄成功後,在我們的Management選項中可以找到安全相關的配置,在此我們可以對用戶、角色、權限進行設置。

SpringBoot安全訪問

由於Elasticsearch開啓X-PACK中的安全功能,當我們的SpringBoot應用訪問Elasticsearch時,也需要設置用戶名和密碼了!

  • 我們可以直接在SpringBoot中設置超級管理員賬號,但這不是個好辦法,我們還是自己建個角色和賬號吧!
  • 首先在Kibana中創建一個應用訪問專用的角色app_user;
  • 創建一個用戶並配置好該角色,賬號密碼爲app:123456;
  • 修改SpringBoot應用的配置文件application.yml,配置好賬號密碼即可正常訪問了!
spring:  elasticsearch:    rest:      uris: http://localhost:9200      username: app      password: 123456

Logstash安全訪問

由於Elasticsearch開啓X-PACK中的安全功能,向Elasticsearch輸出日誌的Logstash也需要設置用戶名和密碼了!

  • 首先修改我們原來的Logstash配置文件logstash.conf,在output節點下設置訪問Elasticsearch的用戶名和密碼,直接使用我們創建的app:123456賬號即可;
input {
    tcp { mode                                              = > "server"
                          host                              = > "0.0.0.0"
                                           port             = > 4560
                                                     codec  = > json_lines type = > "debug" }  tcp { mode                                       = > "server"
                                                                                            host                        = > "0.0.0.0"
                                                                                                         port           = > 4561
                                                                                                                   codec    = > json_lines type = > "error" }  tcp { mode                                               = > "server"
                                                                                                                                                          host                              = > "0.0.0.0"
                                                                                                                                                                           port             = > 4562
                                                                                                                                                                                     codec  = > json_lines type = > "business" }  tcp { mode                                = > "server"
                                                                                                                                                                                                                            host                    = > "0.0.0.0"
                                                                                                                                                                                                                                      port          = > 4563
                                                                                                                                                                                                                                             codec  = > json_lines type = > "record" }
} filter { if [type] == "record" {
           mutate { remove_field                                        = > "port"
                                      remove_field                  = > "host"
                                                     remove_field   = > "@version" }    json { source               = > "message"
                                                                                     remove_field   = > ["message"] }
       } } output { elasticsearch { hosts                                                                                                               = > ["localhost:9200"]
                                                      action                                                                            = > "index"
                                                                                    codec                                               = > json index = > "mall-tiny-%{type}-%{+YYYY.MM.dd}"
                                                                                                                    template_name           = > "mall-tiny"
                                                                                                                                  user  = > app password = > "123456" } }
  • 使用指定配置文件啓動Logstash服務,啓動命令在bin目錄下,例如logstash-7.6.2\bin\logstash.bat;
logstash -f logstash.conf
  • 接下來在Kibana中就可以查看到應用輸出的日誌了!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章