ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

监控系统安全要先收紧入口

监控系统安全要先收紧入口 监控系统安全要先收紧入口可观测性系统保存着服务拓扑、资源使用和数据源配置安全设计不能只放在仪表盘之后。Prometheus、Grafana 和各类 Exporter 一旦暴露在不应访问的网络范围内攻击面并不小于普通业务系统。先盘点入口、认证方式和服务账号权限再决定哪些 API 可以开启。敏感配置应交给受管的密钥系统或运行时注入不要写进示例、仓库或命令历史。下面的配置片段应按本地版本和安全策略验证后再使用。Prometheus/Grafana 监控体系安全架构收紧为了将监控体系暴露面降至最低必须建立包含 TLS 传输加密、 Basic Auth / OAuth2 认证以及 API 风险拦截在内的三道安全防线。第一防线Prometheus 通信加密与 Basic Auth 配置默认情况下Prometheus 的 HTTP Server 既不支持 TLS也不提供密码验证。从 Prometheus 2.24.0 开始官方原生支持通过web-config.yml配置 HTTPS 与 Basic Auth。1. 生成加密密码 Hash使用bcrypt将管理员密码进行哈希处理# 安装 python bcrypt 库并生成密文 python3 -c import bcrypt; print(bcrypt.hashpw(bchange-me, bcrypt.gensalt()).decode()) # 输出: $2b$12$e8r6pQ5Z2g... (保存此 Hash)2. 编写web-config.yml配置文件# /etc/prometheus/web-config.yml tls_server_config: cert_file: /etc/prometheus/certs/prometheus.crt key_file: /etc/prometheus/certs/prometheus.key client_auth_type: RequireAndVerifyClientCert client_ca_file: /etc/prometheus/certs/ca.crt basic_auth_users: admin: $2b$12$e8r6pQ5Z2g... # 上一步生成的 bcrypt 密文3. 启动 Prometheus 并应用安全配置prometheus \ --config.file/etc/prometheus/prometheus.yml \ --web.config.file/etc/prometheus/web-config.yml \ --web.enable-lifecyclefalse \ --no-web.enable-admin-api--no-web.enable-admin-api彻底关闭删除时序数据的危险 API。--web.enable-lifecyclefalse禁止通过未经授权的 HTTP 请求触发配置重载。第二防线Grafana 凭据加固与数据源安全隔离Grafana 是监控数据的最终展现层也是数据源密码的集中存储库。1. 禁用默认 Admin 弱密码与匿名访问编辑grafana.ini配置文件[security] # 修改默认管理员用户名和密码 admin_user sys_admin_prod admin_password # 通过安全的部署配置或密钥系统注入 # 禁用默认秘钥使用强随机字符串用于 Cookie 加密 secret_key # 使用随机值并由密钥系统管理 [auth.anonymous] # 绝对禁止生产环境开启匿名访问 enabled false [users] # 禁止普通用户自行注册账户 allow_sign_up false2. 保护数据源中的秘钥在配置 Prometheus/InfluxDB/MySQL 数据源时绝不要使用具有root或写权限的数据库账户。为 Grafana 单独创建“只读Read-Only”权限的专用账号。第三防线Exporter 暴露面收敛与白名单控制例如node_exporter或kube-state-metrics如果直接暴露在公网攻击者可以轻易收集到宿主机的内核版本、磁盘挂载点和进程列表。安全规范禁止 Exporter 监听0.0.0.0限制 Exporter 仅监听内网 IP如127.0.0.1或 Pod 内网网卡。Prometheus 抓取加密在prometheus.yml中使用 Bearer Token 抓取 Targetscrape_configs: - job_name: node_exporter scheme: https tls_config: ca_file: /etc/prometheus/certs/ca.crt insecure_skip_verify: false bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token static_configs: - targets: [10.244.1.15:9100]现场安全核查诊断命令行指南运维人员应当定期对在线监控系统执行以下安全渗透式自我诊断诊断 1验证 Prometheus Admin API 是否泄露在终端发起测试请求确认危险 API 是否已被安全拦截# 尝试调用删除时序 API (如果防护生效必须返回 403/404 或 Unauthorized) curl -I https://prometheus.internal.net:9090/-/ready # 预期未带授权信息时不应获得受保护接口的数据。诊断 2核查 Grafana 数据源中是否存在明文密码暴露检查 Grafana 数据库中data_source表的加密情况# 查看 Grafana SQLite/MySQL 数据库中的敏感字段是否全量加密 sqlite3 /var/lib/grafana/grafana.db \ SELECT name, type, access, basic_auth_user FROM data_source;诊断 3检查 Prometheus 配置文件语法与安全规范使用promtool校验配置文件的合法性# 使用 promtool 检查配置文件 promtool check config /etc/prometheus/prometheus.yml监控体系安全加固 CheckList对外入口应有认证、加密和网络访问控制管理 API 仅在明确需要且受保护时开启。Grafana 等组件访问下游时使用最小权限的专用身份密钥不落入版本库。Exporter 放在受控网络内并定期检查监听地址、抓取身份与暴露的指标内容。
返回列表