prometheus需分层配置tls与basic auth双重鉴权:先用openssl生成证书并配置web-config.yml启用tls加密传输,再通过htpasswd生成密码哈希添加basic_auth_users实现身份认证,同时加固node exporter等采集端,并配合物理网络隔离与acl策略确保内网监控系统安全。

直接配置Prometheus的TLS与Basic Auth双重鉴权,不是叠加两个开关,而是分层落实:TLS保障传输通道加密,Basic Auth控制访问身份。两者配合,能有效守住内网监控系统的物理与逻辑边界,尤其适合隔离区、DMZ或带物理接入限制的机房环境。
一、先启用TLS服务端加密(防窃听与中间人)
在Prometheus自身启动前,必须完成证书准备和web服务层加密配置:
- 用OpenSSL生成自签名证书(生产建议用内网CA签发):
openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 -keyout prom.key -out prom.crt -subj "/C=CN/ST=Beijing/L=Beijing/O=IT-OPS/CN=prom.internal" - 将prom.crt和prom.key放入Prometheus配置目录(如/etc/prometheus/)
- 创建web-config.yml,声明TLS服务端配置:
tls_server_config:
cert_file: /etc/prometheus/prom.crt
key_file: /etc/prometheus/prom.key - 启动时显式指定该文件:
--web.config.file=/etc/prometheus/web-config.yml
二、再配置Basic Auth用户认证(防未授权访问)
Basic Auth不替代TLS,而是叠加在已加密的HTTPS连接之上,用于校验操作者身份:
- 用htpasswd或Python bcrypt生成强哈希密码:
htpasswd -nBC 12 admin | tr -d ':\n'(输入密码后输出类似$2y$12$...) - 在同一web-config.yml中追加用户段:
basic_auth_users:
admin: $2y$12$... - 确保Prometheus版本≥2.24,否则basic_auth_users字段无效
- 重启后,所有HTTP API与Web UI均强制走HTTPS + 用户名/密码校验
三、同步加固采集链路(防指标端点反向渗透)
仅保护Prometheus Server不够——若被监控目标(如Node Exporter)也暴露在内网平面,需同步加固其出口:
- 为Node Exporter启用Basic Auth:
启动参数加--web.config.file=node-web.yml,其中含basic_auth_users - 更新Prometheus的prometheus.yml,在对应job中声明认证方式:
basic_auth:
username: admin
password: your_plain_password(注意:此处明文密码仅用于Prometheus主动拉取,不暴露给终端用户) - 如目标支持HTTPS,优先改用scheme: https并配置tls_config,与Server端TLS形成端到端可信链
四、物理边界协同建议(非软件配置但关键)
在机房或边缘节点部署时,软件鉴权需与物理策略对齐:
- Prometheus服务器禁用公网网卡,仅保留内网管理口(如bond0)和专用监控网段(如172.16.100.0/24)
- 交换机ACL限制:只允许运维跳板机IP、Grafana服务器IP、备份系统IP访问Prometheus 9090端口
- 若使用物理KVM或iDRAC,确保其管理网络与监控网络隔离,避免通过带外通道绕过TLS+Auth
- 定期轮换web-config.yml中的密码哈希值,并记录变更时间戳(可结合Ansible Vault实现自动化)











