Shield在ELK Stack中的权限保护实例

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: 打开微信扫一扫,关注微信公众号【数据与算法联盟】 转载请注明出处:http://blog.csdn.net/gamer_gyt 博主微博:http://weibo.com/234654758 Github:https://github.

这里写图片描述
打开微信扫一扫,关注微信公众号【数据与算法联盟】

转载请注明出处: http://blog.csdn.net/gamer_gyt
博主微博: http://weibo.com/234654758
Github: https://github.com/thinkgamer


写在前边的话

在上一篇博客中ELK Stack之Shield介绍介绍了Shiel的简单部署和一些工作机制,本篇博客就结合实例演示一下Shield在elk stack中的权限保护


Shield是什么

Shield作为插件安装到elasticsearch中,一旦安装,插件会拦截入栈API调用,以强制执行身份验证和授权,插件还可以使用Secure Sockets Layer/Transport Layer Security (SSL/TLS)为来自网络和elasticsearch的网络流量提供加密,该插件还是用API拦截层,该层使身份验证和授权能够提供审计日志记录功能。


为什么要使用Shield

ELK是一个开源的日志分析平台,可以对各类日志进行分析和研究,但是有一个缺陷就是无法对用户身份进行验证,造成的直接后果就是任何人都可以访问和查看数据,从而我们需要这样一个插件来对elk的访问做一个权限控制,elastic官方给出的是使用shield,当然也有开源的产品替代search-guard,下边我们就先来看下elastic官方给出的shield在elk中的使用。


环境说明

Ubuntu:16.04
Elasticsearch:2.4.0
Logstash:2.4.0
Kibana:4.6.1
Java:1.8.0_101


安装Shield到Elasticsearch

这里我们采用在线安装

bin/plugin install license
bin/plugin install shield

测试安装是否成功

Curl -X GET http://loclahost:9200

如果报错类似于下面这样,说明安装成功

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

创建一个es_admin用户,用来登录elasticsearch,按提示输入密码

bin/shield/esusers useradd es_admin -r admin

用新建的用户名进行测试

curl -u es_admin:your_password -X GET http://localhost:9200

提示如下

{
  "name" : "Mauvais",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "2.4.0",
    "build_hash" : "ce9f0c7394dee074091dd1bc4e9469251181fc55",
    "build_timestamp" : "2016-08-29T09:14:17Z",
    "build_snapshot" : false,
    "lucene_version" : "5.5.2"
  },
  "tagline" : "You Know, for Search"
}

OK


Kibana添加用户权限

为了给kibana加用户访问权限,同时为让kibana可以访问elasticsearch的数据,需要给kibana添加kibana server密码
创建一个用户用来访问elasticsearch

master@ubuntu:/opt/elk/elasticsearch-2.4.0$ bin/shield/esusers useradd kibana4-server -r kibana4_server
Enter new password:
Retype new password:

接下来是比较重要的一个环节

1:利用openssl创建 server.key ,server.crt ,serverpem

切换到kibana的目录,创建server_ssl目录,进入该目录创建所需的文件
Key生成:

openssl genrsa -des3 -out server.key 2048

这样是生成rsa私钥,des3算法,openssl格式,2048位强度。server.key是密钥文件名。为了生成这样的密钥,需要一个至少四位的密码。
利用以下命令创建没有密码的key,这里需要用到上边生成的server.key

openssl rsa -in server.key -out server.key

这里会提示你输入密码,密码就是上一条命令你输入的密码
这里的server.key就是没有密码的版本
生成CA的Crt:

openssl req -new -x509 -key server.key -out ca.crt -days 3650

会提示你输入相应的信息,除了Common Name (e.g. server FQDN or YOUR name) []:这条之外,别的都可以使用.代替,common name是用来进行https申请的,我这里写的是kibana的ip地址即本机的ip地址,因为我的elk在同一台机器上
Csr生成:

openssl req -new -key server.key -out server.csr

提示信息如crt的生成

Crt生成:

openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey server.key -CAcreateserial -out server.crt

输入key的密钥后,完成证书生成。-CA选项指明用于被签名的csr证书,-CAkey选项指明用于签名的密钥,-CAserial指明序列号文件,而-CAcreateserial指明文件不存在时自动生成。
最后生成了私用密钥:server.key和自己认证的SSL证书:server.crt
证书合并:

cat server.key server.crt > server.pem

最后在server_sll目录下有这些文件

master@ubuntu:/opt/elk/kibana-4.6.1-Linux-x86_64/server_ssl$ ls
ca.crt ca.srl server.crt server.csr server.key server.pem


2:配置Kibana

进入kibana的安装目录,执行:vim config/kibana.yml

(1):指定访问elasticsearch的用户和密码

elasticsearch.username: "kibana4-server"
elasticsearch.password: "kibana"

(2):设置server.ssl.key /server.ssl.crt/serve.pem

server.ssl.cert: /opt/elk/kibana-4.6.1-linux-x86_64/server_ssl/server.crt
server.ssl.key: /opt/elk/kibana-4.6.1-linux-x86_64/server_ssl/server.key
elasticsearch.ssl.ca: /opt/elk/kibana-4.6.1-linux-x86_64/server_ssl/server.pem

(3):设置elasticsearch.url

elasticsearch.url: "http://192.168.10.110:9200" 

(4):设置shield.encryptionKey

shield.encryptionKey: "something_at_least_32_characters"

(5):设置shield.sessionTimeout

shield.sessionTimeout: 600000

3:在kibana中安装Shield

bin/kibana plugin –install kibana/shield/latest

Roles.yml文件的配置

