1. 为什么需要为Prometheus添加Basic Auth认证
Prometheus作为云原生监控的事实标准,默认安装后WEB界面无需任何认证即可访问。这在实际生产环境中会带来严重的安全隐患:
- 监控数据可能包含敏感业务指标(如订单量、用户数)
- 暴露的Target状态可能泄露内部架构信息
- 配置页面可修改抓取规则,存在被恶意篡改风险
我在某次安全审计中就发现,一个未加密的Prometheus实例被外部扫描工具探测到,导致业务QPS等核心指标完全暴露。这也是为什么我们需要为Prometheus WEB界面配置basic-auth认证。
2. 认证方案选型对比
2.1 常见认证方式对比
| 认证方式 | 实现复杂度 | 安全性 | 适用场景 |
|---|---|---|---|
| Basic Auth | 低 | 中 | 内部工具、测试环境 |
| OAuth2/OIDC | 高 | 高 | 企业级SSO集成 |
| 反向代理认证 | 中 | 高 | 已有统一认证基础设施 |
| IP白名单 | 低 | 低 | 封闭网络环境 |
2.2 为什么选择Basic Auth
对于大多数中小规模部署场景,Basic Auth具有明显优势:
- 无需额外组件(如OAuth服务)
- 配置简单,5分钟即可上线
- 兼容所有浏览器和API客户端
- 可通过HTTPS加密传输保障安全
注意:Basic Auth密码需通过HTTPS传输,否则会被中间人攻击获取。生产环境必须配合TLS使用。
3. 详细配置步骤
3.1 生成密码文件
使用htpasswd工具创建认证文件(需安装apache2-utils):
# Ubuntu/Debian sudo apt install apache2-utils # CentOS/RHEL sudo yum install httpd-tools # 生成密码文件(首次创建加-c参数) htpasswd -c /etc/prometheus/web_auth admin执行后会提示输入密码,建议使用16位以上复杂密码。文件内容类似:
admin:$apr1$kbyh6u3n$Xe6HxUJzvMybVDkaD8.wJ.3.2 修改Prometheus配置
编辑prometheus.yml,添加web配置段:
web: config_file: /etc/prometheus/web.yml创建web.yml认证配置文件:
basic_auth_users: admin: $apr1$kbyh6u3n$Xe6HxUJzvMybVDkaD8.wJ.3.3 权限与SELinux设置
确保Prometheus进程有权限读取配置文件:
chown prometheus:prometheus /etc/prometheus/web.*如果使用SELinux,需要添加策略:
chcon -R -t prometheus_config_t /etc/prometheus/web.*3.4 重启服务验证
systemctl restart prometheus访问WEB界面时会出现认证弹窗:
4. 高级配置技巧
4.1 多用户管理
可以通过追加方式添加多个用户:
htpasswd -b /etc/prometheus/web_auth user2 securePassword123对应web.yml需同步更新:
basic_auth_users: admin: $apr1$kbyh6u3n$Xe6HxUJzvMybVDkaD8.wJ. user2: $apr1$xyz123$5GHIjklmnOPQRSTUVWXYZA4.2 与Alertmanager集成
如果使用Alertmanager,需要同步配置basic-auth:
alerting: alertmanagers: - basic_auth: username: admin password: "securePassword" scheme: http static_configs: - targets: ['alertmanager:9093']4.3 密码轮换策略
建议每90天更新密码:
- 生成新密码文件web_auth_new
- 更新web.yml
- 执行
systemctl reload prometheus热加载配置
5. 常见问题排查
5.1 认证失败
检查步骤:
- 确认web.yml文件权限(需prometheus用户可读)
- 检查密码文件路径是否与配置一致
- 查看Prometheus日志:
journalctl -u prometheus -f
5.2 性能影响测试
使用ab工具测试认证对性能的影响:
ab -n 1000 -c 10 -A admin:password http://prometheus:9090/metrics实测结果:开启basic-auth后QPS下降约3%,属于可接受范围。
5.3 浏览器缓存问题
Chrome浏览器可能会缓存认证信息,导致密码修改后仍能访问。解决方法:
- 使用隐身窗口测试
- 清除浏览器缓存
- 重启浏览器
6. 安全增强建议
必须启用HTTPS:
web: config_file: /etc/prometheus/web.yml tls_config: cert_file: /path/to/cert.pem key_file: /path/to/key.pem配合防火墙规则限制访问源IP:
iptables -A INPUT -p tcp --dport 9090 -s 10.0.0.0/24 -j ACCEPT定期审计访问日志:
grep 'remote_addr' /var/log/prometheus/access.log | awk '{print $1}' | sort | uniq -c
我在实际部署中发现,结合IP白名单+Basic Auth+HTTPS的三重防护,可以满足大多数企业的安全合规要求。对于特别敏感的环境,建议考虑使用OAuth2代理方案。