ES用户验证
ES的五个内置用户
五个内置用户:
elastic
super_user
kibana_system
用户Kibana用来连接Elasticsearch并与之通信
logstash_system
Logstash用户在将监控信息存储在Elasticsearch中时使用
beats_system
Beats在Elasticsearch中存储监视信息时使用的用户
**apm_system
**APM服务器在Elasticsearch中存储监视信息时使用的用户
remote_monitoring_user
Metricbeat用户在Elasticsearch中收集和存储监视信息时使用
基本用户验证机制
Realms
Elastic Stack 通过使用realms对用户进行身份验证。
realm用于基于身份验证标记解析和验证用户,在es中提供了以下内置realm:
- native
支持集群本地用户名和密码形式的身份验证,在没有显示配置realm时默认可用
- ldap
使用外部LDAP服务器进行身份验证,需要显示配置才能使用
- active_directory
使用外部active_directory服务器进行身份验证,需要显示配置才能使用
- pki
使用PKI进行身份验证,需要显示配置
- file
使用集群本地文件的用户进行身份验证,始终可用
- saml
SAML 2.0 Web SSO
- kerberos
Kerberos
- oidc
使用 OpenID 连接实现身份验证的realm,它使 Elasticsearch 成为 OpenID 连接依赖方(RP) ,并在 Kibana 提供单点登录(SSO)支持
内部realm(支持基于本地集群上的身份验证):native
、file
外部realm(可使用外部服务器进行身份验证):ldap
,active_directory
,pki
,saml
,kerberos
,oidc
Realm Chain
Realm chain本质上是已配置的realm的优先级列表,多个realm上可能存在多个相同的用户,配置realm chain可以确保用户验证按照优先级验证
xpack.security.authc.realms:
file.file1:
order: 0
native.native1:
order: 1
ldap.ldap1:
order: 2
enabled: false
url: 'url_to_ldap1'
...
ldap.ldap2:
order: 3
url: 'url_to_ldap2'
...
active_directory.ad1:
order: 4
url: 'url_to_ad'
不同realm的详细配置参数可以参照官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.10/security-settings.html#ref-realm-settings
file realm
文件目录
es集群在启动会时读取ES_PATH_CONF
下的users和users_roles文件,且会每五秒检查这些文件是否更改。
ES_PATH_CONF/users
rdeniro:$2a$10$BBJ/ILiyJ1eBTYoRKxkqbuDEdYECplvxnqQ47uiowE7yGqvCEgj9W
alpacino:$2a$10$cNwHnElYiMYZ/T3K4PvzGeJ1KbpXZp2PfoQD.gfaVdImnHOwIuBKS
jacknich:{PBKDF2}50000$z1CLJt0MEFjkIK5iEfgvfnA6xq7lF25uasspsTKSo5Q=$XxCVLbaKDimOdyWgLCLJiyoiWpA/XDMe/xtVgn1r5Sg=
用户文件存储所有用户及其密码。文件中的每一行代表一个单独的用户条目,其中包含用户名和经过散列和加盐处理的密码。
ES_PATH_HOME/users_roles
admin:rdeniro
power_user:alpacino,jacknich
user:jacknich
每一行都将一个角色映射到一个以逗号分隔的列表,该列表包含与该角色关联的所有用户。
用户操作
通常使用**ES_HOME/bin/elasticsearch-users
**进行 单个节点下 用户的添加、删除等操作,在进行用户添加后,需要确保所有集群节点进行相同的更改。
bin/elasticsearch-users
([useradd <username>] [-p <password>] [-r <roles>]) | #用户添加
([list] <username>) | #查看文件用户
([passwd <username>] [-p <password>]) | #重置用户密码
([roles <username>] [-a <roles>] [-r <roles>]) | #定义用户角色
([userdel <username>]) #用户删除
native realm
native realm是管理和验证用户最简单的方法,可以使用RESET API和Kibana进行用户操作
配置native realm
在没用显示配置realm和realmchain时,默认情况下native realm是可用的,如果在elasticsearch.yml中显示配置了其他realm,则必须将native realm添加到realm chain中
xpack.security.authc.realms:
native.native1:
order: 0
ES USERS API
- 用户创建
POST /_security/user/<username>
PUT/_ security/user/< username >
Example:
POST /_security/user/jacknich
{
"password" : "j@rV1s",
"roles" : [ "admin", "other_role1" ],
"full_name" : "Jack Nicholson",
"email" : "jacknich@example.com"
}
------返回值
{
"created": true //更新已存在的user时,返回false
}
- 更改密码
POST /_security/user/_password
POST /_security/user/<username>/_password
------
返回值
{}
- 删除用户
DELETE /_security/user/<username>
------返回值
{
"found" : true
}
- enable\disable用户
PUT /_security/user/<username>/_enable[_diable]
- GET
GET /_security/user
GET /_security/user/<username>
ex:
GET /_security/user/jacknich
{
"jacknich": {
"username": "jacknich",
"roles": [
"admin", "other_role1"
],
"full_name": "Jack Nicholson",
"email": "jacknich@example.com",
"metadata": { "intelligence" : 7 },
"enabled": true
}
}