别再裸奔了!手把手教你给Elasticsearch 7.x集群穿上‘安全认证’的铠甲(附证书生成与集群配置全流程)

张开发
2026/4/7 10:10:35 15 分钟阅读

分享文章

别再裸奔了!手把手教你给Elasticsearch 7.x集群穿上‘安全认证’的铠甲(附证书生成与集群配置全流程)
Elasticsearch 7.x 安全加固实战从零构建企业级认证体系当你的Elasticsearch集群还在裸奔时每个未加密的HTTP请求都可能成为黑客的狂欢派对。想象一下商业数据被随意浏览、用户信息被批量下载、服务器沦为挖矿肉鸡...这不是危言耸听而是每天真实发生的安全事件。本文将带你用X.509证书和RBAC权限体系为ES集群打造一套堪比金融级的安全防护罩。1. 安全架构设计理解Elastic认证体系Elasticsearch 7.x的安全模块本质上是一个三层防御体系传输层加密通过TLS证书防止流量嗅探身份认证用户名/密码、API Key、OAuth2等多因素验证权限控制基于角色的细粒度访问控制(RBAC)典型的配置流程需要先后完成CA根证书生成 → 2. 节点证书签发 → 3. 安全功能激活 → 4. 内置用户密码初始化注意生产环境务必使用专用CA机构颁发的证书自签名证书仅适用于测试环境2. 证书工程构建私有PKI体系2.1 创建证书颁发机构(CA)# 进入ES安装目录 cd /usr/share/elasticsearch # 生成CA证书有效期10年 ./bin/elasticsearch-certutil ca --days 3650 --out config/certs/elastic-ca.p12执行后会生成包含以下内容的PKCS#12文件CA公钥证书CA私钥默认密码为elasticsearch2.2 签发节点证书# 为集群所有节点生成统一证书 ./bin/elasticsearch-certutil cert \ --ca config/certs/elastic-ca.p12 \ --out config/certs/elastic-nodes.p12 \ --dns node1.example.com,node2.example.com \ --ip 192.168.1.10,192.168.1.11关键参数说明参数作用示例值--ca指定CA证书路径config/certs/elastic-ca.p12--dns节点DNS别名node1.cluster.local--ip节点IP地址192.168.1.103. 集群安全配置实战3.1 配置文件关键参数每个节点的elasticsearch.yml需要添加# 启用安全模块 xpack.security.enabled: true # 传输层加密配置 xpack.security.transport.ssl: enabled: true verification_mode: certificate keystore.path: certs/elastic-nodes.p12 truststore.path: certs/elastic-nodes.p12 # HTTP层加密配置 xpack.security.http.ssl: enabled: true keystore.path: certs/elastic-nodes.p12 truststore.path: certs/elastic-nodes.p12 # 密码策略 xpack.security.authc: password_hashing.algorithm: bcrypt realms: native: native1: order: 03.2 证书部署检查清单将elastic-nodes.p12复制到所有节点的config/certs目录设置正确的文件权限chown elasticsearch:elasticsearch config/certs/* chmod 640 config/certs/*.p12将CA公钥导出为PEM格式供客户端使用openssl pkcs12 -in elastic-ca.p12 -out elastic-ca.crt -nokeys4. 密码管理与访问控制4.1 初始化内置用户# 交互式设置所有系统用户密码 ./bin/elasticsearch-setup-passwords interactive重要用户角色说明用户名权限范围典型用途elasticsuperuser系统管理员kibana_systemkibana服务Kibana后台连接logstash_system数据写入Logstash管道4.2 自定义角色配置通过Kibana或API创建细粒度角色POST /_security/role/data_analyst { cluster: [monitor], indices: [ { names: [sales-*], privileges: [read, view_index_metadata], field_security: { grant: [customer_id, amount, region] } } ] }5. 客户端连接适配5.1 Kibana配置示例config/kibana.yml需要添加elasticsearch.hosts: [https://es-node1:9200] elasticsearch.ssl.certificateAuthorities: [/path/to/elastic-ca.crt] elasticsearch.username: kibana_system elasticsearch.password: your_strong_password5.2 使用CURL访问安全集群curl -u elastic:password \ --cacert elastic-ca.crt \ https://es-node1:9200/_cluster/health6. 高级防护策略6.1 网络层加固建议使用防火墙限制9200端口访问源IP配置Elasticsearch网络绑定network.host: _site_ http.host: _local_启用审计日志xpack.security.audit.enabled: true6.2 定期轮换策略证书轮换# 生成新证书时不指定--ca参数即可创建新CA链 ./bin/elasticsearch-certutil cert --ca new-ca.p12密码轮换POST /_security/user/elastic/_password { password: new_strong_password }7. 故障排查指南常见问题与解决方案证书验证失败现象节点间无法建立TLS连接检查openssl verify -CAfile elastic-ca.crt elastic-nodes.crt密码被锁定重置方法./bin/elasticsearch-reset-password -u elastic -i性能调优参数xpack.security.authc.token.timeout: 1h xpack.security.authc.api_key.hashing.algorithm: pbkdf2

更多文章