ES 学习(六)设置账号密码(安全认证)

张开发
2026/4/3 17:38:16 15 分钟阅读
ES 学习(六)设置账号密码(安全认证)
目录一、背景二、启用安全功能的配置步骤2.1 修改配置文件2.2 生成证书生产环境推荐2.3 重启集群2.4 使用 setup-passwords 命令设置账号密码2.5 补充许可证处理ERROR: X-Pack Security is not available.2.6 验证连接三、验证安全功能、初始化用户密码与故障排查3.1 验证安全功能3.2 验证登录3.3 故障排查1常见错误及解决方案2诊断命令四、用户管理与安全最佳实践4.1 创建和管理自定义用户1通过 Kibana 管理2通过 API 管理4.2 密码策略与安全最佳实践1强密码策略2定期轮换密码3使用 API Key4.3 Docker容器中的密码持久化1容器重启对密码的影响2确保密码持久化的最佳实践3容器重启后的处理五、补充Elasticsearch-Head访问带安全认证的ES六、总结一、背景在云计算时代许多开发者和学习者在云服务器上部署 Elasticsearch 用于学习和测试。然而一个真实的案例就发生在了我的身上小编昨天在云服务器上部署了Elasticsearch后当时正常存储了一些测试索引但第二天发现所有数据被清空并插入了一条名为read_me的恶意勒索索引内容如下Your database has been deleted from your server, but all the information remains stored on our cluster. The instructions for recovery are as follows: You must send 0.0061 BTC to the following wallet: XXX ...好在小编的 ES 上面没有重要数据不然可就后悔莫及了这说明了数据安全的重要性。当 Elasticsearch 暴露在公网上且没有启用任何安全认证时恶意攻击者可以轻易访问、篡改甚至勒索您的数据。因此建议无论 ES 是用于生产环境、测试环境还是个人学习都必须启用安全认证机制。默认情况下Elasticsearch 不启用任何认证任何能够访问ES端口的人都可以完全控制您的数据。二、启用安全功能的配置步骤启用安全功能的配置步骤如下2.1 修改配置文件编辑主配置文件elasticsearch.yml添加以下配置# 启用安全功能xpack.security.enabled:true# 设置传输层通信的加密推荐xpack.security.transport.ssl.enabled:true主配置文件默认路径在/user/share/elasticsearch/config/elasticsearch.yml2.2 生成证书生产环境推荐对于生产环境强烈建议配置TLS加密。可以使用ES自带的elasticsearch-certutil工具生成证书# 生成CA和证书bin/elasticsearch-certutil ca bin/elasticsearch-certutil cert--caelastic-stack-ca.p12将生成的证书文件放入配置指定的目录。修改elasticsearch.yml配置如下# 设置传输层通信的加密推荐xpack.security.transport.ssl.enabled:truexpack.security.transport.ssl.verification_mode:certificatexpack.security.transport.ssl.keystore.path:certs/elastic-certificates.p12xpack.security.transport.ssl.truststore.path:certs/elastic-certificates.p122.3 重启集群修改配置后需要重启所有ES节点以使配置生效。2.4 使用 setup-passwords 命令设置账号密码ES 提供了elasticsearch-setup-passwords工具来批量设置密码。该工具位于Elasticsearch安装目录的bin子目录/usr/share/elasticsearch/bin/下进入目录之后执行如下命令interactive模式允许为每个用户单独设置强密码# 交互式设置所有内置用户的密码./elasticsearch-setup-passwords interactiveauto模式会为所有用户生成随机密码并输出到控制台。# 或为特定用户设置密码非交互式./elasticsearch-setup-passwords auto2.5 补充许可证处理ERROR: X-Pack Security is not available.对于 Elasticsearch 6.3.2版本需要注意许可证问题问题现象即使设置xpack.security.enabled: true仍可能出现X-Pack Security is not available错误。根本原因在 Elasticsearch 6.3.2 版本中X-Pack 的可用性取决于许可证类型。根据相关资料X-Pack 分为三种类型许可证类型功能范围安全功能Basic (默认)基础功能有限或不可用Platinum完整功能完整可用Elasticsearch 6.3.2 的默认许可证是Basic而 Basic 许可证不包含完整的安全功能如用户认证、角色管理、审计日志等。解决方案检查当前许可证curl-XGEThttp://localhost:9200/_license?pretty启用30天试用许可证解锁完整X-Pack功能curl-HContent-Type: application/json-XPOST\http://localhost:9200/_xpack/license/start_trial?acknowledgetrue再次设置账号密码再次使用elasticsearch-setup-passwords工具来设置账号密码这次我们输入一个y之后就可以设置成功了。2.6 验证连接再次发送如下请求curl-XGEThttp://localhost:9200/_license?pretty确认请求状态变为401则说明许可证已经生效。三、验证安全功能、初始化用户密码与故障排查3.1 验证安全功能在设置密码前先验证安全功能是否已启用# 检查安全功能状态curl-XGEThttp://172.17.0.2:9200/_xpack/security/_authenticate?pretty# 对于ES 6.3.2检查许可证curl-XGEThttp://172.17.0.2:9200/_license?pretty3.2 验证登录设置完成后可以使用curl命令测试登录curl-uelastic:your_password-XGEThttps://localhost:9200/_cluster/health?pretty如果返回集群健康状态则表示认证成功。3.3 故障排查1常见错误及解决方案错误1X-Pack Security is not available原因许可证类型不支持安全功能常见于ES 6.3.2解决启用试用许可证见二、2.2节错误2403 Forbidden原因用户权限不足或安全功能未正确启用解决检查许可证和配置文件错误3Connection refused原因ES服务未运行或网络问题解决检查服务状态和端口2诊断命令# 检查许可证状态curl-XGEThttp://172.17.0.2:9200/_license?pretty# 检查节点设置curl-XGEThttp://172.17.0.2:9200/_nodes/settings?pretty# 检查集群健康状态curl-XGEThttp://172.17.0.2:9200/_cluster/health?pretty四、用户管理与安全最佳实践4.1 创建和管理自定义用户1通过 Kibana 管理登录 Kibana 管理界面。进入Stack Management Security Users。点击Create user。填写用户名、全名、电子邮件。在Roles部分为用户分配一个或多个预定义角色如kibana_admin,monitoring_user或自定义角色。设置密码并确认。2通过 API 管理也可以使用ES的User API进行管理。curl-uelastic:your_password-XPOSThttps://localhost:9200/_security/user/john_doe-HContent-Type: application/json-d { password : user_password, roles : [ my_custom_role ], full_name : John Doe } 4.2 密码策略与安全最佳实践1强密码策略在elasticsearch.yml中配置密码复杂度要求xpack.security.authc.password_policy.length.min:8xpack.security.authc.password_policy.character.category.lowercase.min:1xpack.security.authc.password_policy.character.category.uppercase.min:1xpack.security.authc.password_policy.character.category.digit.min:1xpack.security.authc.password_policy.character.category.special.min:12定期轮换密码建议定期如每90天轮换重要账户的密码。可以使用API更新用户密码curl-uelastic:your_password-XPOSThttps://localhost:9200/_security/user/john_doe/_password-HContent-Type: application/json-d { password : new_strong_password } 3使用 API Key对于应用程序访问推荐使用API Key而非长期有效的用户名/密码以降低安全风险。4.3 Docker容器中的密码持久化1容器重启对密码的影响在Docker容器中运行Elasticsearch时密码信息的持久化取决于数据存储方式数据卷挂载如果将ES的数据目录默认为/usr/share/elasticsearch/data挂载到宿主机或持久化存储卷密码信息存储在.security索引中将持久保存容器重启后密码不会丢失。临时存储如果未挂载数据卷使用容器的临时存储容器重启或删除后所有数据包括用户密码将丢失。2确保密码持久化的最佳实践使用Docker命令时挂载数据卷# 使用Docker命令时挂载数据卷dockerrun-d\--nameelasticsearch\-ves-data:/usr/share/elasticsearch/data\-ves-config:/usr/share/elasticsearch/config\-p9200:9200\elasticsearch:8.x.x在使用docker-compose时挂载数据卷# 在使用docker-compose时version:3.8services:elasticsearch:image:elasticsearch:8.x.xvolumes:-es-data:/usr/share/elasticsearch/data-es-config:/usr/share/elasticsearch/configports:-9200:9200volumes:es-data:es-config:3容器重启后的处理密码保留如果使用了持久化存储容器重启后所有用户密码和角色配置都会保留无需重新设置。密码丢失如果未使用持久化存储容器重启后需要重新执行elasticsearch-setup-passwords命令初始化内置用户密码并重新创建自定义用户。重要提醒在生产环境中务必配置持久化存储并定期备份ES数据以防止意外数据丢失。五、补充Elasticsearch-Head访问带安全认证的ESES开启了身份安全认证功能后elasticsearch-head自然也是需要配置才能正常访问我们ES的。操作方式我们需要在访问路径后面加上用户和密码就可以正确地访问 Elasticsearch-Head 了如下所示http://192.168.111.129:9100/?auth_userelasticauth_passwordelastic六、总结正确设置和管理ES的账号密码是保障数据安全的基础。通过启用安全功能、初始化内置用户、创建自定义用户并遵循强密码策略可以有效防止未授权访问。建议结合角色权限管理、TLS加密和API Key等机制构建多层次的安全防护体系。另外在Docker环境中确保使用持久化存储是保障密码和配置不丢失的关键。整理完毕完结撒花~

更多文章