集中式日志分析平台 - ELK Stack - 安全解决方案 X-Pack

 

96 
大数据之心 
 0.6 2017.02.22 15:36* 字数 2158 阅读 16457评论 7

简介

X-Pack 已经做为 Elastic 公司单独的产品线,前身是 ShieldWatcherMarvelGraph, 和 reporting,先来讲说这几个爸爸是作什么的吧:javascript

  • Shield: 提供对数据的 Password-Protect,以及加密通讯、基于角色的权限控制,IP 过滤,审计,能够有效地:
    • 防止未受权的访问:基于 Password-Protect,基于角色的权限控制,IP过滤;
    • 保证数据的完整性:基于消息认证和 TLS/SSL 加密;
    • 审计跟踪:能够知道谁在何时对数据作了什么;
  • Watcher: 提供对数据操做的变动的监控和报警。
  • Marvel: 基于 Kibana 的插件,主要用于监控 ES 集群。能够看到集群的健康情况、实时的性能指标,分析历史集群、索引、节点的指标等。
  • Graph: 用于分析数据间的关系。
  • Reporting: 用于快速生成 Kibana Visualization 和 Dashboard 的报表,能够对生成的时间定制计划,而且能够由某些特定条件触发。

再来看看咱们的儿子 X-Pack 是作啥的,哦,他就是他们的儿子,一个大合集,便于安装、不用为版本兼容性犯愁,能够灵活 disable / enable 其中的各个组件。他还多干了一件事儿,能够监控 Logstash。html

关于免费和收费版本,版本功能比较能够查看:https://www.elastic.co/subscriptionsjava

免费版本注册地址:https://register.elastic.co/xpack_registershell

付费版本(分为黄金、白金级别)购买地址:https://www.elastic.co/subscriptions/xpack数据库

默认的免费版本有一个月的 trial 试用期。免费版本试用期只包含 ES 集群监控、图分析和可视化,基于角色的 ES 权限控制和搜索用户信息的功能。不包含:缓存

  • 安全组件 Shield:
    • TLS/SSL加密;
    • LDAP的整合;
    • 日志审计;
    • 第三方的认证域整合;
  • 报警组件 Watcher;
  • 报表组件 Reporting;

总的来讲免费版本对于安全组件这块什么都不支持。安全

 
呵呵呵呵

安装

安装 X-Pack 前必须安装 ES 和 Kibana ,咱们使用的是 5.2.1 版本 集中式日志分析平台 - ELK Stack - 部署篇。X-Pack 咱们也使用 5.2.1,咱们来说讲如何离线安装吧。bash

Step1. 下载 X-Pack Zip 文件:https://artifacts.elastic.co/downloads/packs/x-pack/x-pack-5.2.1.zip (sha1),尼玛有119MB那么大。服务器

Step2. 上传 zip 文件至服务器 /tmp 目录;oracle

Step3. 在 ES 安装目录运行 bin/elasticsearch-plugin install 命令 :

bin/elasticsearch-plugin install file:/tmp/x-pack-5.2.1.zip

如下输出表示安装成功:

-> Downloading file:/home/admin/x-pack-5.2.1.zip [=================================================] 100% @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: plugin requires additional permissions @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * java.lang.RuntimePermission accessClassInPackage.com.sun.activation.registries * java.lang.RuntimePermission getClassLoader * java.lang.RuntimePermission setContextClassLoader * java.lang.RuntimePermission setFactory * java.security.SecurityPermission createPolicy.JavaPolicy * java.security.SecurityPermission getPolicy * java.security.SecurityPermission putProviderProperty.BC * java.security.SecurityPermission setPolicy * java.util.PropertyPermission * read,write * java.util.PropertyPermission sun.nio.ch.bugLevel write * javax.net.ssl.SSLPermission setHostnameVerifier See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html for descriptions of what these permissions allow and the associated risks. Continue with installation? [y/N]y -> Installed x-pack 

Step4. 在 Kibana 安装目录运行 bin/kibana-plugin install 命令安装:

bin/kibana-plugin install file:/tmp/x-pack-5.2.1.zip

如下输出表示安装成功:

Attempting to transfer from file:/home/admin/x-pack-5.2.1.zip
Transferring 124956667 bytes....................
Transfer complete
Retrieving metadata from plugin archive
Extracting plugin archive
Extraction complete
Optimizing and caching browser bundles...
Plugin installation complete

Step5. 在 Logstash 安装目录运行 bin/logstash-plugin install 命令安装:

bin/logstash-plugin install file:/tmp/x-pack-5.2.1.zip 

如下输出表示安装成功:

Installing file: /home/admin/x-pack-5.2.1.zip
Install successful

功能开关

咱们能够经过如下配置进行功能开关:

