Elastic APM Server 配置 CA 证书

本文最后更新于 1 分钟前,文中所描述的信息可能已发生改变。

在生产环境中,为了确保 Elastic APM Server 与 Elasticsearch 之间的通信安全,我们需要配置 SSL/TLS 证书。本文将详细介绍如何导出 Elasticsearch 的 CA 证书并配置 APM Server 使用该证书进行安全连接。

环境准备

在开始配置之前,请确保您的环境满足以下条件:

  • Elasticsearch 集群已启用 SSL/TLS
  • APM Server 已安装
  • 具有系统管理员权限
  • 已安装 OpenSSL 工具

导出 Elasticsearch CA 证书

1. 使用 OpenSSL 导出证书

首先,我们需要从 Elasticsearch 服务器导出当前使用的 CA 证书:

bash
# 连接到 Elasticsearch 并导出证书
openssl s_client -connect localhost:9200 </dev/null | openssl x509 > es-ca.crt

这个命令的工作原理:

  • openssl s_client -connect localhost:9200 - 建立到 Elasticsearch 的 SSL 连接
  • </dev/null - 提供空输入,避免交互式等待
  • | openssl x509 - 解析 SSL 证书信息
  • > es-ca.crt - 将证书保存到文件

2. 验证证书内容

导出证书后,可以验证证书的有效性:

bash
# 查看证书详细信息
openssl x509 -in es-ca.crt -text -noout

# 检查证书有效期
openssl x509 -in es-ca.crt -dates -noout

配置 APM Server

1. 创建证书目录

为了更好地管理证书文件,我们需要创建专门的证书目录:

bash
# 创建证书目录
sudo mkdir -p /etc/apm-server/certs

# 设置适当的权限
sudo chmod 755 /etc/apm-server/certs

2. 复制证书文件

将导出的证书文件复制到 APM Server 的配置目录:

bash
# 复制证书文件到 APM Server 配置目录
sudo cp es-ca.crt /etc/apm-server/certs/

# 设置证书文件权限
sudo chmod 644 /etc/apm-server/certs/es-ca.crt
sudo chown root:root /etc/apm-server/certs/es-ca.crt

3. 修改 APM Server 配置

编辑 APM Server 的配置文件 /etc/apm-server/apm-server.yml

yaml
# APM Server 配置
apm-server:
  host: "0.0.0.0:8200"

# Elasticsearch 输出配置
output.elasticsearch:
  hosts: ["https://your-elasticsearch-host:9200"]
  username: "elastic"
  password: "your-secure-password"
  
  # SSL 配置
  ssl.enabled: true
  ssl.verification_mode: certificate
  ssl.certificate_authorities:
    - "/etc/apm-server/certs/es-ca.crt"

4. SSL 验证模式说明

在配置中,ssl.verification_mode 有以下几种选项:

  • full - 验证证书和主机名(推荐用于生产环境)
  • certificate - 仅验证证书有效性
  • none - 不进行任何验证(不推荐)

启动和验证服务

1. 重启 APM Server 服务

bash
# 重启 APM Server 服务
sudo systemctl restart apm-server

# 启用开机自启动
sudo systemctl enable apm-server

# 检查服务状态
sudo systemctl status apm-server

2. 检查服务日志

查看 APM Server 日志以确认配置是否正确:

bash
# 查看实时日志
sudo journalctl -u apm-server -f

# 查看最近的日志
sudo journalctl -u apm-server --since "10 minutes ago"

# 查看日志文件
sudo tail -f /var/log/apm-server/apm-server

3. 验证连接

测试 APM Server 与 Elasticsearch 的连接:

bash
# 检查 APM Server 健康状态
curl -X GET "localhost:8200/"

# 验证与 Elasticsearch 的连接
curl -X GET "localhost:8200/config"

常见问题排查

1. 证书验证失败

如果遇到证书验证失败的错误,请检查:

bash
# 检查证书文件是否存在
ls -la /etc/apm-server/certs/es-ca.crt

# 验证证书格式
file /etc/apm-server/certs/es-ca.crt

# 检查证书内容
openssl x509 -in /etc/apm-server/certs/es-ca.crt -text -noout

2. 权限问题

确保 APM Server 进程有权限读取证书文件:

bash
# 检查文件权限
ls -la /etc/apm-server/certs/

# 修正权限(如果需要)
sudo chmod 644 /etc/apm-server/certs/es-ca.crt
sudo chown apm-server:apm-server /etc/apm-server/certs/es-ca.crt

3. 网络连接问题

测试网络连接:

bash
# 测试端口连通性
telnet your-elasticsearch-host 9200

# 使用 curl 测试 HTTPS 连接
curl -k https://your-elasticsearch-host:9200

安全最佳实践

  1. 定期更新证书:监控证书有效期,及时更新即将过期的证书
  2. 最小权限原则:确保证书文件只有必要的进程可以访问
  3. 备份证书:定期备份重要的证书文件
  4. 监控日志:定期检查 APM Server 日志,及时发现安全问题

总结

通过本文的配置步骤,我们成功实现了 APM Server 与 Elasticsearch 之间的 SSL 安全连接。这种配置方式确保了数据传输的安全性,是生产环境中的标准做法。

在实际部署中,建议结合监控系统对证书有效期进行监控,确保服务的持续稳定运行。同时,定期审查和更新安全配置,以应对不断变化的安全威胁。

使用uv高效管理Python虚拟环境:现代化的包管理解决方案
Elasticsearch JVM 内存配置详解