Skip to content

Easysearch 基础运维扫盲指南:从 HTTP 到 HTTPS、认证与安全访问全解析

众所周知,原生 Elasticsearch 默认开启的是 HTTP 明文接口,并且不开启认证或加密。如果要启用 TLS/SSL 加密和账号认证,通常需要额外配置一系列安全模块。

而在 EasySearch 中,官方通过 initialize.sh 初始化脚本,大大简化了这些安全配置,启动时就能自动生成证书并开启密码保护。不过在一些测试或开发环境中,我们可能希望临时使用 HTTP + 无密码 的简化方式来调试。

本文将从配置文件入手,逐步说明如何启用或关闭认证、如何从 HTTPS 切换回 HTTP,以及如何开放外网访问。

🛠 初始化启动信息与默认密码

当你执行 bin/initialize.sh 后,终端和 initialize.log 会输出初始化信息,其中包括自动生成的管理员账号密码,例如:

bash
curl -ku admin:160824cab0b02193226e https://localhost:9200

默认情况下,服务已启用 HTTPS 与密码认证。


⚙ 修改配置文件:easysearch.yml

配置文件位于:

config/easysearch.yml

可以在此文件中自定义集群名称:

yaml
cluster.name: my-application

修改前访问效果如下:

bash
curl -ku admin:160824cab0b02193226e http://localhost:9200
json
"cluster_name": "easysearch",

修改后再次访问:

bash
curl -ku admin:160824cab0b02193226e http://localhost:9200
json
"cluster_name": "my-application",

🌐 开放外网访问(单节点部署)

如果你希望让其他设备或公网访问 EasySearch,可以添加以下参数:

yaml
network.host: 0.0.0.0
http.port: 9200
discovery.type: single-node

此外,为了提高对 Elasticsearch 客户端的兼容性,建议添加:

yaml
elasticsearch.api_compatibility: true

🔒 控制 HTTPS 与密码认证

EasySearch 的安全配置由以下两个核心参数控制:

参数作用
security.enabled是否启用认证(账号密码)和 HTTPS 模块
security.ssl.http.enabled是否启用 HTTPS(SSL/TLS 加密)

🔁 配置组合含义如下:

security.enabledsecurity.ssl.http.enabled效果
truetrue默认配置,启用认证 + HTTPS(推荐)
truefalse仅认证,无加密,使用明文 HTTP
falsetrue无认证,HTTPS 加密,仅适合特殊用途
falsefalse最开放,HTTP + 无密码,不推荐生产使用

你可以根据实际需求选择是否打开加密或认证,适配测试与生产环境。


📸 示例:启用 HTTP 且开启认证

如果你修改配置为 security.ssl.http.enabled: false,即可使用 HTTP,但仍要求输入用户名密码进行访问:

yaml
security.enabled: true
security.ssl.http.enabled: false

访问效果如下图所示:

image-20250425120123219


✅ 小结

场景推荐配置
本地测试(不加密、无密码)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

image-20250425124456187

python
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 查看

image-20250425153959573

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

image-20250425153643049

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

❤️喜欢