Setting Description
xpack.security.enabled 设置为 false 能够关闭 X-Pack security 功能。须要在 elasticsearch.yml 和 kibana.yml 同时配置。
xpack.monitoring.enabled 设置为 false 能够关闭 X-Pack monitoring 功能。 须要在elasticsearch.yml 和 kibana.yml 同时配置。
xpack.graph.enabled 设置为 false 能够关闭 X-Pack graph 功能。 须要在elasticsearch.yml 和 kibana.yml 同时配置。
xpack.watcher.enabled 设置为 false 能够关闭 Watcher 功能。 只须要在 elasticsearch.yml 配置。
xpack.reporting.enabled 设置为 false 能够关闭 reporting 功能。 只须要在 kibana.yml 配置。

重启服务

咱们须要重启三个服务:

./bin/logstash -f config/logstash.conf 2>&1 &
/home/admin/soft/elasticsearch-5.2.1/bin/elasticsearch &
./bin/kibana --verbose > kibana.log 2>&1 &

重启后发现日志数据没法上传到 ES,filebeat 报错:

2017-02-22T14:01:27+08:00 ERR Failed to publish events caused by: read tcp 172.16.134.3:56109->172.16.134.2:5044: i/o timeout

logstash 的 5044 端口能够访问,查看 logstash 日志:

[2017-02-22T14:02:21,705][WARN ][logstash.outputs.elasticsearch] UNEXPECTED POOL ERROR {:e=>#<LogStash::Outputs::ElasticSearch::HttpClient::Pool::NoConnectionAvailableError: No Available connections>}
[2017-02-22T14:02:21,705][ERROR][logstash.outputs.elasticsearch] Attempted to send a bulk request to elasticsearch, but no there are no living connections in the connection pool. Perhaps Elasticsearch is unreachable or down? {:error_message=>"No Available connections", :class=>"LogStash::Outputs::ElasticSearch::HttpClient::Pool::NoConnectionAvailableError", :will_retry_in_seconds=>64}

调用 ES 服务 curl http://172.16.134.2:9200

{"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication token for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}}],"type":"security_exception","reason":"missing authentication token for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}},"status":401}

发现是出现了认证失败,笔者推算和 logstash 访问 ES 未以受权方式进行致使,修改 logstash.conf 在 output 段里添加:

user => 'elastic'
password => 'changeme'

修改 logstash.yml,添加:

xpack.monitoring.elasticsearch.url: "http://172.16.134.2:9200" xpack.monitoring.elasticsearch.username: "logstash_system" xpack.monitoring.elasticsearch.password: "changeme" 

重启服务后OK。

功能使用

打开 Kibana 页面,笔者很尴尬,根本不知道用户名和密码是啥,OK 万能的谷歌告诉咱们了:

username: elastic
password: changeme

Kibana 的界面多了以下几个功能跳转:Graph Monitoring elastic Logout

Graph

Graph 能够根据实时查询,对给定的 field 获得图视角的关联关系,笔者以一个快速发现集群中哪台 host 有明显 ERROR 为例讲解下如何使用。Index Pattern 咱们选择 filebeat-*,咱们添加 两个 filed:host log_level,而后在咱们的搜索框添加 hour:14 AND minute: [20 TO 37] ,获得如下绘图:

 
Graph

能够直观的看到咱们的两台被采集机器和日志级别的关系,v134003.yn1 INFO 日志较多,v134008.yn1 ERROR 日志较多。点击灰色的边,咱们能够看到这个 Link 的概况:

 
Link Summary

有一个直观的包含交集图,还有3个数字,分别表示:

  • 1022 个文本中包含了 v134003.yn1 这个 term;
  • 986 个文本中同时包含了 v134003.yn1 和 INFO 这2个 term;
  • 2013 个文本中包含了 INFO 这个 term;

Monitoring(免费版本只支持单 ES 集群)

查看 ES 集群的 health:

 
ES Cluster Health
  • 集群级别:
    • Uptime : 集群运行时间;
  • 节点级别:
    • Disk Available:可用磁盘;
    • JVM Heap: JVM 使用状况;
  • 索引级别:
    • Indices:索引数量,至关于数据库数;
    • Documents:文档数量,至关于记录数;
    • Disk Usage:磁盘使用状况;
    • Primary Shards:分片数;
    • Replica Shards:冗余分片数;
Overview

相较于集群健康视图,这里的指标更多:

  • Serach Rate (/s):近1小时的查询速率,QPS;
  • Search Latency (ms):近1小时的查询延迟;
  • Index Rate (/s):近1小时的索引速率,IPS;
  • Index Latency (ms):近1小时的索引延迟;
  • Shard Activity:对于 Shard 的操做历史;
Indices

索引视角的监控视图,包含如下指标:

  • Document Count:文档数;
  • Data:数据量;
  • Index Rate:索引速率;
  • Search Rate:查询速率;
  • Unassigned Shards:未分配的分片数;

