教程 elasticsearch tutorial

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 认证用户访问

  1. 创建用户:
bash
POST /_security/user/devuser
{
  "password": "devpass",
  "roles": ["read_logs"],
  "full_name": "Dev User"
}
  1. 访问集群:
bash
curl -u devuser:devpass https://localhost:9200

6. 安全建议

  • 禁止默认 elastic 用户外部访问,或使用强密码
  • 所有生产环境必须启用 TLS
  • 推荐服务间通信使用 API Key 或 PKI
  • 使用 Kibana 的 Stack Management 管理证书和身份认证更便捷

通过启用 TLS 与多重身份认证机制,Elasticsearch 可有效防止未经授权访问和数据泄露,构建一个更安全的搜索平台。