从早期开始,Grafana就通过三个组织权限级别(Viewer、Editor和Admin)和一个特殊的全局权限级别Grafana Admin来管理访问控制。还有一些配置文件选项,可以全局性地应用于一个实例中的所有组织用户,以及数据源权限和仪表盘权限。
多年来,我们收到了Grafana企业客户对更专业的访问控制配置的许多请求。例如,具有集中用户管理的组织可能希望关闭所有管理员的Grafana内部用户管理API。其他人可能想让他们的编辑修改报告,添加他们自己的数据源和报告,或建立团队空间。
我们已经能够满足其中的一些要求,但有时我们不得不说这是一个我们不支持的边缘案例。我们不可能为Grafana的每个方面的定制解决方案涵盖所有不同的可能性,所以我们必须想出一个通用的解决方案。
引入细粒度的访问控制
在Grafana 8版本中,我们为Grafana企业版引入了细粒度的访问控制。这个测试版功能让你能够对用户在Grafana中可以访问和修改的内容进行细化。在这篇博文中,我们将带领你了解你现在可以做什么。
允许更多用户使用报告
报告是Grafana企业版中最有用的部分之一。也就是说,它与仪表盘的权限并不匹配,而且是资源密集型的,所以到目前为止,它一直是一个只有组织管理员才能使用的功能。通过细粒度的访问控制,我们让你自己决定是否要让你的用户获得报告。
如果你想确保报告可供编辑者编辑和浏览者查看,你可以创建一组角色,提供必要的权限来实现。你可以设置一个配置文件,并在访问控制配置目录中保存为reporting.yml ,它将自动被Grafana接收:
apiVersion: 1
roles:
- name: "reports:edit"
description: "Role to grant edit rights for reports"
version: 1
permissions:
- action: "reports.admin:create"
- action: "reports.admin:write"
scope: "reports:*"
- action: "reports:delete"
scope: "reports:*"
builtInRoles:
- name: "Editor"
- name: "reports:view"
description: "Role to grant viewing rights for reports"
version: 1
permissions:
- action: "reports:read"
scope: "reports:*"
- action: "reports:send"
scope: "reports:*"
builtInRoles:
- name: "Viewer"
- name: "Editor"
有了这套新的权限,当你以编辑身份登录时,你可以创建、删除和编辑所有的报告(但你没有权限改变整个实例的偏好):
作为一个查看者,你可以查看和手动发送报告,但你不能编辑任何东西。
防止从Grafana内部进行用户管理
我们的许多客户使用OAuth、SAML或LDAP对他们的用户进行认证,并希望禁止从Grafana内部创建或修改用户的能力。
随着细粒度访问控制的引入,这是通过取消管理员手动管理用户的方式来实现的。
通过使用访问控制配置,你可以删除fixed:users:admin:edit 和fixed:users:org:edit 的默认分配:
apiVersion: 1
removeDefaultAssignments:
- builtInRole: "Grafana Admin"
fixedRole: "fixed:users:admin:edit"
- builtInRole: "Admin"
fixedRole: "fixed:users:org:edit"
在你将其添加到provisioning/access-control 目录并重启Grafana后,管理员在访问用户管理试图编辑一个用户时,会看到所有的选项都是灰色的。他们不能再修改或创建用户。
未来
虽然这些细粒度访问控制的第一要素很有用,但我们还没有接近这个旅程的终点。
Grafana企业版的客户有多种规模和形式,但他们都在现代社会中处理数据,这意味着他们希望控制谁能访问什么。
在不久的将来,我们将扩大细粒度访问控制的范围,以覆盖Grafana的大部分内容,支持为单个用户或团队定制访问权限,并与Grafana的用户界面集成,这样你就可以设置、删除和管理你的访问权限,而无需使用curl 或编写配置文件。
当所有这些都到位后,我们将继续迭代,使系统更加完善,并提供与每个服务的更深层次的集成,以确保Grafana符合你的组织的要求,无论它们是什么。
我们已经看到,现有的和新的Grafana企业客户对我们所采取的措施感到兴奋,这让我们兴奋地继续努力提供他们需要的控制水平。

