Kibana安全特性之权限控制
1. 前言
在之前的例子中,我们都是直接输入地址访问的,系统也没有提示我们要输入用户名密码。但是,在实际使用过程中不大可能所有人都是超级管理员可以做任何操作,一定是有权限控制的,这里我们借助X-Pack插件来实现(PS:X-Pack是收费的,可以申请试用30天。)
2. 安装X-Pack
用下列命令安装插件:
bin/kibana-plugin install <package name or URL>
例如:
bin/kibana-plugin install x-pack
事实上,我们无需再次安装X-Pack插件,因为在安装Kibana的时候默认已经安装了。
By default, when you install Elasticsearch, X-Pack is installed.
By default, when you install Kibana, X-Pack is installed.
3. 在Elasticsearch中配置Security
X-Pack安全性使你能够轻松地保护集群。通过X-Pack安全性,你可以对数据进行密码保护,并实现更高级的安全措施,如加密通信、基于角色的访问控制、IP过滤和审计。
第1步:检查你的license中是否包含X-Pack安全特性
如果你想尝试所有的X-Pack特性,你可以开始一个30天的试用。在试用期结束时,你可以购买以继续使用X-Pack组件的全部功能。
这里,我们先试用30天再说
可以看到,试用以后我们的license从“Basic”变成“Trial”。而且,从控制台日志中我们可以看到这个变化:
log [03:49:03.965] [info][license][xpack] Imported license information from Elasticsearch for the [monitoring] cluster: mode: basic | status: active
log [03:55:25.049] [info][license][xpack] Imported changed license information from Elasticsearch for the [data] cluster: mode: trial | status: active | expiry date: 2018-09-18T11:55:25+08:00
第2步:检查你的集群中的每个节点配置中xpack.security.enabled是否设置为true。如果你用的是一个trail license,这个配置项默认是false。
xpack.security.enabled: true
配置项
xpack.security.enabled
设置为true则在节点上启用X-Pack安全特性,false表示禁用X-Pack安全特性。(PS:推荐明确设置这个值)
xpack.security.authc.accept_default_password
在elasticsearch.yml中,将其设置为false,以禁用默认密码。默认密码是“changeme”。
xpack.security.authc.anonymous.username
配置匿名用户
xpack.security.authc.anonymous.roles
匿名用户关联的角色
例如:
xpack.security.authc:
anonymous:
username: anonymous_user
roles: role1, role2
authz_exception: true
xpack.security.dls_fls.enabled
设置为false表示阻止文档和字段级别的访问控制。默认是true。
xpack.security.authc.token.enabled
设置为false表示禁用token服务。默认true。
xpack.security.authc.realms
配置realms,例如:
xpack.security.authc.realms: realm1:
type: native
order: 0
... realm2:
type: ldap
order: 1
... realm3:
type: active_directory
order: 2
...
...
- type:可选值有native, ldap, active_directory, pki, file
- order:realm在realm链中的优先级,数值越小,优先级越高
- enabled:默认true,表示启用这个realm
第3步:为内部节点通信配置TSL/SSL
这需要你的集群中至少有两个节点。如果你的集群中只有一个节点,那么可以忽略这一步。
更多参见
https://www.elastic.co/guide/en/elasticsearch/reference/6.3/configuring-tls.html#node-certificates
https://www.elastic.co/guide/en/elasticsearch/reference/6.3/configuring-tls.html
第4步:启动Elasticsearch
第5步:为所有内置用户设置密码
X-Pack安全性提供了内置的用户来帮助你启动和运行。elasticsearch-setup-password命令是首次设置内置用户密码的最简单方法。
内置用户有4个,如下:
- elastic 超级用户
- Kibana 用于连接并且和Elasticsearch通信的
- logstash_system 用于在Elasticsearch中存储监控信息
- beats_system 用于在Elasticsearch中存储监控信息
例如,你可以以交互模式运行命令,依次为这些用户设置新密码:
bin/elasticsearch-setup-passwords interactive
(画外音:elasticsearch-setup-passwords命令只能运行一次,不能再运行第二次。此后如果你想修改密码的话,可以在Kibana UI界面中通Management --> Users 或者通过API的方式来修改密码)
第6步:选择你想要用来认证用户的realms类型
例如:https://www.elastic.co/guide/en/elasticsearch/reference/6.3/configuring-native-realm.html
第7步:设置用于访问Elasticsearch的角色和用户。例如:
curl -XPOST -u elastic 'localhost:9200/_xpack/security/role/events_admin' -H "Content-Type: application/json" -d '{
"indices" : [
{
"names" : [ "events*" ],
"privileges" : [ "all" ]
},
{
"names" : [ ".kibana*" ],
"privileges" : [ "manage", "read", "index" ]
}
]
}' curl -XPOST -u elastic 'localhost:9200/_xpack/security/user/johndoe' -H "Content-Type: application/json" -d '{
"password" : "userpassword",
"full_name" : "John Doe",
"email" : "john.doe@anony.mous",
"roles" : [ "events_admin" ]
}'
第8步:启用审计
xpack.security.audit.enabled: true
3.1. 用户管理API
3.1.1. 查看用户
# 查看所有用户
curl -X GET -u elastic "localhost:9200/_xpack/security/user"
# 查看指定用户
curl -X GET -u elastic "localhost:9200/_xpack/security/user/jacknich"
例如:
3.1.2. 创建用户
例如:
curl -X POST -u elastic "localhost:9200/_xpack/security/user/jacknich" -H 'Content-Type: application/json' -d'
{
"password" : "j@rV1s",
"roles" : [ "admin", "other_role1" ],
"full_name" : "Jack Nicholson",
"email" : "jacknich@example.com",
"metadata" : {
"intelligence" :
}
}
'
在这些参数中,password 和 roles 是必须的。
(画外音:加上“-u elastic”是因为只有elastic用户有管理用户权限,另外,请求参数后面可以带上?pretty,这样返回的格式会好看一点儿)
3.1.3. 修改密码
curl -X POST "localhost:9200/_xpack/security/user/jacknich/_password" -H 'Content-Type: application/json' -d'
{
"password" : "s3cr3t"
}
'
3.1.4. 禁用/启用/删除用户
curl -X PUT "localhost:9200/_xpack/security/user/jacknich/_disable"
curl -X PUT "localhost:9200/_xpack/security/user/jacknich/_enable"
curl -X DELETE "localhost:9200/_xpack/security/user/jacknich"
3.2. 角色管理API
curl -X GET "localhost:9200/_xpack/security/role"
curl -X GET "localhost:9200/_xpack/security/role/my_admin_role"
curl -X DELETE "localhost:9200/_xpack/security/role/my_admin_role"
curl -X POST "localhost:9200/_xpack/security/role/my_admin_role" -H 'Content-Type: application/json' -d'
{
"cluster": ["all"],
"indices": [
{
"names": [ "index1", "index2" ],
"privileges": ["all"],
"field_security" : { // 可选
"grant" : [ "title", "body" ]
},
"query": "{\"match\": {\"title\": \"foo\"}}" // 可选
}
],
"run_as": [ "other_user" ], // 可选
"metadata" : { // 可选
"version" :
}
}
'
3.3. 基于角色的访问控制(RBAC)
X-Pack安全性提供了一种基于角色的访问控制(RBAC)机制,它使你能够通过向角色分配特权和向用户或组分配角色来授权用户。
4. 在Kibana中配置Security
当在你的集群上启用X-Pack时,Kibana用户必须登录成功后才可以访问。你可以为Kibana用户配置X-Pack安全角色,以控制用户可以访问哪些数据。
通过Kibana向Elasticsearch发出的大多数请求都通过登录用户的凭证进行认证的。然而,Kibana服务器需要向Elasticsearch集群发出一些内部请求。因此,你必须为Kibana服务器配置用于这些请求的凭证。
启用了X-Pack安全性之后,如果你加载一个Kibana指示板,该指示板访问你没有权限查看的索引中的数据,那么你将得到一个索引不存在的错误。X-Pack安全性目前还没有提供一种方法来控制哪些用户可以加载哪些仪表板。
为了在Kibana中应用X-Pack安全特性:
第1步:在Elasticsearch中配置security
第2步:配置Kibana使用内置账户,例如:
第3步:在kibana.yml配置文件中指定xpack.security.encryptionKey,例如:
第4步:可选的:更改默认的session过期时间,例如:
xpack.security.sessionTimeout: 600000
第5步:可选的:配置Kibana加密通信
第6步:重启Kibana
第7步:现在一个用户身份认证机制,并授予用户所需的权限
你可以在Kibana中管理权限(Management / Security / Roles 页面)
如果你用native realm with Basic Authentication,你可以在Management / Security / Users 页面指定角色或者用APIs。
第8步:授权用户用Kibana工作的时候可以访问哪些索引
(画外音:你可以根据需要为Kibana用户定义许多不同的角色)
第9步:检查用户是否可以正常登录 http://localhost:5601
4.1. 配置项
xpack.security.enabled
设置为true(默认)以启用X-Pack安全特性
xpack.security.cookieName
cookie的名字。默认是“sid”。
xpack.security.encryptionKey
用于加密cookie中的凭证的32个或更多字符的任意字符串。关键是这个密钥不向Kibana的用户公开。默认情况下,在内存中会自动生成一个值。如果使用这种默认行为,当Kibana重新启动时,所有会话都将失效。
xpack.security.sessionTimeout
设置会话持续时间(以毫秒为单位)。默认情况下,会话保持活动状态,直到浏览器关闭。
4.2. Kibana用户身份认证
Kibana支持两种认证机制:
- Basic Authentication
- SAML Single Sign-On
4.2.1. Basic Authentication
Basic Authentication在登录Kibana时需要一个用户名和密码。默认它是启用的,并且是基于Elasticsearch提供的 native realm
4.2.2. SAML Single Sign-On
SAML身份验证允许用户使用外部身份提供者(如Okta或Auth0)登录Kibana。在Kibana中设置SAML之前,请确保在Elasticsearch中启用和配置SAML。
更多参见 https://www.elastic.co/guide/en/kibana/current/kibana-authentication.html
4.3. User authentication(用户认证)
为了访问受保护的资源,一个用户必须通过密码、凭证、或者其它方式(通常是token)来证明他们的身份标识。
认证过程由一个或多个被称为“realms”的认证服务来处理。
你可以用本机支持管理和认证用户,或者集成外部的用户管理系统(比如:LDAP 和 Active Directory)。
X-Pack安全特性提供了内置的realms,比如:native,ldap,active_directory,pki,file 和 saml。如果没有一个内置realms满足你的需求,你还可以构建自己的realm。
当启用X-Pack安全特性时,根据你配置的realms,你必须将用户凭证附加到发送到Elasticsearch的请求中。例如,当使用支持用户名和密码的realms时,你可以简单的将basic auth头信息添加到请求中。
4.4. 在Kibana管理后台界面中取管理用户
5. 演示
5.1. kibana.yml
server.port: 5601 server.host: "192.168.101.5" elasticsearch.url: "http://localhost:9200" elasticsearch.username: "kibana"
elasticsearch.password: "123456" xpack.security.enabled: true
xpack.security.encryptionKey: "4297f44b13955235245b2497399d7a93"
5.2. elasticsearch.yml
xpack.security.enabled: true
5.3. 登录
6. 其它相关链接
《Logstash》
《Filebeat》
《Kibana》
Kibana安全特性之权限控制的更多相关文章
- ELK学习笔记之Kibana权限控制和集群监控
详细请参考如下四篇博客,注意ELK6中移除了Xpack的默认账户和密码,需要手动设置 Kibana安全特性之权限控制 ELK 集群 Kibana 使用 X-Pack 权限控制,监控集群状态,警报,监视 ...
- Kibana访问权限控制
ELK平台搭建完成后,由于Kibana的服务也是暴露在外网,且默认是没有访问限制的(外部所有人都可以访问到),这明显不是我们想要的,所以我们需要利用Nginx接管所有Kibana请求,通过Nginx配 ...
- 尝试asp.net mvc 基于controller action 方式权限控制方案可行性
微软在推出mvc框架不久,短短几年里,版本更新之快,真是大快人心,微软在这种优秀的框架上做了大量的精力投入,是值得赞同的,毕竟程序员驾驭在这种框架上,能够强力的精化代码,代码层次也更加优雅,扩展较为方 ...
- MongoDB 安全和访问权限控制
MongoDB的访问控制能够有效保证数据库的安全,访问控制是指绑定Application监听的IP地址,设置监听端口,使用账户和密码登录 一,访问控制的参数 1,绑定IP地址 mongod 参数:-- ...
- 基于.net mvc的校友录(五、web.config对的配置以及filter实现的权限控制)
web.config配置文件 此文件是整个系统的配置中心,它告诉iis服务器本网站需要哪些运行时环境,需要哪些环境,将要进行哪些操作,开发人员也会将一个常量性的数据放在此配置中,以备系统全局调用.此文 ...
- Spring Security(17)——基于方法的权限控制
目录 1.1 intercept-methods定义方法权限控制 1.2 使用pointcut定义方法权限控制 1.3 使用注解定义方法权限控制 1.3.1 JSR-25 ...
- asp.net core mvc权限控制:权限控制介绍
在进行业务软件开发的时候,都会涉及到权限控制的问题,asp.net core mvc提供了相关特性. 在具体介绍使用方法前,我们需要先了解几个概念: 1,claim:英文翻译过来是声明的意思,一个cl ...
- asp.net core mvc权限控制:在视图中控制操作权限
在asp.net core mvc中提供了权限验证框架,前面的文章中已经介绍了如何进行权限控制配置,权限配置好后,权限验证逻辑自动就会执行,但是在某些情况下,我们可能需要在代码里或者视图中通过手工方式 ...
- asp.net core mvc权限控制:分配权限
前面的文章介绍了如何进行权限控制,即访问控制器或者方法的时候,要求当前用户必须具备特定的权限,但是如何在程序中进行权限的分配呢?下面就介绍下如何利用Microsoft.AspNetCore.Ident ...
随机推荐
- IP地址字符串与int整数之间的无损转化
今天鹅厂店面,最后问了一个ip地址字符串和整数间无损转化的问题,晚上有时间了手撸了一下代码. public class IPstr { public static void main(String a ...
- Java类是如何默认继承Object的
前言 学过Java的人都知道,Object是所有类的父类.但是你有没有这样的疑问,我并没有写extends Object,它是怎么默认继承Object的呢? 那么今天我们就来看看像Java这种依赖于虚 ...
- json转化技巧
如果用户是一级下拉菜单,二级联动,动态加载内容到二级菜单,并在下方内容处,随着用户选择的内容动态加载相应内容. 实现的方法其实很简单 select部分:一级菜单选择内容,ajax动态加载,因为内容固定 ...
- PTA L2-011 玩转二叉树 二叉树+bfs
思路: 先建树,然后按层次输出. #include<iostream> #include<cstring> #include<cstdio> #include< ...
- python+matplotlib+绘制不同图标类型
#==================================================================#首先需要导入两个文件import matplotlib.pypl ...
- Cause: java. lang.InstantiationException: tk.mybatis.mapper.provider.base.BaseInsertProvider
相信现在Java Web开发都是用的mybatis吧,而用到mybatis很多人都不会错过通用mapper吧! (纯属瞎扯淡...qwq). 如我上一篇博客所写,目前公司新项目,使用了通用mapper ...
- Java Concurrency in Practice——读书笔记
Thread Safety线程安全 线程安全编码的核心,就是管理对状态(state)的访问,尤其是对(共享shared.可变mutable)状态的访问. shared:指可以被多个线程访问的变量 mu ...
- myeclipse中配置自己安装的Tomcat
myeclipse中配置自己安装的Tomcat 在myeclipse中配置好jdk,Tomcat之后,如果是web项目需要部署运行,但在部署时发现配置好的Tomcat没有显示,只显示了myeclips ...
- error C2371: 'IServiceProvider' : redefinition; different basic types
需要将#include <windows.h>放到using namespace System;前面. #include <windows.h>using namespace ...
- TimesTen数据库的备份和恢复
建立不支持增量备份的全备份 做一个全备份,fileFull为不支持增量的全备份 $ ttbackup -type fileFull -dir /tmp/backupdir sampledb_1122( ...