标签:
ELK系统默认并不含有用户认证功能,基本上任何人都可以随意读写ElasticSearch的API并获取数据,这时该如何对ELK系统做好防护工作呢?
在读完这篇教程后,您可以学会:
这里我们使用Elastic公司的Shield来完成这个工作
Shield是Elastic公司为ElasticSearch开发的一个安全插件。在安装此插件后,Shield会拦截所有对ElasticSearch的请求,并加上认证与加密,保障ElasticSearch及相关系统的安全性。
它支持下面的功能:
使用Shield可以定义一系列已知的用户,并用其认证用户请求。这些用户存在于抽象的“域”中。一个域可能是下面几种类型:
Shield的权限控制包含下面几种元素:
read
,write
等。还可以是indicies:/data/read/perlocate
等某种对象特有的操作。read
on the "products" index
。Shield使用SSL/TLS加密相应端口(9300),防止集群被未授权的机器监听或干扰。
Shield支持基于IP的访问控制。
Shield可以在ElasticSearch的日志中输出每次鉴权操作的详细信息,包括用户名,操作,操作是否被允许等等。
/usr/share/elasticsearch
。cd /usr/share/elasticsearch
安装ElasticSearch许可插件:bin/plugin -i elasticsearch/license/latest
Shield是商业插件,需要ElasticSearch的商业许可。第一次安装许可的时候,会提供30天的免费试用权限。30天后,Shield将会屏蔽
cluster health
,cluster stats
,index stats
这几个API,其余功能不受影响。
下面安装Shield插件:bin/plugin -i elasticsearch/shield/latest
将Shield配置文件移动或链接至/etc/elasticsearch/shield
目录中:ln
-s /usr/share/elasticsearch/config/shield /etc/elasticsearch/shield
。
进行这一步的原因是ElasticSearch服务在启动时会在
/etc/elasticsearch/shield
目录下寻找Shield配置文件,而这些配置文件在安装Shield时会出现在/usr/share/elasticsearch/config/shield
中。
重启ElasticSearch服务:service elasticsearch restart
bin/shield/esusers
useradd es_admin -r admin
curl -XGET
‘http://localhost:9200/‘
curl -u es_admin -XGET ‘http://localhost:9200/‘
如果认证失败的话,可能需要在/etc/elasticsearch/elasticsearch.yml
中加入下面的内容:
shield:
authc:
realms:
default:
type: esusers
order: 0
enabled: true
files:
users: "/etc/elasticsearch/shield/users"
users_roles: "/etc/elasticsearch/shield/users_roles"
到这里,Shield基本功能已经安装完毕。
/usr/share/elasticsearch/bin/shield/esusers useradd logstashserver -r logstash
output {
elasticsearch {
host => "192.168.6.144"
protocol => "http"
index => "logstash-%{type}-%{+YYYY.MM.dd}"
user => "logstashserver" #在这里加上Shield中role为Logstash的用户名
password => "woshimima" #别忘了密码
}
# stdout { codec => rubydebug }
}
之后重启Logstash服务即可。
/usr/share/elasticsearch/bin/shield/esusers
useradd kibanaserver -r kibana4_server
/opt/kibana/config/kibana.yml
,找到下面这一部分并修改:# If your Elasticsearch is protected with basic auth, this is the user credentials
# used by the Kibana server to perform maintence on the kibana_index at statup. Your Kibana
# users will still need to authenticate with Elasticsearch (which is proxied thorugh
# the Kibana server)
kibana_elasticsearch_username: kibanaserver #Kibana服务将用这个用户名访问ElasticSearch服务器。
kibana_elasticsearch_password: woshimima #密码
之后重启Kibana服务即可。您可能需要使用前面的es_admin
账户登录Kibana网页端。
在实际的生产环境中,经常需要让不同的角色访问不同的index,比如让Nginx管理员只能看到nginx相关的日志,Mail管理员只看到mail相关的用户,这时候就需要使用到权限控制功能。
首先我们编辑ElasticSearch服务器的/etc/elasticsearch/shield/roles.yml
,注释掉kibana4.indicies.*
部分,即去掉用户读取所有index的权限。如下:
# The required permissions for kibana 4 users.
kibana4:
cluster:
- cluster:monitor/nodes/info
- cluster:monitor/health
indices:
# ‘*‘:
# - indices:admin/mappings/fields/get
# - indices:admin/validate/query
# - indices:data/read/search
# - indices:data/read/msearch
# - indices:admin/get
‘.kibana‘:
- indices:admin/exists
- indices:admin/mapping/put
- indices:admin/mappings/fields/get
- indices:admin/refresh
- indices:admin/validate/query
- indices:data/read/get
- indices:data/read/mget
- indices:data/read/search
- indices:data/write/delete
- indices:data/write/index
- indices:data/write/update
- indices:admin/create
之后再roles.yml
的末尾加上相关用户的权限配置:
nginx_user: #nginx_user 角色定义
indices: #index部分
‘logstash-nginx*‘: read #指定nginx_user可以读取所有匹配‘logstash-nginx*‘的索引。
mail_user: #mail_user 角色定义,用法同上
indices:
‘logstash-mail*‘: read
现在我们使用esuser
新建两个用户,分属两个组
/usr/share/elasticsearch/bin/shield/esusers useradd demo_nginx -r nginx_user
/usr/share/elasticsearch/bin/shield/esusers useradd demo_mail -r mail_user
再把它们同时加入kibana4
组中:
/usr/share/elasticsearch/bin/shield/esusers roles demo_nginx -a kibana4
/usr/share/elasticsearch/bin/shield/esusers roles demo_mail -a kibana4
这时再用不同的用户登录Kibana界面,就可以看到不同的内容了。
使用Shield保护ElasticSearch平台--兼权限控制
标签:
原文地址:http://www.cnblogs.com/bmaker/p/5731327.html