本文共 5462 字,大约阅读时间需要 18 分钟。
elk是日志分析的利器,但是就elk本身而言室友一个弊端的那就是任何人都可以访问和操作,权限的管理方面似乎是一个空白,但是幸好elastic公司对其有辅助的产品Shield,Shield是一个收费的项目,但幸好有一个月的试用期,那么接下来我们就来玩玩这个shield
Shield是Elastic公司官方发布的权限管理产品。其主要特性包括:
先决条件:
Java version >= java 7 Elasticsearch 2.4 Elasticsearch liscense 2.4.0 plugin在线安装:
终端进入elasticsearch的根目录,此时要注意以elasticsearch所属用户进行安装,同时注意elastic所属的用户组,若是属于root用户组,在安装时会报错提示没有权限
bin/plugin install licensebin/plugin install shield
这里默认安装的是最新版本
离线安装: 下载需要的licese和shield包 放在一个path下(eg:/opt/shield/),不要把zip包放在elasticsearch的plugins目录 然后执行安装命令(网友的说法是:这里的目录是绝对路径,不能写成相对路径):bin/plugin install /opt/shield/license-2.4.0.zipbin/plugin install /opt/shield/shield-2.4.0.zip
版本升级:
版本升级相对比较简单,只需要把原先的版本给remove掉,然后install就ok,因为卸载时shield会保留其配置bin/plugin remove shieldbin/plugin install shield
卸载:
bin/plugin remove shield
之后重启elasticsearch即可
当安装完shield后,启动elasticsearch
执行curl -X GET
会爆出以下error
{"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=\"shie
因为shield已经起作用了,当然你也可以通过web访问
我的是win10 的Edge跳出弹出框:创建用户:
我们可以在shell终端中创建一个es_admin的用户(在es的根目录下执行)bin/shield/esusers useradd es_admin -r admin
es_admin 为用户名,-r 表示指定的角色为admin
PS:我们可以使用以下命令查看帮助bin/shield/esusers -h
登录验证:
我们可以在web弹出的输入框输入账号和密码进行登录查看数据,也可以使用下面的这条命令进行验证 es_admin 是用户名,elasticsearch是我es_admin对应的密码master@ubuntu:/opt/elk/elasticsearch-2.4.0$ curl -u es_admin:elasticsearch -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"}
至此shield在elasticsearch上的简单部署已经完成
首先我们创建一个logstash用户,用于logstash访问elasticsearch
同样在elasticsearch的根目录下执行创建命令:master@ubuntu:/opt/elk/elasticsearch-2.4.0$ bin/shield/esusers useradd logstash -r logstashEnter new password:Retype new password:
然后当我们编写**.conf文件时,在output中加入
output{ ... elasticsearch{ .... user => "logstash" password => "logstash" }}
kibana的配置相对比较麻烦,我会在下一篇博客中集合具体的实例讲解:
Shield作为插件安装到elasticsearch中,一旦安装,插件会拦截入栈API调用,以强制执行身份验证和授权,插件还可以使用Secure Sockets Layer/Transport Layer Security (SSL/TLS)为来自网络和elasticsearch的网络流量提供加密,该插件还是用API拦截层,该层使身份验证和授权能够提供审计日志记录功能。
Shield已经定义了一组用户,以便对发出请求的用户进行身份验证,这组用户集合通过一个称为realm来定义,realm是配置为使用shield插件的用户数据库,native, file, LDAP, Active Directory, PKI支持 realm
shield定义的用户规则的路径为
ES_HOME/config/shield/roles.yml
# All cluster rights# All operations on all indicesadmin: cluster: - all indices: - names: '*' privileges: - all# monitoring cluster privileges# All operations on all indicespower_user: cluster: - monitor indices: - names: '*' privileges: - all# Read-only operations on indicesuser: indices: - names: '*' privileges: - read# Defines the required permissions for transport clientstransport_client: cluster: - transport_client# The required permissions for the kibana 4 serverkibana4_server: cluster: - monitor indices: - names: '.kibana*' privileges: - all - names: '.reporting-*' privileges: - all# The required role for logstash userslogstash: cluster: - manage_index_templates indices: - names: 'logstash-*' privileges: - write - read - create_index# Marvel user role. Assign to marvel users.marvel_user: indices: - names: '.marvel-es-*' privileges: [ "read" ] - names: '.kibana' privileges: - view_index_metadata - read# Marvel remote agent role. Assign to the agent user on the remote marvel cluster# to which the marvel agent will export all its dataremote_marvel_agent: cluster: [ "manage_index_templates" ] indices: - names: '.marvel-es-*' privileges: [ "all" ]
Shield的行动授权数据包含以下元素:
安全的Elasticsearch集群通过角色管理用户的权限。 角色具有唯一的名称,并标识一组权限,这些权限转换为资源上的权限。 用户可以具有任意数量的角色。 有两种类型的权限:集群和索引。 用户具有的总权限集由所有角色中的权限的并集来定义。根据使用的领域,Shield提供了向用户分配角色的适当方法。