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步:检查你的集中的每个节点配置中abled是否设置为true。如果你⽤的是⼀个trail license,这个配置项默认是false。
abled: true
配置项
abled
设置为true则在节点上启⽤X-Pack安全特性,false表⽰禁⽤X-Pack安全特性。(PS:推荐明确设置这个值)
xpack.security.authc.accept_default_password
在l中,将其设置为false,以禁⽤默认密码。默认密码是“changeme”。
xpack.security.authc.anonymous.username
配置匿名⽤户
xpack.security.les
匿名⽤户关联的⾓⾊
例如:
xpack.security.authc:
anonymous:
username: anonymous_user
roles: role1, role2
authz_exception: true
xpack.security.abled
设置为false表⽰阻⽌⽂档和字段级别的访问控制。默认是true。
xpack.abled
设置为false表⽰禁⽤token服务。默认true。
xpack.alms
配置realms,例如:
xpack.alms:
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
这需要你的集中⾄少有两个节点。如果你的集中只有⼀个节点,那么可以忽略这⼀步。
更多参见
第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类型
第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.us",
"roles" : [ "events_admin" ]
}'
第8步:启⽤审计
xpack.abled: 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",
"metadata" : {
"intelligence" : 7
}
}
'
在这些参数中,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" : 1
}
}
'
3.3. 基于⾓⾊的访问控制(RBAC)
X-Pack安全性提供了⼀种基于⾓⾊的访问控制(RBAC)机制,它使你能够通过向⾓⾊分配特权和向⽤户或组分配⾓⾊来授权⽤户。
4. 在Kibana中配置Security
当在你的集上启⽤X-Pack时,Kibana⽤户必须登录成功后才可以访问。你可以为Kibana⽤户配置X-Pack安全⾓⾊,以控制⽤户可以访问哪些数据。
通过Kibana向Elasticsearch发出的⼤多数请求都通过登录⽤户的凭证进⾏认证的。然⽽,Kibana服务器需要向Elasticsearch集发出⼀些内部请求。因此,你必须为Kibana 服务器配置⽤于这些请求的凭证。
curl命令发送post请求带参数启⽤了X-Pack安全性之后,如果你加载⼀个Kibana指⽰板,该指⽰板访问你没有权限查看的索引中的数据,那么你将得到⼀个索引不存在的错误。X-Pack安全性⽬前还没有提供⼀种⽅法来控制哪些⽤户可以加载哪些仪表板。
为了在Kibana中应⽤X-Pack安全特性:
第1步:在Elasticsearch中配置security
第2步:配置Kibana使⽤内置账户,例如:
第3步:在l配置⽂件中指定ptionKey,例如:
第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⽤户定义许多不同的⾓⾊)
4.1. 配置项
abled
设置为true(默认)以启⽤X-Pack安全特性
kieName
cookie的名字。默认是“sid”。
ptionKey
⽤于加密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。
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. l
server.port: 5601
server.host: "192.168.101.5"
elasticsearch.url: "localhost:9200"
elasticsearch.username: "kibana"
elasticsearch.password: "123456"
abled: true
ptionKey: "4297f44b139********b2497399d7a93"
5.2. l
abled: true
5.3. 登录
6. 其它相关链接
《》
《》
《》
《》
《》
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论