17.6.6 权限、组织与团队协作
权限、组织与团队协作#
在多团队、多环境的监控体系中,Grafana 的组织(Organization)、团队(Team)、用户(User)与角色(Role)是权限治理的核心。通过组织隔离、团队授权、文件夹权限与审计流程,保障数据安全与协作效率。
1. 原理草图:组织-团队-权限关系#
2. 安装与基础启用(用于实验环境)#
若已安装可跳过,本节用于提供完整可执行示例。
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y grafana
sudo systemctl enable --now grafana-server
# 检查服务状态
sudo systemctl status grafana-server --no-pager
# 预期:Active: active (running)
# 默认登录
# http://<server_ip>:3000
# 用户/密码: admin/admin
3. 组织与多租户隔离示例#
使用 HTTP API 创建组织并切换上下文:
# 1) 创建组织
curl -s -u admin:admin -H "Content-Type: application/json" \
-d '{"name":"prod-observability"}' \
http://127.0.0.1:3000/api/orgs
# 2) 切换到组织(返回组织ID后设置到Header)
# 假设组织ID为 2
curl -s -u admin:admin -H "X-Grafana-Org-Id: 2" \
http://127.0.0.1:3000/api/org
命令解释
- -u admin:admin:基础认证。
- X-Grafana-Org-Id:在 API 层切换组织上下文。
4. 用户与角色模型示例#
创建用户并赋予 Viewer 角色(组织内):
# 1) 创建用户
curl -s -u admin:admin -H "Content-Type: application/json" \
-d '{"name":"alice","email":"alice@example.com","login":"alice","password":"S3curePass!"}' \
http://127.0.0.1:3000/api/admin/users
# 2) 将用户加入指定组织(ID=2),并设置角色 Viewer
curl -s -u admin:admin -H "Content-Type: application/json" \
-d '{"loginOrEmail":"alice","role":"Viewer"}' \
http://127.0.0.1:3000/api/orgs/2/users
角色建议
- Admin:仅平台管理员。
- Editor:业务运维/开发。
- Viewer:默认新用户。
5. 团队与文件夹权限控制示例#
创建团队、文件夹并授予权限:
# 1) 创建团队
curl -s -u admin:admin -H "Content-Type: application/json" \
-H "X-Grafana-Org-Id: 2" \
-d '{"name":"ops-core"}' \
http://127.0.0.1:3000/api/teams
# 2) 创建文件夹
curl -s -u admin:admin -H "Content-Type: application/json" \
-H "X-Grafana-Org-Id: 2" \
-d '{"title":"prod-linux"}' \
http://127.0.0.1:3000/api/folders
# 3) 授权团队访问文件夹(权限:1查看/2编辑/4管理)
# 假设文件夹UID为 "prod-linux-uid",团队ID为 3
curl -s -u admin:admin -H "Content-Type: application/json" \
-H "X-Grafana-Org-Id: 2" \
-d '{"items":[{"teamId":3,"permission":2}]}' \
http://127.0.0.1:3000/api/folders/prod-linux-uid/permissions
命令解释
- permission=2:编辑权限,允许团队维护仪表盘。
- 文件夹权限是仪表盘权限边界。
6. 数据源安全实践(只读账号 + 组织隔离)#
以 Prometheus 只读账号示例:
# /etc/prometheus/prometheus.yml
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['10.0.0.10:9100']
# 建议在 Grafana 中使用 Prometheus 只读账号(由反代控制)
# Nginx basic auth 示例
# /etc/nginx/conf.d/grafana-ds.conf
location /prometheus/ {
auth_basic "Prometheus RO";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://127.0.0.1:9090/;
}
7. 协作流程与版本控制示例#
仪表盘 JSON 导出并入库:
# 1) 导出仪表盘 JSON
curl -s -u admin:admin -H "X-Grafana-Org-Id: 2" \
http://127.0.0.1:3000/api/dashboards/uid/abcd1234 \
| jq '.dashboard' > dashboards/prod-linux.json
# 2) Git 版本控制
git init
git add dashboards/prod-linux.json
git commit -m "add prod linux dashboard v1"
流程建议
- 需求→设计→实现→评审→上线。
- 变更记录写入 Git Commit message。
8. 排错与审计检查清单#
# 1) 检查用户是否在组织内
curl -s -u admin:admin http://127.0.0.1:3000/api/orgs/2/users | jq
# 2) 检查文件夹权限是否生效
curl -s -u admin:admin -H "X-Grafana-Org-Id: 2" \
http://127.0.0.1:3000/api/folders/prod-linux-uid/permissions | jq
# 3) 服务器日志查看
sudo journalctl -u grafana-server -n 200 --no-pager
常见问题
- 403 无权限:检查组织 ID、团队授权、文件夹权限。
- 仪表盘不可见:确认用户角色与文件夹权限继承。
- API 返回 404:确认 UID 与资源存在。
9. 练习#
- 创建两个组织(prod、staging),验证数据源与仪表盘互不可见。
- 创建团队
app-payment,赋予某文件夹编辑权限,测试是否可新增仪表盘。 - 导出仪表盘 JSON,修改标题后再导入,验证版本管理流程。
通过组织隔离、团队授权与文件夹权限的组合,可以在保障安全的同时提升 Grafana 可视化协作效率。