本篇目录9 节

03配置与安全Configure

生产环境安全加固

把 Grafana 安全地暴露到网络上:改掉默认密码、关闭匿名访问、设置强签名密钥、HTTPS 反向代理配置示例、最小权限原则、减少信息暴露与例行备份。

约 2 分钟/643 字/GRAFANA 12.X

以什么为基准

只要实例满足「多人使用」或「网络可达」其中一条,下面的清单就全部适用。纯本机自玩的实例,至少完成第 1、2 步。

1. 改掉默认管理员

Web 界面用 admin / admin 登录后会强制要求改密——别跳过。密码遗忘或需要脚本化重置时,用命令行:

# 12.x 命令;旧版本发行包中为 grafana-cli,以实际安装为准
grafana cli admin reset-admin-password 'A-Strong-Passwd!'

注意: 重置密码的命令只在「没有其他管理员」或本机回环地址下可用,这是刻意的防滥用设计;若实例已存在多个管理员,请从界面操作。

2. 关闭匿名访问与自助注册

[auth.anonymous]
enabled = false

[users]
allow_sign_up = false
allow_org_create = false
auto_assign_org_role = Viewer

auto_assign_org_role = Viewer 保证即使将来重新开放注册,新用户也拿不到编辑权限。

3. 设置强签名与加密密钥

两个密钥各司其职:secret_key 签发登录 cookie,encryption_secret_key 加密数据源凭据等敏感数据。部署时一次性生成、用环境变量注入、纳入密钥管理:

openssl rand -hex 32   # 生成一次,分别赋给两个键
docker run -d ... \
  -e "GF_SECURITY_SECRET_KEY=<生成值1>" \
  -e "GF_SECURITY_ENCRYPTION_SECRET_KEY=<生成值2>" \
  grafana/grafana-oss:12.1.0

中途更换会使现有登录会话失效、已加密凭据不可读,务必在首次部署时定稿。

4. HTTPS:反向代理终结 TLS

应用层直接跑 TLS 也可行(protocol = https),但生产更常见的是 Nginx 终结证书、Grafana 只听本机:

server {
    listen 443 ssl;
    server_name grafana.example.com;

    ssl_certificate     /etc/letsencrypt/live/grafana.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/grafana.example.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

同时把 [server] 段的 domainroot_url 改成对外 HTTPS 地址,否则登录跳转与 WebSocket(实时功能)会出问题。

5. 最小权限

  • 默认角色给 Viewer,按需晋升;编辑与告警权限给 Editor,管理员数量克制在个位数。
  • 团队与文件夹级别做授权,而不是把 Admin 发出去省事,见角色与权限
  • 程序化调用一律用 Service Account 令牌,不要用人类账号的 API Key。
  • 企业环境把登录交给 SSO(OAuth / LDAP / SAML),见认证与登录集成

6. 减少信息暴露与例行备份

  • 防火墙或负载均衡安全组只放行 443,3000 端口不对公网开放。
  • 反代层 server_tokens off,对外隐藏后端细节;/api/health 会返回版本号,仅对内网监控开放。
  • 界面上的页脚链接与「帮助」入口可以按版本提供的设置收敛,以实际版本设置界面为准。
  • 备份节奏参考升级与回滚的备份小节,并把恢复演练排进日历。

常见坑

  • 只换了密码,没换 secret_key——cookie 伪造面仍然存在。
  • 反代上了 HTTPS 但 root_url 还是 http://localhost:3000,表现为登录成功后跳回错误地址。
  • 用 root 跑 Grafana 或容器——默认 UID 472 的设计白白浪费。

下一步

本页为学习整理的中文改写,依据Grafana 官方文档最新版本编写(以 Grafana 12.x 为基准),操作路径请以实际产品界面为准。

Configure