ElasticSearch安全-账号密码验证
JAVA 8
elasticsearch-7.14.0 on Windows 10
Spring Boot 2.5.3
---
目录
相关ES官方文档
password protect access、Transport Layer Security (TLS)、role-based access control、IP filtering、auditing……
角色管理、用户管理,其它
在使用的7.14版本ES中,无需密码即可访问。
根据 参考文档1 的介绍,开启了ES的账号密码登录功能。来自博客园
步骤如下:
1)修改配置文件config\elasticsearch.yml
添加:
# ---------------------------------- Security -----------------------------------
xpack.security.enabled: true
2)执行bin\elasticsearch.bat
启动ES后,执行下面的命令访问ES:访问失败,权限不足
D:\WS\es\bin>curl localhost:9200
{"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication credentials
for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}}],
"type":"security_exception","reason":"missing authentication credentials for REST request [/]",
"header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}},"status":401}
3)执行bin\elasticsearch-setup-passwords.bat interactive
interactive adj. 互相作用的,相互影响的; [计]交互式的; 互动的;
交互式地设置 多个账号的密码。
这些账号(6个)包括:elastic、apm_system、kibana_system、logstash_system、beats_system、remote_monitoring_user
设置多个用户密码
D:\WS\es\bin>elasticsearch-setup-passwords.bat interactive
"warning: usage of JAVA_HOME is deprecated, use ES_JAVA_HOME"
Future versions of Elasticsearch will require Java 11; your Java version from [D:\Program Files\Java\jdk1.8.0_202\jre] does not meet this requirement. Consider switching to a distribution of Elasticsearch with a bundled JDK. If you are already using a distribution with a bundled JDK, ensure the JAVA_HOME environment variable is not set.
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]y
Enter password for [elastic]:
Reenter password for [elastic]:
Enter password for [apm_system]:
Reenter password for [apm_system]:
Enter password for [kibana_system]:
Reenter password for [kibana_system]:
Enter password for [logstash_system]:
Reenter password for [logstash_system]:
Enter password for [beats_system]:
Reenter password for [beats_system]:
Enter password for [remote_monitoring_user]:
Reenter password for [remote_monitoring_user]:
Changed password for user [apm_system]
Changed password for user [kibana_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]
D:\WS\es\bin>
注,为了简便,将它们都设置为了 123456。
设置账号密码后,验证使用账号密码是否能访问ES:两种格式,都成功。
账号密码访问ES
# 第一种格式:命令中没有 密码
D:\WS\es\bin>curl localhost:9200 -u elastic
Enter host password for user 'elastic':
{
"name" : "DESKTOP-BDNTQQ3",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "mACMicetS3-YnNTGbiDLXA",
"version" : {
"number" : "7.14.0",
"build_flavor" : "default",
"build_type" : "zip",
"build_hash" : "dd5a0a2acaa2045ff9624f3729fc8a6f40835aa1",
"build_date" : "2021-07-29T20:49:32.864135063Z",
"build_snapshot" : false,
"lucene_version" : "8.9.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
# 第二种格式:命令中有密码
D:\WS\es\bin>curl localhost:9200 -u elastic:123456
六个账号都能访问成功。来自博客园
在Kibana的配置文件kibana.yml中,默认是不使用账号密码访问ES的。
默认情况下启动Kibana,出现下面的错误信息:
log [10:24:50.678] [error][savedobjects-service] Unable to retrieve version information
from Elasticsearch nodes. security_exception: [security_exception] Reason: missing authentication
credentials for REST request [/_nodes?filter_path=nodes.*.version%2Cnodes.*.http.publish_address%2Cnodes.*.ip]
此时访问Kibana:Kibana server is not ready yet
修改Kibana的配置中的ES账号密码信息:
elasticsearch.username: "kibana_system"
elasticsearch.password: "123456"
再次启动Kibana:启动成功。
访问Kibana:弹出登录对话框。
使用ES的 kibana_system 账号登录,不过,登录成功了,但提示没有权限!
怎么添加这个权限呢?看了一些文档,没有找到想要的答案……
……若干分钟后……
上面使用的账号 kibana_system来访问Kibana,提示权限不足。
更改为使用ES账号 elastic 来访问Kibana,访问成功!
登录后,还可以修改自己的密码:
打开主菜单的Management->Stack Management,可以看到更多管理信息。来自博客园
在其中的 Security 中,可以看到 Users、Roles的信息。
从上面的Users表可以看到,账号elastic的角色是 superuser,而之前没有访问权限的 Kibana_system 的角色是 kibana_system,这才导致了访问权限不足,无法进入系统。
新增用户 也可以在这个页面,当然,也可以使用RESTful API来对用户、角色进行管理。
未配置账号密码启动:启动失败
配置文件中添加下面的配置:
# 账号、密码
spring.elasticsearch.rest.username=elastic
spring.elasticsearch.rest.password=123456
再次启动:启动成功。
访问应用的接口:访问成功。
修改账号密码
Kibana中操作:
获取所有用户
GET /_security/user
获取单个用户elastic
GET /_security/user/elastic
修改用户密码(修改自己的密码后,需要重新登录)
POST /_security/user/elastic/_password
{
"password": "123456"
}
重置账号密码
忘记账号elastic这个超级账号的密码了,此时,需要重置。
按照 参考文档1 的步骤执行即可。
步骤如下:
1、停止ES
2、修改ES的配置文件elasticsearch.yml
取消:xpack.security.enabled: true
3、重启ES
检查ES的索引:有一个名为 .security-7 的
4、删除这个索引 .security-7
curl -XDELETE localhost:9200/.security-7
{"acknowledged":true}
删除成功。
此时,ES就回到了没有账号密码阶段了,又可以按照第一章的建立账号密码了。来自博客园
添加账号
官文:
获取角色:
GET /_security/role
获取账号:
GET /_security/user
添加一个 角色为 superuser 的账号:lib
# Kibana
POST /_security/user/lib
{
"password" : "123456",
"roles" : [ "superuser" ],
"full_name" : "library",
"email" : "lib@example.com",
"metadata" : {
"startfrom" : 20210927
}
}
响应:
{
"created" : true
}
# 查看
GET /_security/user/lib
响应:
{
"lib" : {
"username" : "lib",
"roles" : [
"superuser"
],
"full_name" : "library",
"email" : "lib@example.com",
"metadata" : {
"startfrom" : 20210927
},
"enabled" : true
}
}
使用S.B应用验证,成功。
删除账号
使用 elastic这个 superuser 账号去 删除上面的lib:来自博客园
DELETE /_security/user/lib
响应:
{
"found" : true
}
GET /_security/user/lib
响应:
{ }
GET /_security/user
也没找到 lib 账号。
》》》全文完《《《
ES的账号密码验证搞完,不过,看了官文,ES还有更多安全措施可以做,后面再深入。来自博客园
对了SMAL是什么?回头了解下,感觉毕OAuth2 还高级啊(认证与授权协议对比:OAuth2、OpenID、SMAL)
作者:Vino
2、