主题
TLS 与鉴权机制
为了确保 Elasticsearch 集群通信的安全性,启用 TLS 加密 和 身份认证机制 是生产环境的必备步骤。Elasticsearch 提供灵活的方式来保护集群、用户和数据的安全。
1. TLS 加密通信(HTTPS)
启用加密通信可防止中间人攻击与数据泄露。
a. 为节点间通信启用 TLS(transport 层)
在 elasticsearch.yml
添加:
yaml
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.key: certs/node.key
xpack.security.transport.ssl.certificate: certs/node.crt
xpack.security.transport.ssl.certificate_authorities: [ "certs/ca.crt" ]
所有节点需信任相同 CA。
b. 启用 REST API 的 TLS(HTTP 层)
yaml
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.key: certs/node.key
xpack.security.http.ssl.certificate: certs/node.crt
xpack.security.http.ssl.certificate_authorities: [ "certs/ca.crt" ]
启用后,必须通过 HTTPS 请求 Elasticsearch。
2. 生成 TLS 证书
使用 Elastic 官方工具一键生成:
bash
elasticsearch-certutil ca
elasticsearch-certutil cert --ca elastic-stack-ca.p12
或使用 openssl
自签证书,或部署企业颁发的证书。
3. 鉴权机制类型
Elasticsearch 支持多种身份认证机制,满足不同安全策略:
鉴权类型 | 描述 | 授权级别 |
---|---|---|
Basic Auth | 默认内置用户名/密码认证 | 所有版本支持 |
API Key | 创建一次性访问凭证,用于系统间通信 | 所有版本支持 |
LDAP / AD | 企业目录集成,支持用户组继承 | 商业功能 |
SAML / OIDC | 单点登录(SSO)方案,如连接企业登录系统 | 商业功能 |
PKI 证书认证 | 基于客户端证书身份验证 | 商业功能 |
4. API Key 示例(系统对接推荐)
生成 API Key:
bash
POST /_security/api_key
{
"name": "my-service-key",
"role_descriptors": {
"limited_access": {
"cluster": ["monitor"],
"index": [
{
"names": ["logs-*"],
"privileges": ["read"]
}
]
}
}
}
请求时使用:
http
Authorization: ApiKey <Base64(api_key_id:api_key)>
5. 示例:配置 Basic 认证用户访问
- 创建用户:
bash
POST /_security/user/devuser
{
"password": "devpass",
"roles": ["read_logs"],
"full_name": "Dev User"
}
- 访问集群:
bash
curl -u devuser:devpass https://localhost:9200
6. 安全建议
- 禁止默认 elastic 用户外部访问,或使用强密码
- 所有生产环境必须启用 TLS
- 推荐服务间通信使用 API Key 或 PKI
- 使用 Kibana 的 Stack Management 管理证书和身份认证更便捷
通过启用 TLS 与多重身份认证机制,Elasticsearch 可有效防止未经授权访问和数据泄露,构建一个更安全的搜索平台。