如何为Docker中运行的Elasticsearch 2.3.0设置密码?
Elasticsearch 2.3.0 权限控制方案(无需升级或强制安装X-Pack)
1. 限制IP访问范围
修改Elasticsearch配置文件elasticsearch.yml,绑定到可信IP并限制来源:
# 仅允许本地或指定可信服务器访问 network.host: 127.0.0.1 # 若需前端跨域访问,限制可信域名 http.access_control.allow_origin: "http://your-trusted-domain.com" http.access_control.allow_methods: "GET,POST,PUT,DELETE" http.access_control.allow_headers: "X-Requested-With,Content-Type"
重启容器生效。如果需要跨机器访问,配合防火墙(如iptables)只放行可信IP的9200/9300端口。
2. 反向代理层做身份验证
用Nginx或Apache作为反向代理,在代理层添加HTTP基本认证,无需修改Elasticsearch本身:
以Nginx为例:
- 生成密码文件:
htpasswd -c /etc/nginx/.htpasswd elastic_user
- 配置反向代理规则:
server { listen 80; server_name your-es-domain.com; location / { proxy_pass http://localhost:9200; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; auth_basic "Restricted Elasticsearch Access"; auth_basic_user_file /etc/nginx/.htpasswd; } }
所有请求必须先通过代理的账号密码验证,才能转发到Elasticsearch。
3. 关于X-Pack/Shield的说明
Elasticsearch 2.3.0没有内置免费认证功能,当时对应的官方安全插件是Shield(后来整合为X-Pack的安全模块):
- 该版本Shield为商业插件,需单独授权,且官方已停止维护
- 安装方式:在容器内执行
plugin install elasticsearch/shield/2.3.0,之后在elasticsearch.yml配置:
shield.authc: realms: native: type: native order: 1
用命令创建用户:
elasticsearch-users useradd admin -p your_password -r superuser
总结
优先选择IP限制或反向代理方案,无需额外安装商业插件,即可实现安全访问控制;若必须使用Elasticsearch原生认证,只能安装对应版本的Shield,但考虑到版本老旧,反向代理是更轻量且可靠的选择。
内容的提问来源于stack exchange,提问作者SolS
相关产品推荐
相关产品推荐

