在 SigNoz 中通过自定义角色限制仪表板访问权限
细粒度访问控制目前处于 beta 阶段。
概述
默认情况下,每个托管角色都能打开工作区内的所有仪表板:signoz-viewer 可读所有仪表板,signoz-admin 和 signoz-editor 则还能创建、编辑和删除。本教程将创建一个自定义角色,该角色只能读取你指定的仪表板,并扩展该角色使其能编辑其中之一。
你将执行以下操作:
- 收集该角色需要访问的仪表板 ID。
- 创建一个仪表板事务范围限定于这些 ID 的自定义角色。
- 分配该角色以替代用户的托管角色。
- 验证该角色在应用内能做和不能做什么。
前提条件
开始之前,请确保你拥有:
- 有效的 SigNoz 许可证。
signoz-admin角色(角色分配仅限管理员操作)。- 已创建需要限定访问范围的仪表板。
步骤 1:收集仪表板 ID
打开该角色需要访问的每个仪表板,从其 URL 中复制 ID。例如,对于 https://<your-signoz-host>/dashboard/0199c47d-f61b-7833-bc5f-c0730f12f046,ID 为 0199c47d-f61b-7833-bc5f-c0730f12f046。
步骤 2:创建限定范围的自定义角色
- 前往设置 > 角色,点击自定义角色。
- 输入名称(例如
platform-dashboards)。 - 配置下方的事务组,然后点击创建角色。
交互模式:在仪表板卡片中,将list(列表)设为All(全部),将read(读取)设为Only selected(仅限选中项),并添加步骤 1 中的每个仪表板 ID。create(创建)、update(更新)和delete(删除)保持为None(无)。
由于面板会执行查询,该角色还需要其仪表板所查询信号遥测数据的read(读取)权限。在Logs(日志)、Traces(追踪)和Metrics(指标)卡片中,将read(读取)设为All(全部),或使用telemetry selector(遥测选择器)进一步限定范围。
JSON 模式:粘贴以下内容:
Copy[
{
"objectGroup": {
"resource": { "kind": "dashboard", "type": "metaresource" },
"selectors": ["*"]
},
"relation": "list"
},
{
"objectGroup": {
"resource": { "kind": "dashboard", "type": "metaresource" },
"selectors": ["<dashboard-id>", "<another-dashboard-id>"]
},
"relation": "read"
},
{
"objectGroup": {
"resource": { "kind": "logs", "type": "telemetryresource" },
"selectors": ["*"]
},
"relation": "read"
},
{
"objectGroup": {
"resource": { "kind": "traces", "type": "telemetryresource" },
"selectors": ["*"]
},
"relation": "read"
},
{
"objectGroup": {
"resource": { "kind": "metrics", "type": "telemetryresource" },
"selectors": ["*"]
},
"relation": "read"
}
]
确认以下字段:
<dashboard-id>:在步骤 1中复制的 Dashboard ID。在selectors数组中列出该角色有权访问的所有 Dashboard。
若需允许该角色编辑上述某个 Dashboard,请添加一组新的权限组,设置 "relation": "update" 并填入对应的 Dashboard ID。update 权限同时涵盖锁定/解锁 Dashboard 以及发布公共链接的操作。
list 和 create 作用于工作区而非实例,因此仅可授予全部或无权限。若未授予 list 权限,Dashboard 页面将被完全屏蔽,包括该角色原本可读的 Dashboard。请参阅交易参考文档。
步骤 3:分配角色
在设置 > 身份与访问 > 成员中,打开目标成员并分配 platform-dashboards 角色。
角色权限是累加的:主体(principal)将获得其所有角色权限的并集。即使一个用户被同时赋予了 signoz-viewer 和 platform-dashboards,他仍然保留 Viewer 对所有 Dashboard 的访问权限。若要真正限制用户权限,必须使用作用域自定义角色替代其托管角色,而非与其共存。请将用户需要的其他交易权限一并加入该自定义角色中。
验证
以仅持有该作用域角色的用户身份登录,并打开 Dashboard 列表:
- 打开角色中包含的某个 dashboard,它能正常加载并显示所有面板。
- 打开角色中未包含的 dashboard,页面会提示你无权读取。
- 在角色可读取的 dashboard 上查看工具栏和 Actions 菜单,角色无权使用的操作(如编辑和删除)仍然可见但处于禁用状态,并标注了所需的事务。
角色能做什么、不能做什么
- 列表会显示全部内容。
list不受read过滤,因此列表仍会显示工作区中的所有 dashboard。角色无权读取的行依然可以点击,打开时才会提示拒绝访问。dashboard 的内容展示由read控制,而列表行来自list。 - 保存的视图和置顶跟随
list。持有list的用户都可以在 dashboards 页面上创建、重命名和删除保存的视图,以及为自己置顶 dashboard。 - 被拒绝的操作保持可见并禁用。编辑、锁定、发布和删除操作在悬停时都会显示所需的事务,用户可以据此知道该申请什么权限。
- 新建 dashboard 与
list无关。对于拥有create但没有list的角色,该按钮仍然可用。 - 公开链接是匿名的。无论
dashboard事务如何配置,任何拿到已发布链接的人都可以免登录打开 dashboard。发布和取消发布则需要update。
后续阅读
- Transactions Reference:dashboard 关系、选择器与受管角色访问
- Roles:创建和管理受管角色与自定义角色
- Scope Telemetry Access by Ingestion Key:限制同一角色可查询的遥测数据范围
- Dashboards:在 SigNoz 中构建和管理 dashboard