众所周知,原生 Elasticsearch 默认开启的是 HTTP 明文接口,并且不开启认证或加密。如果要启用 TLS/SSL 加密和账号认证,通常需要额外配置一系列安全模块。
而在 EasySearch 中,官方通过 initialize.sh 初始化脚本,大大简化了这些安全配置,启动时就能自动生成证书并开启密码保护。不过在一些测试或开发环境中,我们可能希望临时使用 HTTP + 无密码 的简化方式来调试。
本文将从配置文件入手,逐步说明如何启用或关闭认证、如何从 HTTPS 切换回 HTTP,以及如何开放外网访问。
🛠 初始化启动信息与默认密码
当你执行 bin/initialize.sh 后,终端和 initialize.log 会输出初始化信息,其中包括自动生成的管理员账号密码,例如:
curl -ku admin:160824cab0b02193226e https://localhost:9200默认情况下,服务已启用 HTTPS 与密码认证。
⚙ 修改配置文件:easysearch.yml
配置文件位于:
config/easysearch.yml可以在此文件中自定义集群名称:
cluster.name: my-application修改前访问效果如下:
curl -ku admin:160824cab0b02193226e http://localhost:9200"cluster_name": "easysearch",修改后再次访问:
curl -ku admin:160824cab0b02193226e http://localhost:9200"cluster_name": "my-application",🌐 开放外网访问(单节点部署)
如果你希望让其他设备或公网访问 EasySearch,可以添加以下参数:
network.host: 0.0.0.0
http.port: 9200
discovery.type: single-node此外,为了提高对 Elasticsearch 客户端的兼容性,建议添加:
elasticsearch.api_compatibility: true🔒 控制 HTTPS 与密码认证
EasySearch 的安全配置由以下两个核心参数控制:
| 参数 | 作用 |
|---|---|
security.enabled | 是否启用认证(账号密码)和 HTTPS 模块 |
security.ssl.http.enabled | 是否启用 HTTPS(SSL/TLS 加密) |
🔁 配置组合含义如下:
security.enabled | security.ssl.http.enabled | 效果 |
|---|---|---|
| true | true | 默认配置,启用认证 + HTTPS(推荐) |
| true | false | 仅认证,无加密,使用明文 HTTP |
| false | true | 无认证,HTTPS 加密,仅适合特殊用途 |
| false | false | 最开放,HTTP + 无密码,不推荐生产使用 |
你可以根据实际需求选择是否打开加密或认证,适配测试与生产环境。
📸 示例:启用 HTTP 且开启认证
如果你修改配置为 security.ssl.http.enabled: false,即可使用 HTTP,但仍要求输入用户名密码进行访问:
security.enabled: true
security.ssl.http.enabled: false访问效果如下图所示:

✅ 小结
| 场景 | 推荐配置 |
|---|---|
| 本地测试(不加密、无密码) | security.enabled: false + security.ssl.http.enabled: false |
| 本地测试(仅加认证) | security.enabled: true + security.ssl.http.enabled: false |
| 安全访问(默认) | security.enabled: true + security.ssl.http.enabled: true |
| HTTPS 不认证 | security.enabled: false + security.ssl.http.enabled: true |
EasySearch 提供了灵活的配置方式,适合不同场景自由切换。对于开发者来说,理解这两个参数的作用,是快速上手运维的第一步。
提到认证,我们再看看如何修改密码,由于 Easysearch 默认新建了一个 admin 的用户,并且存在 config/security/user.yml 下
---
# This is the internal user database create by initialize
# The hash value is a bcrypt hash and can be generated with hash_password.sh
_meta:
type: "user"
config_version: 2
# Define your internal users here
## Demo users
admin:
hash: "$2y$12$rmNDJxpQdRDb3F1dqk.uweSZqH3VAqeEpkP298vJ6QS99K80kbRoO"
reserved: true
external_roles:
- "admin"
description: "Admin user"这个我们也可以使用 postman 开调用 API.http://localhost:9200/_security/account

import requests
url = "http://192.168.5.8:9200"
payload = {}
headers = {
'Authorization': 'Basic YWRtaW46MTYwODI0Y2FiMGIwMjE5MzIyNmU='
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)新建用户

查看接口:https://localhost:9200/\_security/user
不过 yml 文件还是只有 admin,用 api 查看

使用新用户测试可以访问:

mysql -P 3306 -u admin -p -h mysqlsource.crtihcoeqzab.us-west-2.rds.amazonaws.com < people.sql
mysql -P 3306 -u admin -p -h mysqlsource.crtihcoeqzab.us-west-2.rds.amazonaws.com people
psql -h cloudacademylabs-targetcluster-0zdokkxbiyyh.cluster-ro-crtihcoeqzab.us-west-2.rds.amazonaws.com -U postgres -p 5432 people

