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