常见内置用户
- elastic:一个内置的超级用户。密码在我们安装的时候就生成了。
- kibana_system:Kibana 用来与 Elasticsearch 连接和通信的用户。
- logstash_system:Logstash 在 Elasticsearch 中存储监控信息时使用的用户。
- beats_system:Beats 在 Elasticsearch 中存储监控信息时使用的用户。
- apm_system:APM 服务器在 Elasticsearch 中存储监控信息时使用的用户。
- remote_monitoring_user:Metricbeat 在 Elasticsearch 中收集和存储监控信息时使用的用户。它具有remote_monitoring_agent和 remote_monitoring_collector内置角色。
这些内置用户存储在一个特殊的.security索引中,该索引由 Elasticsearch 管理。如果内置用户被禁用或其密码发生更改,更改会自动反映在集群中的每个节点上。但是,如果你的.security索引被删除或从快照恢复,你应用的任何更改都将丢失。
常用内置角色
- editor 授予对 Kibana 中所有功能(包括解决方案)的完全访问权限和对数据索引的只读访问权限。
- kibana_admin 授予对 Kibana 中所有功能的访问权限。
- superuser 授予对集群管理和数据索引的完全访问权限。
- viewer 授予对 Kibana 中所有功能(包括解决方案)和数据索引的只读访问权限。
内置角色请查看官网 内置角色
权限列表
集群权限
- monitor 所有集群只读操作,如集群运行状况和状态、热线程、节点信息、节点和集群统计信息以及挂起的集群任务。
- manage基于monitor并添加更改集群中值的集群操作。这包括快照、更新设置和重新路由。它还包括获取快照和恢复状态。此特权不包括管理安全性的能力。
- all 所有集群管理操作,如快照、节点关闭/重启、设置更新、重新路由或管理用户和角色。
索引权限
- all 对索引或数据流的任何操作
- manage 所有monitor权限加上索引和数据流管理(别名、分析、清除缓存、关闭、删除、存在、刷新、映射、打开、字段功能、强制合并、刷新、设置、搜索分片、验证查询)。
Elastic权限列表请查看官网 权限列表
修改账号密码
使用命令行修改密码
忘记 elastic 账号的密码,可通过 elasticsearch-reset-password 命令行工具进行修改
bin/elasticsearch-reset-password
[-a, --auto] [-b, --batch] [-E <KeyValuePair]
[-f, --force] [-h, --help] [-i, --interactive]
[-s, --silent] [-u, --username] [--url] [-v, --verbose]
-a, --auto
将指定用户的密码重置为自动生成的强密码。(默认)
-b, --batch
运行重置密码过程而不提示用户进行验证。
-E <KeyValuePair>
配置标准 Elasticsearch 或 X-Pack 设置。
-f, --force
强制命令针对不健康的集群运行。
-h, --help
返回所有命令参数。
-i, --interactive
提示指定用户的密码。使用此选项可以明确设置密码。(交互式输入)
-s --silent
在控制台中显示最少的输出。
-u, --username
本机领域用户或内置用户的用户名。
--url
指定工具用于向 Elasticsearch 提交 API 请求的基本 URL(主机名和本地节点的端口)。默认值由文件中的设置确定 elasticsearch.yml。如果xpack.security.http.ssl.enabled设置为true,则必须指定 HTTPS URL。
-v --verbose
在控制台中显示详细输出。
比如修改 elastic 账号密码
./elasticsearch-reset-password -u elastic
此操作会为elastic账号自动生成强密码,如果需要自定义,可以添加 -i 参数
使用 REST API 修改密码
POST /_security/user/_password
POST /_security/user/<username>/_password
路径参数编辑
username
(可选,字符串)您要更改其密码的用户。如果不指定此参数,则更改当前用户的密码。
请求正文编辑
password
(字符串)新密码值。密码长度必须至少为 6 个字符。
password_hash
(字符串)新密码值的哈希值。这必须使用与为密码存储配置(xpack.security.authc.password_hashing.algorithm)的相同的散列算法来生成。
password和password_hash必须二选一
本文推荐使用命令行的方式来修改密码
获取访问令牌
通过令牌访问,是 elastic 的一项付费功能…,本人也是研究了半天,接口、配置、请求参数都是正确的,可就是报没有提供认证信息(missing authentication credentials for REST request [/_security/oauth2/token])或者当前的许可证不符合(current license is non-compliant for [security tokens]),所以此接口咱就不纠结了…
点击查看开源与付费支持的功能对比
获取访问令牌是REST API操作,用于获取 Elastic 的访问令牌(access_token),此接口还会返回一个刷新令牌(refresh_token),access_token 默认有效期为20分钟,refresh_token 有效期为 24 小时,refresh_token 可以用于刷新access_token。
通过xpack.security.authc.token.enabled 设置是否可以生成访问令牌,当我们启动 ssl时,此设置是默认启用的。
可以通过 xpack.security.authc.token.timeout 设置 access_token有效期,最长为1小时,默认为 20m
REST API 获取令牌
POST /_security/oauth2/token
{
"grant_type":"password",
"username":"用户名",
"password":"密码"
}
- grant_type 表示授权类型,可选值为:client_credentials(该授权类型实现了 OAuth2 的客户端凭证授权)、_kerberos(此授权类型在内部受支持并实现基于 SPNEGO 的 Kerberos 支持)、password(用户名密码方式授权)、refresh_token(使用刷新令牌获取新的令牌)
- username:用户名
- password:密码
- kerberos_ticket:如果类型为_kerberos,则必须。base64 编码的 kerberos 票证
- scope:可选参数,表示令牌的范围
如果类型为:password,则username 和 password 则为必须
返回信息包括,access_token、refresh_token、以及失效时间等
使用Postman或Apifox等http请求工具认证
使用 Postman 等http请求工具验证 REST API 时,请使用请求头设置添加账号密码来通过认证
设置Auth参数
设置时请选择 Basic Auth
角色管理
获取角色
GET /_security/role
GET /_security/role/<name>
name:表示角色名称,不传,将返回所有角色的列表。比如我们的 elastic 账号的角色为 superuser,我们查询superuser角色的信息如下
请求参数
- applications
(列表)应用程序权限条目的列表。- application
(必需的)(字符串)此条目适用的应用程序的名称 - privileges
(列表)字符串列表,其中每个元素都是应用程序权限或操作的名称。 - resources
(列表)应用权限的列表资源。
- application
- cluster
(列表)集群权限列表。这些权限定义了具有此角色的用户能够执行的集群级别操作。 - global
(对象)定义全局权限的对象。全局权限是一种可感知请求的集群权限形式。对全局权限的支持目前仅限于应用程序权限的管理。该字段是可选的。 - indices
(列表)索引权限条目列表。- field_security
(对象)角色所有者具有读取权限的文档字段。用于设置字段和文档级别的权限。 - names(必需的)
(列表)此条目中的权限适用的索引(或索引名称模式)列表。 - privileges(必需的)
(列表)角色所有者对指定索引的索引级别特权。 - query
定义角色所有者具有读取访问权限的文档的搜索查询。指定索引中的文档必须匹配此查询,以便角色所有者可以访问它。
- field_security
- metadata
(对象)可选的元数据。在该metadata对象中,以 开头的键_保留供系统使用。 - run_as
(列表)此角色的所有者可以模拟的用户列表。有关详细信息,请参阅 代表其他用户提交请求。
返回结果如下
{
"superuser": {
"cluster": [
"all" // 表示拥有所有集群的权限
],
"indices": [
{
"names": [
"*" // * 表示针对所有的索引
],
"privileges": [
"all" // 表示可以针对上面定义的索引列表中的索引,拥有所有权限
],
"allow_restricted_indices": false // 自定义的角色,请将此设置为false。
},
{
"names": [
"*"
],
"privileges": [
"monitor",
"read",
"view_index_metadata",
"read_cross_cluster"
],
"allow_restricted_indices": true
}
],
"applications": [
{
"application": "*", // 可管理的应用程序名称 * 表示所有
"privileges": [
"*" // 赋予的管理权限
],
"resources": [
"*" //
]
}
],
"run_as": [
"*" // 当前用于可以模拟的用户列表,自定义的时候建议不要设置
],
"metadata": {
"_reserved": true
},
"transient_metadata": {}
}
}
allow_restricted_indices:受限索引是一种特殊类别的索引,在内部用于存储配置数据,不应直接访问。通常只有内部系统角色才能授予对受限索引的特权。所以此处强烈建议使用 false。
新增或修改角色
POST /_security/role/<name>
PUT /_security/role/<name>
示例
{
"cluster": ["monitor"],
"indices": [
{
"names": [ "*" ],
"privileges": ["all"],
"allow_restricted_indices": false
}
],
"applications": [
{
"application": "*",
"privileges": [ "*" ],
"resources": [ "*" ]
}
],
"metadata" : {
"version" : 1
}
}
此角色权限也挺高了,拥有集群的monitor权限、索引的所有权限
返回结果
{
"role": {
"created": true
}
}
删除角色
DELETE /_security/role/<name>
这个非常简单,就不做详细说明了
用户管理
创建或更新用户
POST /_security/user/<username>
PUT /_security/user/<username>
参数说明
- enabled
(布尔值)指定用户是否已启用。默认值为true。 - email
(字符串)用户的电子邮件。 - full_name
(字符串)用户的全名。 - metadata
(对象)您想要与用户关联的任意元数据。 - password
(必需*,字符串)用户的密码。密码长度必须至少为 6 个字符。添加用户时,password 和 password_hash 必须二选一。 - password_hash
password和password_hash参数不能在同一个请求中同时使用。 - roles
(必需,列表)用户拥有的一组角色。角色决定了用户的访问权限。要创建没有任何角色的用户,请指定一个空列表: []。
示例
{
"password" : "test@111%jKL",
"roles" : [ "myrole" ],
"full_name" : "全名",
"email" : "test@example.com.cn",
"metadata" : {
"desc" : "测试账号"
}
}
返回结果
{
"created": true
}
如果created 为 false,表示当前用户已存在,更新用户文章来源:https://www.toymoban.com/news/detail-617783.html
删除用户
DELETE /_security/user/<username>
{
"found" : true // 成功删除返回true,否则返回false
}
禁用用户
PUT /_security/user/<username>/_disable
启用用户
PUT /_security/user/<username>/_enable
获取用户信息
GET /_security/user
GET /_security/user/<username>
/_security/user/myuser 响应
{
"myuser": {
"username": "myuser",
"roles": [
"myrole"
],
"full_name": "全名",
"email": "test@example.com.cn",
"metadata": {
"desc": "测试账号"
},
"enabled": true
}
}
修改密码API
POST /_security/user/_password
POST /_security/user/<username>/_password
username
(可选,字符串)您要更改其密码的用户。如果不指定此参数,则更改当前用户的密码。
参数
- password
(字符串)新密码值。密码长度必须至少为 6 个字符。 - password_hash
(字符串)新密码值的哈希值。这必须使用与为密码存储配置的相同的散列算法来生成。
以上是基于REST API 来管理用户文章来源地址https://www.toymoban.com/news/detail-617783.html
到了这里,关于Elasticsearch 用户管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!