JAVA 8

elasticsearch-7.14.0 on Windows 10

Spring Boot 2.5.3

---

 

目录

1、开启ES的账号密码访问

2、修改Kibana的ES账号密码

3、Spring Boot项目启动访问ES

4、更多操作

参考文档

 

相关ES官方文档

1、Secure the Elastic Stack

password protect access、Transport Layer Security (TLS)、role-based access control、IP filtering、auditing……

2、Security APIs

角色管理、用户管理,其它

 

1、开启ES的账号密码访问

在使用的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

六个账号都能访问成功。来自博客园

 

2、修改Kibana的ES账号密码

在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

ElasticSearch安全-账号密码验证_spring

修改Kibana的配置中的ES账号密码信息:

elasticsearch.username: "kibana_system"
elasticsearch.password: "123456"

再次启动Kibana:启动成功。

访问Kibana:弹出登录对话框。

ElasticSearch安全-账号密码验证_java_02

使用ES的 kibana_system 账号登录,不过,登录成功了,但提示没有权限

ElasticSearch安全-账号密码验证_elastic_03

怎么添加这个权限呢?看了一些文档,没有找到想要的答案……

……若干分钟后……

上面使用的账号 kibana_system来访问Kibana,提示权限不足。

更改为使用ES账号 elastic 来访问Kibana,访问成功

登录后,还可以修改自己的密码:

ElasticSearch安全-账号密码验证_ElasticSearch_04

打开主菜单的Management->Stack Management,可以看到更多管理信息。来自博客园

在其中的 Security 中,可以看到 Users、Roles的信息。

ElasticSearch安全-账号密码验证_spring_05

从上面的Users表可以看到,账号elastic的角色是 superuser,而之前没有访问权限的 Kibana_system 的角色是 kibana_system,这才导致了访问权限不足,无法进入系统。

新增用户 也可以在这个页面,当然,也可以使用RESTful API来对用户、角色进行管理。

 

3、Spring Boot项目启动访问ES

未配置账号密码启动:启动失败

ElasticSearch安全-账号密码验证_java_06

配置文件中添加下面的配置:

# 账号、密码
spring.elasticsearch.rest.username=elastic
spring.elasticsearch.rest.password=123456

再次启动:启动成功。

访问应用的接口:访问成功。

 

4、更多操作

修改账号密码

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 的

ElasticSearch安全-账号密码验证_elasticsearch_07

4、删除这个索引 .security-7

curl -XDELETE localhost:9200/.security-7
{"acknowledged":true}

删除成功。

此时,ES就回到了没有账号密码阶段了,又可以按照第一章的建立账号密码了。来自博客园

 

添加账号

官文:

Create or update users API

 

获取角色:

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

 

参考文档

1、如何给ElasticSearch设置用户名和密码

作者:Vino

2、