首页 大数据

Docker Elasticsearch 安全加固:Linux 下容器账号密码设置实战

分类:大数据
字数: (7080)
阅读: (6689)
内容摘要:Docker Elasticsearch 安全加固:Linux 下容器账号密码设置实战,

在 Linux 服务器上,使用 Docker 部署 Elasticsearch 集群非常方便,但默认情况下 Elasticsearch 实例是没有启用安全认证的。这意味着任何人只要能访问你的 Elasticsearch 端口(通常是 9200),就能随意读写你的数据,甚至导致数据泄露和篡改。这在生产环境中是绝对不能接受的。类似的安全风险在 Nginx 等 web 服务中也同样需要警惕,例如未经配置的 Nginx 暴露默认页面也可能泄露服务器信息。

本文将介绍如何在 Docker 容器化的 Elasticsearch 环境中设置账号密码,以增强其安全性。这个过程涉及修改 Elasticsearch 配置文件、设置环境变量等步骤,确保只有经过授权的用户才能访问你的 Elasticsearch 集群。当然,如果业务需要更高的安全性,还可以考虑开启 TLS/SSL 加密传输。

Elasticsearch 账号密码设置的底层原理

Elasticsearch 的安全认证功能依赖于 Security 插件(原 Shield 插件,现在是 Elasticsearch 的一部分)。这个插件允许你定义用户、角色以及权限,控制用户对 Elasticsearch 集群的访问。底层原理涉及到身份验证(Authentication)和授权(Authorization)。

  • 身份验证:验证用户的身份,确认用户是否是合法的用户。Elasticsearch 支持多种身份验证方式,例如基于用户名密码的 Basic 认证,基于令牌的 Token 认证等。
  • 授权:确定用户可以访问哪些资源,以及可以执行哪些操作。Elasticsearch 使用角色(Role)来定义权限,然后将角色分配给用户。

简单来说,就像 Nginx 的权限控制,你需要配置哪些用户可以访问哪些目录或接口。Elasticsearch 也是类似的概念,只是控制粒度更细,可以控制到索引、文档级别。

Docker Elasticsearch 安全加固:Linux 下容器账号密码设置实战

Docker 环境下 Elasticsearch 账号密码设置的详细步骤

下面是在 Docker 容器中设置 Elasticsearch 账号密码的详细步骤:

1. 获取 Elasticsearch Docker 镜像

首先,你需要从 Docker Hub 上拉取 Elasticsearch 的镜像。

docker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.6 # 使用你需要的 Elasticsearch 版本

2. 修改 Elasticsearch 配置文件

创建一个 elasticsearch.yml 文件,并添加以下配置:

Docker Elasticsearch 安全加固:Linux 下容器账号密码设置实战
cluster.name: "docker-cluster" # 集群名称
network.host: 0.0.0.0       # 监听所有地址
discovery.type: single-node # 单节点模式,生产环境请使用 cluster 模式

# 开启安全认证
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.client.auth: required
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12


# 开启 HTTP SSL
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: elastic-certificates.p12
xpack.security.http.ssl.truststore.password: changeme

注意: xpack.security.transport.sslxpack.security.http.ssl 是用来启用 SSL 加密的。在生产环境中强烈建议开启,保证数据传输的安全性。另外 elastic-certificates.p12 文件是证书文件,需要提前生成。

3. 生成证书

生成证书需要在安装 Elasticsearch 的机器上进行,或者使用 Elasticsearch 官方提供的 Docker 镜像来生成。这里我们使用 Docker 镜像:

docker run --rm -it --volume $(pwd):/usr/share/elasticsearch/config/certs docker.elastic.co/elasticsearch/elasticsearch:7.17.6 /usr/share/elasticsearch/bin/elasticsearch-certutil cert --silent --pem -out /usr/share/elasticsearch/config/certs/elastic

docker run --rm -it --volume $(pwd):/usr/share/elasticsearch/config/certs docker.elastic.co/elasticsearch/elasticsearch:7.17.6 /usr/share/elasticsearch/bin/elasticsearch-certutil p12 -in /usr/share/elasticsearch/config/certs/elastic/elastic.zip -out /usr/share/elasticsearch/config/certs/elastic-certificates.p12 -pass ""

