最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Prometheus 监控系统的网络通信安全:TLS设置
时间:2026-07-08 09:50:46 编辑:袖梨 来源:一聚教程网
Prometheus网络通信安全核心在于强制启用TLS加密,覆盖Web接口、抓取目标、远程写入及Alertmanager全链路;需通过web-config.yml配置PEM证书、TLS版本与密码套件,并严格管理证书生命周期。
Prometheus 的网络通信安全核心在于 TLS 加密,它不是可选附加项,而是生产环境的强制底线。没有 TLS,所有指标拉取、API 访问、管理接口的数据都在明文传输,相当于把监控拓扑、目标地址、告警规则甚至凭证直接摊开在网络里。
TLS 必须覆盖的关键通信路径
不是只给 Web UI 加 HTTPS 就算完成——真正需要加密的是全部对外通信链路:
- Prometheus Server 的 Web 接口:包括 `/metrics`、`/api/v1/*`、`/graph` 等所有 HTTP 端点,必须走 HTTPS
- 抓取(scrape)目标端点:当监控对象(如 Node Exporter、etcd、kube-apiserver)启用 HTTPS 时,Prometheus 必须配置 `tls_config` 才能建立可信连接
- 远程写入(remote_write):向 Cortex、Thanos 或其他后端发送数据时,若对方要求 TLS,需在 `remote_write` 配置中指定证书与验证策略
- Alertmanager 通信:Prometheus 向 Alertmanager 发送告警时,若 Alertmanager 启用了 TLS,需配置 `alerting.webhook_timeout` 和 `tls_config`
Server 端 TLS 配置实操要点
从 Prometheus 2.24 开始,原生支持通过 web-config.yml 启用服务端 TLS:
- 证书文件需为 PEM 格式,包含完整证书链(不含私钥);私钥文件必须严格权限控制(
600) -
min_version建议设为TLS12,禁用 TLS 1.0/1.1;max_version可设为TLS13 - 显式指定安全密码套件,例如:
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,避免使用 CBC 模式或 SHA-1 - 启动时必须显式传入
--web.config.file=/etc/prometheus/web-config.yml,否则配置不生效
抓取端 TLS 配置常见陷阱
很多团队只加固了 Server,却忽略了反向通信的安全性:
- 若目标服务使用自签名证书或内网 CA 签发证书,必须在
scrape_configs.tls_config.ca_file中提供可信 CA 证书,不能设insecure_skip_verify: true - 需要客户端认证(mTLS)时,除
ca_file外,还需配置cert_file和key_file,且证书需被目标服务信任 - Kubernetes 场景下,ServiceMonitor 中的
tlsConfig必须正确引用 Secret,且该 Secret 需挂载到 Prometheus Pod 的对应路径 - 证书过期会导致整个 job 抓取失败,建议配合 cert-manager 自动轮换,并设置告警监控证书剩余有效期
证书管理与运维建议
TLS 安全性不仅取决于配置,更依赖证书生命周期管理:
- 生产环境优先使用内网私有 CA(如 HashiCorp Vault PKI 或 cfssl),而非自签名证书
- 证书有效期建议设为 1 年以内,避免长期失效风险;关键组件(如 etcd client cert)可设为 90 天
- 所有证书和私钥文件应存放在独立安全目录(如
/etc/prometheus/tls/),禁止放入配置仓库或镜像层 - 定期扫描证书到期时间,可通过 Prometheus 自身指标
prometheus_tls_certificate_expiration_seconds实现自动告警