ELK—x-pack插件


1 x-pack介紹

1.1 功能介紹  

  官網介紹:https://www.elastic.co/guide/en/kibana/6.2/setup-xpack-kb.html

       x-pack是elasticsearch的一個擴展包,將安全,警告,監視,圖形和報告功能捆綁在一個易於安裝的軟件包中,可以輕松的啟用或者關閉一些功能。默認我們的elk部署后,可以直接就進入web管理界面,這樣會帶來極大的安全隱患。

1.2 功能分類

  x-pack的基本功能可列舉如下:

1.21 用戶管理

  x-pack安裝之后有一個超級用戶elastic ,擁有對所有索引和數據的控制權,可以使用該用戶創建和修改其他用戶,當然這里可以通過kibana的web界面進行用戶和用戶組的管理。

  如下:wyy這個用戶就是通過elastic超級用戶創建的,是個只讀的。這里可以在web上修改

  終端修改用戶名和密碼方式:

#修改elastic:
curl -XPUT -u elastic:elastic123 'http://10.10.16.253:9200/_xpack/security/elastic/_password' -d {"password":"123456"} 

#修改kibana
curl -XPUT -u elastic:elastic123 'http://10.10.16.253:9200/_xpack/security/kibana/_password' -d {"password":"123456"}

1.22 保護級別

 

 

  如何提高Elasticsearch應用的安全性,是開發者面臨的重要問題。Elasticsearch X-Pack中的安全組件提供了對應的安全解決方案,讓IT和應用團隊能夠依賴 X-Pack 來區分和管理正常用戶和惡意入侵者。

  x-pack提供以下幾個級別保護elastic集群:

  ● 用戶登錄身份驗證:安裝完x-pack,登錄elasticsearch和kibana會讓你輸入密碼

  ● 授權和基於角色的訪問控制:允許哪些用戶對哪些索引具有不同的操作權限

  ● 節點/客戶端認證和信道加密:x-pack的elk之間的數據傳遞保護:logstash.yaml

  ● 審計:啟動審核以跟蹤與你的elasticsearch集群的嘗試與成功的交互:xpack.security.audit.enabled: true

1.23 監控功能

  使用xpack監控組件能夠通過kibana輕松監控elasticsearch。還可以實時查看集群運行狀況和性能,以及分析過去的集群,索引和節點指標。包括kibana本身的性能。

 

  另外,我們可以配置監控的索引:通過elasticsearch.yml文件,如圖:

  可以在前面上+或-來顯示包含或排除索引名稱和模式。如:+ text *, - test3。

1.24 alert功能 

  #官網詳細內容參考:https://www.elastic.co/guide/en/x-pack/current/xpack-alerting.html

 

  當watch被觸發的時候,數據將會被加載到執行的context中,watch支持以下四種輸入:

                     Simple:加載靜態的數據到execution context中

                     Search:加載搜索的結果到execution context中

                     Http:將Http請求的結果加載到execution context中

                     chain:使用一系列輸入將數據加載到execution context中

       每個watch必須有一個觸發器觸發watch的執行開始,watch旨在支持不同類型的的觸發器,但只有基於時間戳的計划觸發器目前可用,watch提供了以下幾種類型的時間過濾器

              Hourly

              Daily

              Weekly

              Monthly

              Yearly

              Cron

              Interval

1.25 graph功能

  #官網詳細介紹:https://www.elastic.co/guide/en/x-pack/current/graph-getting-started.html

  X-Pack圖的能力使你發現一個Elasticsearch索引項是如何相關聯的。你可以探索索引條款之間的連接,看看哪些連接是最有意義的。從欺詐檢測到推薦引擎,對各種應用中這都是有用的,例如,圖的探索可以幫助你發現網站上黑客的目標的漏洞,所以你可以硬化你的網站。或者,您可以為您的電子商務客戶提供基於圖表的個性化推薦。X-pack提供簡單,但功能強大的圖形開發API,和Kibana交互式圖形可視化工具。使用X-pack圖有工作與開銷與現有Elasticsearch指標你不需要任何額外的數據存儲的特征。

 

 

