以什么为基准
只要实例满足「多人使用」或「网络可达」其中一条,下面的清单就全部适用。纯本机自玩的实例,至少完成第 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] 段的 domain 与 root_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.ini与环境变量覆盖配置。
- 权限矩阵展开讲:角色与权限。
- 出问题时去哪看日志:日志、诊断与服务器管理。