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 登录验证

  发现其他的模块,还有索引都不能查看

 

 

posted @ 2019-02-01 10:52  淺景尘  阅读(2351)  评论(2编辑  收藏  举报
TOP