Easysearch 基础运维扫盲指南:从 HTTP 到 HTTPS、认证与安全访问全解析
Easysearch 基础运维扫盲指南:从 HTTP 到 HTTPS、认证与安全访问全解析
众所周知,原生 Elasticsearch 默认开启的是 HTTP 明文接口,并且不开启任何身份认证或传输加密。若想启用 TLS/SSL 加密及账号密码验证,通常需要配置繁琐的安全模块。
而 Easysearch 在此基础上做了极大的简化,通过官方提供的 initialize.sh
脚本,一键完成初始化即可自动生成证书、配置 HTTPS,并启用密码认证。
当然,对于本地开发或临时测试场景,我们也可能希望关闭 HTTPS 与认证,直接通过 HTTP 调试服务。本文将从配置文件出发,逐步讲解如何根据不同需求配置 Easysearch 的安全策略、通信协议与外网访问权限。
🛠 一、初始化输出与默认账号密码
执行以下初始化命令后:
bin/initialize.sh
终端及 initialize.log
文件中将输出初始的访问方式和管理员账号密码,例如:
curl -ku admin:160824cab0b02193226e https://localhost:9200
默认情况下,Easysearch 启用了 HTTPS 通信及密码认证。
⚙ 二、修改配置文件:easysearch.yml
配置文件路径:
config/easysearch.yml
例如,你可以修改集群名称:
cluster.name: my-application
修改前访问输出:
"cluster_name": "easysearch"
修改后:
"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 | 控制是否启用身份认证和安全模块 |
security.ssl.http.enabled | 控制是否启用 HTTPS(SSL/TLS) |
你可以根据环境选择配置组合:
security.enabled | security.ssl.http.enabled | 效果 |
---|---|---|
true | true | 默认配置,启用 HTTPS 和认证(推荐) |
true | false | 明文 HTTP + 启用认证 |
false | true | 启用加密但无身份认证(不常见) |
false | false | 完全开放,无认证 + HTTP(⚠️ 不建议生产使用) |
📸 五、示例:启用 HTTP 并保留认证
如果你希望使用 HTTP 而不启用 HTTPS,可修改如下配置:
security.enabled: true
security.ssl.http.enabled: false
访问时依然需要提供账号密码,效果如下图所示:
🔧 六、用户认证与密码管理
初始化完成后,Easysearch 默认会创建一个管理员用户 admin
,其信息存储在:
config/security/user.yml
示例如下:
admin:hash: "$2y$12$rmNDJxpQdRDb3F1dqk.uweSZqH3VAqeEpkP298vJ6QS99K80kbRoO"reserved: trueexternal_roles:- "admin"description: "Admin user"
你可以使用 Postman 或 Python 脚本验证访问:
import requestsurl = "http://localhost:9200"
headers = {'Authorization': 'Basic YWRtaW46MTYwODI0Y2FiMGIwMjE5MzIyNmU='
}
response = requests.get(url, headers=headers)
print(response.text)
👤 七、新建用户与管理接口
你可以通过以下接口查询当前用户信息:
GET /_security/account
也可以访问:
GET /_security/user
用于列出所有用户。
虽然 user.yml
文件默认只包含 admin
用户,但通过 API 添加的新用户同样生效。如下图所示,通过 Postman 创建的新用户已成功生效:
-
新用户创建界面:
-
使用新用户访问验证成功:
✅ 总结
场景 | 推荐配置 |
---|---|
本地测试(无加密、无认证) | security.enabled: false + security.ssl.http.enabled: false |
本地调试(加认证、无加密) | security.enabled: true + security.ssl.http.enabled: false |
生产环境(安全通信) | security.enabled: true + security.ssl.http.enabled: true |
特殊用途(加密但无认证) | security.enabled: false + security.ssl.http.enabled: true |
EasySearch 提供了非常灵活的配置机制,开发者可以根据具体需求,自由切换 HTTP/HTTPS、开启或关闭认证模块。理解并掌握这两个核心安全参数,将大大提升你对 EasySearch 的运维掌控力。
🔐 附录:关于 Basic Auth 的原理与使用方式
在 Easysearch 默认开启认证的情况下,我们在请求中经常会看到如下的 Authorization
头:
Authorization: Basic YWRtaW46MTYwODI0Y2FiMGIwMjE5MzIyNmU=
这其实就是标准的 HTTP Basic 认证,格式如下:
Authorization: Basic <Base64 编码后的 用户名:密码>
🧠 举个例子:
Base64 编码前是:
admin:160824cab0b02193226e
编码后变成:
YWRtaW46MTYwODI0Y2FiMGIwMjE5MzIyNmU=
也就是说,以下请求:
headers = {'Authorization': 'Basic YWRtaW46MTYwODI0Y2FiMGIwMjE5MzIyNmU='
}
等价于:
curl -u admin:160824cab0b02193226e http://localhost:9200
⚠️ 安全提示:
Base64 只是编码 不是加密,账号密码依然是明文形式,因此 必须配合 HTTPS 使用,否则容易被中间人监听。
🌐 使用 URL 携带用户名密码(不推荐但有时方便)
除了 Header 或 curl -u
的方式,HTTP 协议还允许通过 URL 携带账号密码:
curl http://admin:160824cab0b02193226e@localhost:9200
浏览器中也可以直接访问:
http://admin:160824cab0b02193226e@localhost:9200