点击 Index Name 能够进入查看对于索引的详细基础监控:

  • Index Memory (KB):索引内存使用,分为 Lucene、Term、Points;
  • Index Size (MB):索引大小;
  • Search Rate (/s):查询速率;
  • Indexing Rate (/s):索引速率;
  • Segment Count:段数;
  • Document Count:文档数;
  • Shard Legend:分片状态图谱,分为 PrimaryReplica,Relocating,Initializing,Unassigned Primary,Unassigned Replica 多个状态。

点击 Advanced 能够看到高级监控页面,请读者本身去感觉下。

Nodes

节点监控,首先看到的是概述指标:

  • CPU Usage: CPU 使用率;
  • Load Average:CPU 平均负载;
  • JVM Memory:JVM 使用状况;
  • Disk Free Space:磁盘空闲空间;
  • Shards:分片数;

点击某个节点咱们能够看到详细基础监控:

  • JVM Heap (GB):JVM 使用状况;
  • Index Memory (KB):索引占用内存;
  • CPU Utilization (%):CPU 使用率;
  • System Load:系统负载;
  • Latency (ms):延迟,分为索引和查询;
  • Segment Count:段数量;
  • Shard Legend:分片状态图谱, PrimaryReplica,Relocating,Initializing多个状态。

基于角色的权限控制

该功能的入口在 Management -> Users/RolesUsers 能够方便的管理用户而且对其赋予角色,角色和权限挂钩。Roles 能够方便的管理角色,对其进行赋权。Role 是 Permission 的集合,Permission 是 Privilege 的集合,下面来讲说权限:

  • 集群权限(Cluster Privilege);
  • Run As Privileges:能够使得新建角色拥有所选用户集的权限;
  • 索引权限(Index Privilege):
    • Indices:指定在哪些索引上赋权;
    • Privileges:指定赋予哪些权限;
    • Granted Documents Query(可选):指定在哪些 Query 上赋权;
    • Granted Fields(可选):指定在哪些 fields 上赋权;

其中,集群权限和索引权限的详细细分权限以下:

Cluster Privileges

权限类型 权限描述
all 全部群集管理操做,如快照,节点关闭/从新启动,设置更新,从新路由或管理用户和角色。
monitor 全部集群只读操做,如集群健康状态,热线程,节点信息,节点和集群统计信息,快照/恢复状态,挂起集群任务。
manage 构建在监视器上,并添加可更改集群中值的集群操做。这包括快照,已检查的设置和从新路由。此权限不包括管理安全性的能力。
manage_security 全部与安全性相关的操做,如对用户和角色的CRUD操做以及缓存清除。
manage_index_templates 对索引模板的全部操做。
manage_pipeline 对管道的全部操做。
transport_client 传输客户端链接所需的全部权限。

Indices Privileges

权限类型 权限描述
all 全部索引操做权限。
monitor 监控(恢复,细分信息,索引统计信息和状态)所需的全部操做。
manage 全部监视器权限和索引管理( aliases, analyze, cache clear, close, delete, exists, flush, mapping, open, force merge, refresh, settings, search shards, templates, validate
view_index_metadata 只读访问索引元数据(aliases, aliases exists, get index, exists, field mappings, mappings, search shards, type exists, validate, warmers, settings)。此权限主要供Kibana用户使用。
read 只读访问操做(count, explain, get, mget, get indexed scripts, more like this, multi percolate/search/termvector, percolate, scroll, clear_scroll, search, suggest, tv)。还授予对更新映射操做的访问权限。
index 索引和更新文档的权限。还授予对更新映射操做的访问权限。
create 索引文档的权限。还授予对更新映射操做的访问权限。
delete 删除文档的权限。
write 对文档执行全部写操做的权限,包括对文档进行索引,更新和删除以及执行批量操做的权限。还授予对更新映射操做的访问权限。
delete_index 删除索引的权限。
create_index 建立索引的权限。建立索引请求可能包含在建立后添加到索引的别名。在这种状况下,请求还要求在索引和别名名称上具备manage特权。

具体的 Privilege 能够参看:https://www.elastic.co/guide/en/x-pack/current/security-privileges.html

小结

本文主要介绍了安全解决方案 X-Pack 的概况、免费和收费版本的区别、部署步骤以及基本免费功能的使用。基于此,咱们的结论是,对于企业级安全解决方案来讲,免费版本的 X-Pack 的确力不从心,须要购买或者结合第三方免费插件进行安全方案升级。

Q&A

Q: 打开 Kibana 遇到 Login is disabled because your license has expired. Please extend your license or disable Security in Elasticsearch.
A: 说明体验的 x-pack 功能证书过时,须要 disable 以后才能够恢复使用,在 elasticsearch.yml 中添加:

xpack.security.enabled: false
相关文章
相关标签/搜索