1.3 功能使用

  默認情況下,所有的x-pack功能都已開啟,可以在elasticsearch.yml,kibana.yml,logstash.yml配置文件中啟用或禁用特定的x-pack功能。

  #設置                     #描述

  xpack.graph.enabled        #設置為false以禁用X-Pack圖形功能。

  xpack.ml.enabled          #設置為false以禁用X-Pack機器學習功能。

  xpack.monitoring.enabled   #設置為false以禁用X-Pack監視功能。

  xpack.reporting.enabled     #設置為false以禁用X-Pack報告功能。

  xpack.security.enabled      #設置為false以禁用X-Pack安全功能。

  xpack.watcher.enabled      #設置為false以禁用Watcher。

功能名稱

       文件配置格式

適用組件

圖形展示

     xpack.graph.enabled

    只適用kibana組件

報表統計

xpack.reporting.enabled

    只適用於kibana組件

報警通知

    xpack.watcher.enabled

只適用於elasticsearch組件

安全認證

xpack.security.enabled

適用於elk的三個組件

監控跟蹤

xpack.monitoring.enabled

適用於elk的三個組件

設備資源分配

xpack.ml.enabled

適用於elasticsearch和kibana

2 x-pack安裝

  安裝好x-pack時,默認會有30天的使用許可證,試用期結束后會無法訪問,此時就需要到官網去申請一年的免費license。

2.1 x-pack破解

  用破解的x-pack-6.5.4.jar替換/home/elasticsearch/plugins/x-pack/目錄中原有的x-pack-6.5.4.jar包。新版默認安裝好x-pack,這里我們需要單獨把x-pack6.5.4.jar拿出來。

