Grafana 如何启用强制 HTTPS 并禁用匿名访问权限?

文章导读
生产环境建议优先通过前置 Nginx 处理 HTTPS 证书及强制跳转,若需 Grafana 原生支持则配置证书路径并关闭匿名认证。
📋 目录
  1. 准备工作:生成测试证书
  2. 核心配置步骤
  3. 验证方法
  4. 常见坑与排查
  5. 参考来源
A A

生产环境建议优先通过前置 Nginx 处理 HTTPS 证书及强制跳转,若需 Grafana 原生支持则配置证书路径并关闭匿名认证。

先说结论:启用 HTTPS 可防止数据明文传输,禁用匿名访问能避免未授权查看监控数据,两者均为安全基线配置。

  • 先判断:确认是使用 Grafana 原生 HTTPS 还是前置 Nginx 服务(推荐 Nginx 处理强制跳转)
  • 优先做:修改配置文件前务必备份,防止配置错误导致服务无法启动
  • 再验证:重启后检查浏览器地址栏锁标志及访问页面是否强制要求登录
  • 防锁死:禁用匿名前,确保至少有一个管理员账号可用,避免无法登录

准备工作:生成测试证书

若暂无正式证书,可使用 OpenSSL 生成自签名证书用于测试。生产环境请替换为可信 CA 证书。

# 创建证书目录
mkdir -p /etc/grafana/ssl

# 生成自签名证书(有效期 365 天)
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout /etc/grafana/ssl/key.pem \
  -out /etc/grafana/ssl/cert.pem

核心配置步骤

1. 备份配置文件

修改前备份当前配置,以便出错时快速回滚。

cp /etc/grafana/grafana.ini /etc/grafana/grafana.ini.bak

2. 方案一:Nginx 前置代理(推荐)

由 Nginx 终止 HTTPS 并配置 HTTP 到 HTTPS 的强制跳转,Grafana 内部可保持 HTTP 监听。

Grafana 如何启用强制 HTTPS 并禁用匿名访问权限?
# Nginx 配置示例
server {
    listen 80;
    server_name grafana.example.com;
    # 强制跳转 HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name grafana.example.com;
    ssl_certificate /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/key.pem;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

3. 方案二:Grafana 原生 HTTPS

若不使用前置代理,直接在 Grafana 配置中启用 HTTPS。注意原生配置不支持自动 HTTP 跳转,需确保只开放 HTTPS 端口或通过防火墙限制。

# /etc/grafana/grafana.ini
[server]
protocol = https
cert_file = /etc/grafana/ssl/cert.pem
cert_key = /etc/grafana/ssl/key.pem
http_port = 3000

4. 禁用匿名访问

警告:执行此步前,请务必确认已创建至少一个管理员账号并能正常登录,否则可能导致无法访问后台。

# /etc/grafana/grafana.ini
[auth.anonymous]
enabled = false

5. 修正文件权限

Grafana 进程用户需有读取证书文件的权限,否则启动失败。私钥文件应限制仅所有者可读。

chown -R grafana:grafana /etc/grafana/ssl
chmod 600 /etc/grafana/ssl/key.pem
chmod 644 /etc/grafana/ssl/cert.pem

6. 重启服务

Grafana 如何启用强制 HTTPS 并禁用匿名访问权限?
systemctl restart grafana-server

验证方法

1. 检查 HTTPS 连接

浏览器访问 Grafana 地址,地址栏应显示锁形图标。若使用 Nginx 方案,输入 http 开头应自动变为 https。

# 检查 HTTPS 响应头
curl -I https://your-grafana-ip:3000
# 检查 HTTP 跳转(Nginx 方案)
curl -I http://your-grafana-ip:3000

2. 检查匿名访问

尝试在无痕模式下打开仪表盘链接,若未登录直接显示登录页面或返回 401 状态,说明匿名访问已禁用。

3. 查看日志

检查 /var/log/grafana/grafana.log,确认服务启动无报错,且监听端口符合预期。

journalctl -u grafana-server -f

常见坑与排查

  • 证书权限问题:若日志提示 permission denied,请检查证书文件所有者是否为 grafana 用户。
  • 配置语法错误:ini 文件对格式敏感,修改后注意不要有多余空格或字符,键值对之间不要有空行。
  • 前置服务头信息:若前置 Nginx,需正确传递 X-Forwarded-Proto 头,否则 Grafana 可能仍生成 HTTP 链接。
  • 锁死风险:禁用匿名前,确保至少有一个管理员账号可用。若被锁死,可临时改回 enabled = true 重启后创建账号。
  • 浏览器缓存:配置变更后若仍显示 HTTP,尝试清除浏览器缓存或使用无痕模式验证。

参考来源