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.  其它相关链接


Elasticsearch

Logstash

Filebeat

Kibana

Filebeat模块与配置

Kibana安全特性之权限控制的更多相关文章

  1. ELK学习笔记之Kibana权限控制和集群监控

    详细请参考如下四篇博客,注意ELK6中移除了Xpack的默认账户和密码,需要手动设置 Kibana安全特性之权限控制 ELK 集群 Kibana 使用 X-Pack 权限控制,监控集群状态,警报,监视 ...

  2. Kibana访问权限控制

    ELK平台搭建完成后,由于Kibana的服务也是暴露在外网,且默认是没有访问限制的(外部所有人都可以访问到),这明显不是我们想要的,所以我们需要利用Nginx接管所有Kibana请求,通过Nginx配 ...

  3. 尝试asp.net mvc 基于controller action 方式权限控制方案可行性

    微软在推出mvc框架不久,短短几年里,版本更新之快,真是大快人心,微软在这种优秀的框架上做了大量的精力投入,是值得赞同的,毕竟程序员驾驭在这种框架上,能够强力的精化代码,代码层次也更加优雅,扩展较为方 ...

  4. MongoDB 安全和访问权限控制

    MongoDB的访问控制能够有效保证数据库的安全,访问控制是指绑定Application监听的IP地址,设置监听端口,使用账户和密码登录 一,访问控制的参数 1,绑定IP地址 mongod 参数:-- ...

  5. 基于.net mvc的校友录(五、web.config对的配置以及filter实现的权限控制)

    web.config配置文件 此文件是整个系统的配置中心,它告诉iis服务器本网站需要哪些运行时环境,需要哪些环境,将要进行哪些操作,开发人员也会将一个常量性的数据放在此配置中,以备系统全局调用.此文 ...

  6. Spring Security(17)——基于方法的权限控制

    目录 1.1     intercept-methods定义方法权限控制 1.2     使用pointcut定义方法权限控制 1.3     使用注解定义方法权限控制 1.3.1    JSR-25 ...

  7. asp.net core mvc权限控制:权限控制介绍

    在进行业务软件开发的时候,都会涉及到权限控制的问题,asp.net core mvc提供了相关特性. 在具体介绍使用方法前,我们需要先了解几个概念: 1,claim:英文翻译过来是声明的意思,一个cl ...

  8. asp.net core mvc权限控制:在视图中控制操作权限

    在asp.net core mvc中提供了权限验证框架,前面的文章中已经介绍了如何进行权限控制配置,权限配置好后,权限验证逻辑自动就会执行,但是在某些情况下,我们可能需要在代码里或者视图中通过手工方式 ...

  9. asp.net core mvc权限控制:分配权限

    前面的文章介绍了如何进行权限控制,即访问控制器或者方法的时候,要求当前用户必须具备特定的权限,但是如何在程序中进行权限的分配呢?下面就介绍下如何利用Microsoft.AspNetCore.Ident ...

随机推荐

  1. Goland2019.1破解

    Goland2019.1破解 Goland2019.1:http://www.jetbrains.com/goland/download/ 破解补丁:https://pan.baidu.com/s/1 ...

  2. scrapy 教程

    pip install Scrapy 结果报错,那就一个一个安装吧 一.安装  1.pip install wheel 后面的都一样 pip install lxml pip install pyop ...

  3. 图论之最短路径floyd算法

    Floyd算法是图论中经典的多源最短路径算法,即求任意两点之间的最短路径. 它可采用动态规划思想,因为它满足最优子结构性质,即最短路径序列的子序列也是最短路径. 举例说明最优子结构性质,上图中1号到5 ...

  4. 2018-4-5-MEMS

    微机电系统,研究生在学习纳米操作方面的知识的时候了解过一些,有时间的话写点东西温故知新.

  5. maven build时报错Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test

    [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ ...

  6. vue 使用瞬间

    vue 使用瞬间 一, 图片类 <img :src="data.deptLogo | imgUrl" onerror="this.src='../img/headD ...

  7. iptables安装

    1.安装iptable iptable-service #先检查是否安装了iptables service iptables status #安装iptables yum install -y ipt ...

  8. composer 实现自动加载原理

    简介 一般在框架中都会用到composer工具,用它来管理依赖.其中composer有类的自动加载机制,可以加载composer下载的库中的所有的类文件.那么composer的自动加载机制是怎么实现的 ...

  9. Javaweb-request与response

                           Javaweb-request与response              Servlet   生命周期(什么时候创建的,什么时候销毁的);     Se ...

  10. Java Fileupload

    fileupload FileUpload 是 Apache commons下面的一个子项目,用来实现Java环境下面的文件上传功能,与常见的SmartUpload齐名. 组件 1.FileUpLoa ...