roles.yml的位置

/opt/elk/elasticsearch-2.4.0/config/shield/roles.yml

我们拿其中一个举例说一下

#The required permissions for the kibana 4 server
kibana4_server:   #用户组
  cluster:     
      - monitor
  indices:        #权限
    - names: '.kibana*'  #索引名称
      privileges:        #用户可对该索引执行的操作
        - all            #这里是给隶属于kibana4_server的用户所有的执行权限
    - names: '.reporting-*'
      privileges:
        - all

编辑roles.yml,添加用户组 my_kibana_user 用户组,这里只给了read的权限

my_kibana_user:
  cluster:
      - monitor
  indices:
    - names: 'logstash-*'
      privileges:
        - view_index_metadata
        - read
    - names: '.kibana*' 
      privileges:
        - manage
        - read
        - index

接下来创建一个kibana属于my_kibana_user用户组

master@ubuntu:/opt/elk/elasticsearch-2.4.0/config/shield$ /opt/elk/elasticsearch-2.4.0/bin/shield/esusers useradd kibana -r my_kibana_user
Enter new password:
Retype new password:
master@ubuntu:/opt/elk/elasticsearch-2.4.0/config/shield$ /opt/elk/elasticsearch-2.4.0/bin/shield/esusers list
logstash       : logstash
kibana4-server : kibana4_server
es_admin       : admin
kibana         : my_kibana_user

logstash配置Shield

创建一个logstash用户,用来连接elasticsearch

master@ubuntu:/opt/elk/elasticsearch-2.4.0$ bin/shield/esusers useradd logstash -r logstash
Enter new password:
Retype new password:

接着我们依旧测试Rsyslog发送日志
在logstash目录下便捷rsyslog.conf,加入

input {
  tcp{
    port => 5000
    type => syslog
  }
  udp{
    port => 5000
    type => syslog
  }
}
output {
  stdout {
    codec=> rubydebug
  }
  elasticsearch {
    hosts => ["192.168.10.110:9200"]

    user => "logstash"      #logstash与elasticsearch交互的用户名
    password => "logstash"   #这个是logsatsh对应的密码
  }
}

配置rsyslog的配置文件

vim /etc/rsyslog.conf

加入以下两行,用于发送日志

*.* @@localhost:5000
*.* @localhost:5000

重启rsyslog服务

sudo /bin/systemctl restart rsyslog.service


启动ELK,进行测试

至此我们的整体环境已经编辑OK,使用es_admin登录,该用户所属用户组为admin,对elk有所有的执行权限
输入 https://192.168.10.110:5601
这里写图片描述

输入账号和密码,在shell 执行 ssh localhost进行测试

这里写图片描述

然后我们删除一下索引进行测试

这里写图片描述

可以删除
然后logout,使用kibana用户登录,该用户隶属于my_kibana_user用户组,该用户组只有read权限

这里写图片描述

提示错误,没有权限

这里写图片描述


over !

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
6月前
|
存储 Prometheus 监控
Prometheus vs. ELK Stack:容器监控与日志管理工具的较量
随着容器化技术的广泛应用,容器监控与日志管理成为了关键任务。本文将对两种常用工具进行比较与选择,分别是Prometheus和ELK Stack。Prometheus是一款开源的监控系统,专注于时序数据的收集和告警。而ELK Stack则是一套完整的日志管理解决方案,由Elasticsearch、Logstash和Kibana三个组件组成。通过比较它们的特点、优势和适用场景,读者可以更好地了解如何选择适合自己需求的工具。
|
6月前
|
Go 数据处理 Docker
elk stack部署自动化日志收集分析平台
elk stack部署自动化日志收集分析平台
170 0
|
存储 消息中间件 运维
Kubernetes中部署ELK Stack日志收集平台(上)
Kubernetes中部署ELK Stack日志收集平台
Kubernetes中部署ELK Stack日志收集平台(上)
|
6月前
|
Prometheus 监控 Cloud Native
Prometheus VS ELK Stack:容器监控与日志管理工具的比较与选择
在容器化时代,有效的容器监控与日志管理工具对于确保应用程序的可靠性和可维护性至关重要。本文将比较两个主流工具,Prometheus和ELK Stack,探讨它们在容器监控和日志管理方面的特点、优势和适用场景,帮助读者做出明智的选择。
|
存储 监控 安全
【Elastic Stack-初识篇】 ELK介绍、搭建最新 ELK 日志分析系统
【Elastic Stack-初识篇】 ELK介绍、搭建最新 ELK 日志分析系统
1029 0
|
消息中间件 缓存 负载均衡
【日志架构】ELK Stack + Kafka 端到端练习
【日志架构】ELK Stack + Kafka 端到端练习
|
消息中间件 监控 固态存储
带你读《Elastic Stack 实战手册》之71:——4.1.3.企业ELK日志搜索引擎
带你读《Elastic Stack 实战手册》之71:——4.1.3.企业ELK日志搜索引擎
121 0
BXA
|
Prometheus Kubernetes 监控
搭建高效微服务架构:Kubernetes、Prometheus和ELK Stack的完美组合
微服务架构是一种软件设计模式,它将单个应用程序拆分成一组更小、更独立的服务。每个服务在自己的进程中运行,并使用轻量级通信机制进行通信。由于每个服务都是独立的,因此可以独立部署、扩展和更新,从而使开发和运维更加容易。
BXA
423 0
|
消息中间件 数据采集 存储
客户端同学应该理解的 ELK Stack 组件知识
客户端同学应该理解的 ELK Stack 组件知识
192 0
客户端同学应该理解的 ELK Stack 组件知识