nginx prometheus监控鉴权需双层防护:exporter层启用tls+basic auth并绑定内网地址;prometheus server层通过2.24+内置basic auth、抓取配置同步认证、禁用高危端点,并配合relabel_configs脱敏敏感标签,辅以nginx代理审计日志闭环。

给 Nginx Prometheus 监控加鉴权,核心是分两层防护:一是保护 Exporter 本身(比如 nginx-exporter 或 nginx-vts-exporter),二是保护 Prometheus Server 对这些指标的拉取与查询入口。两者都暴露 HTTP 接口,不设防就等于把系统拓扑、连接串、路径参数等敏感 label 全部公开。
Exporter 层:启用 TLS + Basic Auth
从数据源头加固,防止未授权直接访问 /metrics 端点:
- 使用
--web.config.file参数启动 Exporter,配置含 TLS 和认证的web-config.yml - 证书文件(
server.crt)和私钥(server.key)需由可信 CA 签发或 OpenSSL 生成,禁用自签名用于生产环境 - Basic Auth 配置示例:
basic_auth_users: "monitor": "$2b$12$..." # bcrypt 加密后的密码,不可明文
- 确保 Exporter 绑定到
127.0.0.1或内网地址,不监听0.0.0.0,避免绕过代理直连
Prometheus Server 层:强制访问控制
Prometheus 自身在 2.24+ 版本起支持内置 Basic Auth,比反向代理更轻量且与 Operator 集成友好:
- 生成 bcrypt 密码:用
python3-bcrypt脚本哈希口令,写入配置文件 - 在
prometheus.yml中添加basic_auth块,或通过--web.basic-auth-file指定用户文件 - 所有 targets 抓取配置必须同步带上认证凭据,例如:
scrape_configs: - job_name: nginx static_configs: - targets: ['nginx-exporter:9113'] basic_auth: username: monitor password_file: /etc/prometheus/secrets/exporter-pass - 禁用高风险端点:
/status、/config、/flags、/federate、/api/v1/series,可通过 Nginx 反向代理return 403拦截
标签与查询层:防敏感信息泄露
即使有认证,带敏感 label 的指标仍可能被合法用户误查或滥用:
- 在 Exporter 采集阶段用
relabel_configs删除或哈希化危险字段,如instance、url、path - 禁止 PromQL 中使用
label_values()、metrics()等枚举函数,可在 Nginx 代理层正则匹配并拦截含这些关键词的/api/v1/query请求 - Grafana 数据源配置中必须填入认证信息,且限制其使用的 PromQL 权限范围,避免直连 raw API
审计与日志:留下可追溯痕迹
认证只是第一步,行为审计才能形成闭环:
- Nginx 代理开启
access_log,记录请求时间、IP、URL、状态码、User-Agent(识别是否来自 Grafana/curl/alertmanager) - 将日志接入 Loki 或 ELK,设置告警规则:例如 5 分钟内同一 IP 失败登录 ≥3 次后出现成功访问,或非工作时间调用含
password的 PromQL - Prometheus 本身不记操作日志,所有审计依赖代理层 —— 这不是可选项,是生产环境合规底线