执行完毕后,当前目录下会生成 elastic-certificates.p12 文件。密码为空。

Docker Elasticsearch 安全加固:Linux 下容器账号密码设置实战

4. 启动 Elasticsearch 容器

使用以下命令启动 Elasticsearch 容器:

docker run -d -p 9200:9200 -p 9300:9300 \
  -v $(pwd)/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
  -v $(pwd)/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12 \
  -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
  --name elasticsearch docker.elastic.co/elasticsearch/elasticsearch:7.17.6

说明:

  • -v $(pwd)/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:将本地的 elasticsearch.yml 文件挂载到容器的配置目录。
  • -v $(pwd)/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12:将本地的证书文件挂载到容器。
  • -e "ES_JAVA_OPTS=-Xms512m -Xmx512m":设置 JVM 内存大小。根据服务器配置调整,避免 Elasticsearch 占用过多资源导致服务器负载过高,甚至出现 OOM。

5. 设置 Elasticsearch 内置用户密码

首次启动 Elasticsearch 后,需要设置内置用户的密码。使用以下命令进入容器:

Docker Elasticsearch 安全加固:Linux 下容器账号密码设置实战
docker exec -it elasticsearch /bin/bash

然后执行以下命令设置密码:

/usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive

按照提示设置 elastickibanalogstash_system 等用户的密码。例如,设置 elastic 用户的密码为 your_elastic_password

6. 验证账号密码是否生效

使用以下命令验证账号密码是否生效:

curl -u elastic:your_elastic_password https://localhost:9200 -k

如果返回 Elasticsearch 的版本信息,则说明账号密码设置成功。

实战避坑经验总结

  • 证书问题:生成证书时,请确保 Elasticsearch 版本和 Docker 镜像版本一致。否则可能出现证书不兼容的问题。
  • JVM 内存:根据服务器资源合理设置 JVM 内存大小。如果内存太小,Elasticsearch 启动可能会失败;如果内存太大,可能会导致其他服务 OOM。
  • 防火墙:确保防火墙允许 Elasticsearch 的 9200 和 9300 端口的访问。可以使用 firewall-cmd 命令来配置防火墙规则,或者使用宝塔面板等工具简化操作。例如,在宝塔面板中,只需要简单几步就可以开放端口。
  • 跨域问题:如果需要从浏览器访问 Elasticsearch,需要配置 Elasticsearch 的 CORS 设置。在 elasticsearch.yml 文件中添加以下配置:
http.cors.enabled: true
http.cors.allow-origin: "*" # 生产环境请设置为具体的域名
http.cors.allow-headers: Authorization, Content-Type, X-Requested-With
  • 版本升级:升级 Elasticsearch 版本时,请仔细阅读官方文档,了解版本之间的兼容性问题。升级前最好先进行备份,防止数据丢失。可以通过创建快照的方式备份数据,或者使用 Elasticsearch 的 reindex API 将数据迁移到新的集群。

通过以上步骤,你就可以在 Linux 下使用 Docker 对 Elasticsearch 容器设置账号密码,提高 Elasticsearch 集群的安全性。记住,安全无小事,尤其是在生产环境中,一定要重视安全配置,避免数据泄露等安全事故。

Docker Elasticsearch 安全加固:Linux 下容器账号密码设置实战

转载请注明出处: 代码一只喵

本文的链接地址: http://m.acea5.store/blog/873683.SHTML

本文最后 发布于2026-04-15 23:39:05,已经过了11天没有更新,若内容或图片 失效,请留言反馈

()
您可能对以下文章感兴趣
评论
  • 工具人 2 天前
    请问生产环境的证书怎么生成?有没有更安全的方式?
  • 路过的酱油 4 天前
    请问生产环境的证书怎么生成?有没有更安全的方式?
  • i人日记 4 天前
    请问生产环境的证书怎么生成?有没有更安全的方式?
  • 冬天里的一把火 16 小时前
    写的很详细,正是我需要的!感谢分享!
  • 键盘侠本侠 2 天前
    关于 JVM 内存的设置,能不能再详细说说?我的服务器经常 OOM。