1. 前言html
在以前的例子中,咱们都是直接输入地址访问的,系统也没有提示咱们要输入用户名密码。可是,在实际使用过程当中不大可能全部人都是超级管理员能够作任何操做,必定是有权限控制的,这里咱们借助X-Pack插件来实现(PS:X-Pack是收费的,能够申请试用30天。)node
2. 安装X-Packjson
用下列命令安装插件:浏览器
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.cookie
By default, when you install Kibana, X-Pack is installed.session
3. 在Elasticsearch中配置Securityapp
X-Pack安全性使你可以轻松地保护集群。经过X-Pack安全性,你能够对数据进行密码保护,并实现更高级的安全措施,如加密通讯、基于角色的访问控制、IP过滤和审计。curl
第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 ... ...
第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个,以下:
例如,你能够以交互模式运行命令,依次为这些用户设置新密码:
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" : 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服务器配置用于这些请求的凭证。
启用了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支持两种认证机制:
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》