Prometheus 生产部署必须启用 HTTPS + Basic Auth 安全加固:v2.40+ 强制哈希密码,需生成 bcrypt 密码、配置 web-config.yml、禁用 admin/lifecycle 接口,并同步加固 Node Exporter。

Prometheus 默认不设防,Web 界面和所有 API(如 /api/v1/query、/config、/status)完全裸露。任何能连上端口的人,都可读指标、查配置、调用 reload 或删除数据等高危操作。安全加固不是“锦上添花”,而是生产部署的强制前提。
确认版本并启用基础认证能力
Prometheus 2.24 起实验性支持 Basic Auth,但稳定可用从 v2.35.0(2022年5月)开始;v2.40.0 起成为标准功能,并强制要求哈希密码、拒绝明文存储。
- 运行
prometheus --version检查当前版本;低于 v2.35 必须升级 - v2.35–v2.39 需显式禁用 admin 接口:
--web.enable-admin-api=false,否则认证可能被绕过 - v2.40+ 默认更严格:仅接受 bcrypt/scrypt/apr1 哈希,自动过滤空密码,启动时校验 YAML 格式
生成并配置 bcrypt 加密密码
不能直接用 .htpasswd 文件——Prometheus 只认 YAML 格式的 web-config.yml 中的 basic_auth_users 字段。
- 推荐命令生成(bcrypt + rounds=12):
htpasswd -nBC 12 admin,输入密码后输出哈希值 - 或手写 YAML:
basic_auth_users: {admin: "$2y$12$..."},确保换行符为 LF、无 BOM、无注释、无空行 - 原始密码必须是强密码(长度≥12,含大小写字母、数字、符号)
- 配置文件权限设为
chmod 600 web-config.yml,防止泄露
绑定 TLS 实现传输加密
Basic Auth 必须配合 HTTPS 使用,否则密码以明文传输,等于没锁。
- 用 OpenSSL 生成证书:
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" - 在
web-config.yml中同时声明 TLS 和用户:tls_server_config:cert_file: /etc/prometheus/tls/cert.pemkey_file: /etc/prometheus/tls/key.pembasic_auth_users:admin: "$2y$12$..." - 启动时指定:
prometheus --config.file=prometheus.yml --web.config.file=web-config.yml
收敛暴露面与关闭高危接口
认证只是第一道门,还需限制权限范围和网络可达性。
- 除非真需远程重载配置,否则始终禁用:
--web.enable-lifecycle=false - 禁用 admin API:
--web.enable-admin-api=false,移除/api/v1/admin/tsdb/delete_series等敏感 endpoint - 修改默认端口(如从 9090 改为 9095),配合防火墙白名单(如只允 K8s 节点网段访问)
- 采集端同步加固:Node Exporter 启用 Basic Auth,并在
prometheus.yml的 job 中配置basic_auth拉取凭证

















