DevOPS大数据运维及安全

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

2017-02-22  本文已影响10090人  大数据之心

简介

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

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

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

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

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

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

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

呵呵呵呵

安装

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

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

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

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.ymlkibana.yml 同时配置。
xpack.monitoring.enabled 设置为 false 可以关闭 X-Pack monitoring 功能。 需要在elasticsearch.ymlkibana.yml 同时配置。
xpack.graph.enabled 设置为 false 可以关闭 X-Pack graph 功能。 需要在elasticsearch.ymlkibana.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.confoutput 段里添加:

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个数字,分别表示:

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

查看 ES 集群的 health:

ES Cluster Health
Overview

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

Indices

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

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

点击 Advanced 可以看到高级监控页面,请读者自己去感受下。

Nodes

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

点击某个节点我们可以看到详细基础监控:

基于角色的权限控制

该功能的入口在 Management -> Users/RolesUsers 可以方便的管理用户并且对其赋予角色,角色和权限挂钩。Roles 可以方便的管理角色,对其进行赋权。RolePermission 的集合,PermissionPrivilege 的集合,下面来说说权限:

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

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
上一篇 下一篇

猜你喜欢

热点阅读