第9章:安全与权限管理
9.1 X-Pack安全功能概述
为什么需要安全
Elasticsearch默认不启用安全,任何人都可以访问集群、读取数据、删除索引。在生产环境中,必须启用安全:
安全风险:
- 未授权访问: 任何人可访问集群
- 数据泄露: 敏感数据可被读取
- 数据破坏: 索引可被删除
- 恶意攻击: 集群可被恶意操作
X-Pack安全功能:
- 认证: 验证用户身份(用户名密码、API Key、SAML)
- 授权: 控制用户权限(RBAC)
- 加密: 节点间和客户端TLS加密
- 审计: 记录操作日志
ES 8.x安全默认启用
重要变更: Elasticsearch 8.x默认启用安全,首次启动时自动生成证书和密码。
首次启动:
# 启动ES./bin/elasticsearch# 自动输出密码和 enrollment token✅ Passwordforthe elastic user: xxxxxxxx ✅ Enrollment tokenforKibana: xxxxxxxx9.2 TLS/SSL加密配置
节点间加密(Transport层)
步骤1:生成证书:
# 生成CA证书./bin/elasticsearch-certutil ca# 生成节点证书./bin/elasticsearch-certutil cert--caelastic-stack-ca.p12# 将证书复制到所有节点scpelastic-certificates.p12 node1:/etc/elasticsearch/certs/scpelastic-certificates.p12 node2:/etc/elasticsearch/certs/步骤2:配置节点:
# elasticsearch.ymlxpack.security.enabled:truexpack.security.transport.ssl.enabled:truexpack.security.transport.ssl.verification_mode:certificatexpack.security.transport.ssl.keystore.path:elastic-certificates.p12xpack.security.transport.ssl.truststore.path:elastic-certificates.p12步骤3:加载证书密码:
# 如果证书有密码,添加到keystore./bin/elasticsearch-keystoreaddxpack.security.transport.ssl.keystore.secure_password ./bin/elasticsearch-keystoreaddxpack.security.transport.ssl.truststore.secure_passwordHTTP层加密(客户端访问)
步骤1:生成HTTP证书:
# 生成HTTP证书./bin/elasticsearch-certutil http步骤2:配置HTTP层:
# elasticsearch.ymlxpack.security.http.ssl.enabled:truexpack.security.http.ssl.keystore.path:elastic-http.p12步骤3:客户端访问:
# 使用HTTPS访问curl-uelastic:password https://localhost:92009.3 用户和角色管理
内置用户
elastic: 超级用户,拥有所有权限
kibana: Kibana系统用户,用于Kibana连接ES
logstash_system: Logstash系统用户
beats_system: Beats系统用户
apm_system: APM系统用户
创建用户
方式1:使用elasticsearch-users工具:
# 创建用户./bin/elasticsearch-usersuseraddmyuser# 设置密码./bin/elasticsearch-userspasswdmyuser# 分配角色./bin/elasticsearch-users roles myuser-akibana_user