如何保护 Prometheus 指标端点的安全?

/metrics 端点暴露意味着任何人都能读取内部指标。保护方法:basic_auth/TLS 加密、网络层限制(防火墙/安全组)、反向代理统一鉴权、Prometheus 自身开启 web.config 认证。本文给出完整加固清单。

最佳实践
如何保护 Prometheus 指标端点的安全?封面

/metrics 端点默认无任何保护——内网裸奔是常态但风险真实存在(泄露内部架构、版本、业务数据)。加固从四层入手:网络隔离、传输加密、访问认证、最小暴露。

1. 网络层限制(最优先)

  • 防火墙/安全组:只允许 Prometheus 服务器 IP 访问 9100/9090 等端口;
  • K8s:NetworkPolicy 限制只有 monitoring 命名空间可访问 metrics 端口;
  • 绑定地址:能绑内网网卡就不要绑 0.0.0.0

2. 端点侧加认证

反向代理(Nginx)统一鉴权:

location /metrics {
    allow 10.0.0.0/8;
    deny all;
    auth_basic "metrics";
    auth_basic_user_file /etc/nginx/.htpasswd;
    proxy_pass http://127.0.0.1:9100;
}

Prometheus 侧对应配置 basic_auth

3. 传输加密

  • exporter 前挂 HTTPS 代理,或用支持原生 TLS 的 exporter;
  • Prometheus 自身的 Web 界面/API 用 web.config.file 开启 TLS 与 basic auth:
# web.config
tls_server_config:
  cert_file: /etc/prometheus/server.crt
  key_file: /etc/prometheus/server.key
basic_auth_users:
  admin: $2y$10$...(bcrypt 哈希)

4. 最小暴露

  • 指标里别放敏感值(查询参数、用户信息)——先过一遍 /metrics 输出自查;
  • metric_relabel_configs 在采集侧丢弃敏感指标。

观测云对照

观测云 DataKit 采集本地 /metrics 后经加密通道直传云端,端点只需对 localhost 开放——从架构上消掉了"端点暴露面"问题;平台侧数据访问走完整的 RBAC 权限体系。

常见问题(FAQ)

Q:Pushgateway 需要同样保护吗? 需要,且它可写——任何人都能推送假指标,网络隔离必须做。

Q:K8s 里 kubelet 的 10250 端口呢? 同理敏感,用 NetworkPolicy + RBAC 收紧,只允许 Prometheus 服务账号访问。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台