cd /home/soft/
cp /home/elasticsearch/modules/x-pack-core/x-pack-core-6.5.4.jar ./
jar -xvf x-pack-core-6.5.4.jar   #解壓jar包
rm -f x-pack-core-6.5.4.jar #移除舊的jar

  找到org/elasticsearch/license/LicenseVerifier.class,可使用Luyten反編譯工具(https://github.com/deathmarine/Luyten/releases )打開,並拷貝內容到新建的文件LicenseVerifier.java中,文件內容如下:

package org.elasticsearch.license;
import java.nio.*;
import org.elasticsearch.common.bytes.*;
import java.util.*;
import java.security.*;
import org.elasticsearch.common.xcontent.*;
import org.apache.lucene.util.*;
import org.elasticsearch.core.internal.io.*;
import java.io.*;

public class LicenseVerifier
{
    public static boolean verifyLicense(final License license, final byte[] encryptedPublicKeyData) {
        return true;
    }

    public static boolean verifyLicense(final License license) {
        return true;
    }
}
View Code

  找到org/elasticsearch/xpack/core/XPackBuild.class,可使用Luyten反編譯工具打開,並拷貝內容到新建的文件XPackBuild.java中,文件內容如下:

package org.elasticsearch.xpack.core;
import org.elasticsearch.common.io.*;
import java.net.*;
import org.elasticsearch.common.*;
import java.nio.file.*;
import java.io.*;
import java.util.jar.*;

public class XPackBuild
{
    public static final XPackBuild CURRENT;
    private String shortHash;
    private String date;

    @SuppressForbidden(reason = "looks up path of xpack.jar directly")
    static Path getElasticsearchCodebase() {
        final URL url = XPackBuild.class.getProtectionDomain().getCodeSource().getLocation();
        try {
            return PathUtils.get(url.toURI());
        }
        catch (URISyntaxException bogus) {
            throw new RuntimeException(bogus);
        }
    }

    XPackBuild(final String shortHash, final String date) {
        this.shortHash = shortHash;
        this.date = date;
    }

    public String shortHash() {
        return this.shortHash;
    }

    public String date() {
        return this.date;
    }

    static {
        final Path path = getElasticsearchCodebase();
        String shortHash = null;
        String date = null;
        Label_0157: {
            shortHash = "Unknown";
            date = "Unknown";
        }
        CURRENT = new XPackBuild(shortHash, date);
    }
}
View Code

  編譯修好后的Java文件

javac  -cp "/home/elasticsearch/modules/x-pack-core/x-pack-core-6.5.4.jar:/home/elasticsearch/lib/*" LicenseVerifier.java
javac  -cp "/home/elasticsearch/modules/x-pack-core/x-pack-core-6.5.4.jar:/home/elasticsearch/lib/*" XPackBuild.java

  重新打jar包:

jar -cvf  x-pack-core-6.5.4.jar ./*

  覆蓋原來的x-pack的jar,建議將之前備份

mv x-pack-core-6.5.4.jar /home/elasticsearch/modules/x-pack-core/x-pack-core-6.5.4.jar

  修改/home/elasticsearch/config/elasticsearch.yml,開啟x-apck認證

cluster.name: ELK-Cluster #ELK的集群名稱,名稱相同即屬於是同一個集群
node.name: elk-node1 #本機在集群內的節點名稱
path.data: /home/elasticsearch/data  #數據保存目錄
path.logs: /home/elasticsearch/logs   #日志保存目
network.host: 0.0.0.0 #監聽IP
http.port: 9200
node.data: true #是否是數據節點
node.ingest: true #關閉即可
node.master: true #是否是主節點,不定義的話先啟動的是主節點
node.max_local_storage_nodes: 1 #最大存儲節點
bootstrap.memory_lock: false #服務啟動的時候鎖定足夠的內存,防止數據寫入swap
bootstrap.system_call_filter: false
###head插件相關###
http.cors.enabled: true
http.cors.allow-origin: "*"
#http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
####head插件相關####
#節點ip,節點之間要允許ping和9300端口通信
transport.tcp.port: 9300
discovery.zen.ping.unicast.hosts: ["10.10.16.213", "10.10.16.214"]
xpack.security.enabled: false  #建議上傳證書之前改為false
xpack.security.transport.ssl.enabled: false  #建議上傳證書之前改為false
View Code

#重啟elasticsearch,建議先關閉kibana和logstash,先啟動node2,注意切換普通用戶。

2.2 更新許可證

  去官網申請免費的license,會發郵件給你提供下載地址,將下載下來的文件重命名為license.json。https://license.elastic.co/registration  #官網申請basic授權文件

  我這里將下載下來的json文件放到/tmp目錄下

  授權文件修改:

  首先將wyy-wyy-d7c273a8-699d-4db2-8406-6ae8f8abbe65-v5.json給改為license.json

  時間戳時間轉換:https://tool.lu/timestamp

{
"license":{
        "uid":"d7c273a8-699d-4db2-8406-6ae8f8abbe65",
        "type":"platinum",  //修改為白金版
        "issue_date_in_millis":1547078400000,
        "expiry_date_in_millis":2855980923000, //修改到期時間為2060-07-02
        "max_nodes":100, //修改最大節點數
        "issued_to":"wyy wyy (pharmacodia)",
        "issuer":"Web Form",
        "signature":"AAAAAwAAAA1Q7pVrfhlxhVwk+PjKAAABmC9ZN0hjZDBGYnVyRXpCOW5Bb3FjZDAxOWpSbTVoMVZwUzRxVk1PSmkxaktJRVl5MUYvUWh3bHZVUTllbXNPbzBUemtnbWpBbmlWRmRZb25KNFlBR2x0TXc2K2p1Y1VtMG1UQU9TRGZVSGRwaEJGUjE3bXd3LzRqZ05iLzRteWFNekdxRGpIYlFwYkJiNUs0U1hTVlJKNVlXekMrSlVUdFIvV0FNeWdOYnlESDc3MWhlY3hSQmdKSjJ2ZTcvYlBFOHhPQlV3ZHdDQ0tHcG5uOElCaDJ4K1hob29xSG85N0kvTWV3THhlQk9NL01VMFRjNDZpZEVXeUtUMXIyMlIveFpJUkk2WUdveEZaME9XWitGUi9WNTZVQW1FMG1DenhZU0ZmeXlZakVEMjZFT2NvOWxpZGlqVmlHNC8rWVVUYzMwRGVySHpIdURzKzFiRDl4TmM1TUp2VTBOUlJZUlAyV0ZVL2kvVk10L0NsbXNFYVZwT3NSU082dFNNa2prQ0ZsclZ4NTltbU1CVE5lR09Bck93V2J1Y3c9PQAAAQB1Qa/KQHbjfBkfIh4FlOXsOOZIxcBkw8PPX9u7SrSOwL/LpKxuAlM9/oulDW4WZGzH5psGK7f/RDBatAQ8kiQrFQZ2B97PJmfvxoUrptXT4kzYpdkd+iAlTAyy2gkyI19QVAI5c/seVp0ERq3Rhv/l8Qx6HnMcafXTlheEoRceh3Oz88Qv3kaYwvb+R8d0WreFoaxxaqJuVAN6JFNfQr7h9Ra2ViB8yOzF0PXmmCvT5yER1UH1tDGAvfAIV7E7oGV0srf/uCEv5bD7FMUdun+aF4VApEtRoK10XLKW48qyo5+dhhEbKr2IGwAWXUM6l3FJCtZGFbKw3YX83zXz2hDi",
        "start_date_in_millis":1547078400000
        }
}
View Code

2.3 導入授權文件

  通過API接口上傳:如果提前設置好了用戶名密碼需要加上-u參數:-u elastic:elastic123

curl -XPUT 'http://10.10.16.213:9200/_xpack/license' -H "Content-Type: application/json" -d @/tmp/license.json  #注意標點符號為英文
{"acknowledged":true,"license_status":"valid"} #返回valid,表示已生效

   http://10.10.16.213:9200/_xpack/license  

  Head訪問方式:http://localhost:9100/?base_uri=http://localhost:9200&auth_user=elastic&auth_password=elastic123

 #如下圖,但是這樣容易暴露用戶名和密碼,后面再探索可行方案

 

2.4 elasticsearch添加認證

  設置驗證密碼:進入elasticsearch/bin/x-pack,建議停掉所有節點的es服務和kibana

  修改elasticsearch.yml,將xpack.security打開

./setup-passwords interactive #手動,也可選擇auto
#也可進入/home/elasticsearch/bin,./elasticsearch-setup-passwords interactive #兩種方式一樣

  會對elasticsearch、logstash、kibana分別設置登錄密碼(默認es用戶名為elastic,logstash用戶名為logstash_system,kibana用戶名為kibana)

 

2.5 kibana添加認證

   修改kibana.yml

  重啟kibana,登錄:http://10.10.16.213:5601

  使用之前設置好的用戶名個密碼登錄:elastic  elastic123,登錄之后可以發現kibana界面多了很多功能,如圖:

 3 x-pack操作手冊

  這里我們主要了解一下x-pack提供的user和roles權限控制,如圖展示的是security-roles:

現總結如下:
    ingest_admin:授予訪問權限以管理所有索引模板和所有攝取管道配置。這個角色不能提供創建索引的能力; 這些特權必須在一個單獨的角色中定義。
    kibana_dashboard_only_user:授予對Kibana儀表板的訪問權限以及對.kibana索引的只讀權限。 這個角色無法訪問Kibana中的編輯工具。
    kibana_system:授予Kibana系統用戶讀取和寫入Kibana索引所需的訪問權限,管理索引模板並檢查Elasticsearch集群的可用性。 此角色授予對.monitoring- 索引的讀取訪問權限以及對.reporting- 索引的讀取和寫入訪問權限。
    kibana_user:授予Kibana用戶所需的最低權限。 此角色授予訪問集群的Kibana索引和授予監視權限
    kibana_admin:授予訪問用於管理配置的.logstash *索引的權限。
    logstash_system:授予Logstash系統用戶所需的訪問權限,以將系統級別的數據(如監視)發送給Elasticsearch。不應將此角色分配給用戶,因為授予的權限可能會在不同版本之間發生變化。此角色不提供對logstash索引的訪問權限,不適合在Logstash管道中使用。
    machine_learning_admin:授予manage_ml群集權限並讀取.ml- *索引的訪問權限。
    monitoring_user:授予除使用Kibana所需的X-Pack監視用戶以外的任何用戶所需的最低權限。 這個角色允許訪問監控指標。 監控用戶也應該分配kibana_user角色
    remote_monitoring_agent:授予遠程監視代理程序將數據寫入此群集所需的最低權限
    reporting_user:授予使用Kibana所需的X-Pack報告用戶所需的特定權限。
transport_client:通過Java傳輸客戶端授予訪問集群所需的權限。 
    watcher_admin:授予對.watches索引的寫入權限,讀取對監視歷史記錄的訪問權限和觸發的監視索引,並允許執行所有監視器操作
    watcher_user:授予讀取.watches索引,獲取觀看動作和觀察者統計信息的權限
View Code

  cluster權限,即可以分配給roles的權限

all:所有集群管理操作,如快照,節點關閉/重新啟動,設置更新,重新路由或管理用戶和角色
monitor:所有集群只讀操作,如集群運行狀況,熱線程,節點信息,節點和集群統計信息,快照/恢復狀態,等待集群任務
monitor_ml: 所有只讀機器學習操作,例如獲取有關數據傳輸,作業,模型快照或結果的信息
monitor_watcher: 所有只讀操作,例如獲取watch和watcher統計信息
manage:構建monitor並添加更改集群中值的集群操作。這包括快照,更新設置和重新路由。此特權不包括管理安全性的能力
manage_index_templates:索引模板上的所有操作
manage_ml:所有機器學習操作,例如創建和刪除數據傳輸,作業和模型快照。數據處理以具有提升特權的系統用戶身份運行,包括讀取所有索引的權限
manage_security:所有與安全相關的操作,例如對用戶和角色的CRUD操作以及緩存清除
manage_watcher:所有觀察者操作,例如放置watches,執行,激活或確認。Watches作為具有提升特權的系統用戶運行,包括讀取和寫入所有索引的權限。Watches作為具有提升特權的系統用戶運行,包括讀取和寫入所有索引的權限
View Code

  indices權限:

  all   索引上的任何操作

  monitor 監控所需的所有操作(恢復,細分信息,索引統計信息和狀態)

  manage 所有monitor特權加索引管理(別名,分析,緩存清除,關閉,刪除,存在,刷新,映射,打開,強制合並,刷新,設置,搜索分片,模板,驗證)

  view_index_metadata      對索引元數據(別名,別名存在,獲取索引,存在,字段映射,映射,搜索分片,類型存在,驗證,warmers,設置)進行只讀訪問。此特權主要供Kibana用戶使用

  read 只讀操作(計數,解釋,獲取,mget,獲取索引腳本,更多像這樣,多滲透/搜索/ termvector,滲透,滾動,clear_scroll,搜索,建議,tv)

  read_cross_cluster     只讀訪問來自遠程集群的搜索操作

  index     索引和更新文件。還授予對更新映射操作的訪問權限

  create    索引文件。還授予對更新映射操作的訪問權限

  delete    刪除文件

  write      對文檔執行所有寫入操作的權限,包括索引,更新和刪除文檔以及執行批量操作的權限。還授予對更新映射操作的訪問權限

  delete_index 刪除索引

  create_index 創建索引。創建索引請求可能包含在創建索引時添加到索引的別名。在這種情況下,該請求最好有manage權限,同時設置索引和別名

3.1  基於角色的權限控制

  進入到web,找到Management/SecurityRoles,點擊Create role

 

  可以使這個roles關聯給多個用戶使用:

 

  以上是創建了一個role權限只對索引data141擁有只讀權限,下面創建普通用戶wyy

 

  可以對這個用戶關聯多個roles。至此創建了一個wyy的用戶,只擁有一個read-only的權限,下面驗證是否生效

3.2 登錄驗證

  發現其他的模塊,還有索引都不能查看

 

 


免責聲明!

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



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