← 文章 / 云原生与基础设施
signoz 23小时前 · 2026-09-28 08:10:15 · 1 阅读

在 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:创建限定范围的自定义角色

  1. 前往设置 > 角色,点击自定义角色。
  2. 输入名称(例如 platform-dashboards)。
  3. 配置下方的事务组,然后点击创建角色。

交互模式:在仪表板卡片中,将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 以及发布公共链接的操作。

Info

list 和 create 作用于工作区而非实例,因此仅可授予全部或无权限。若未授予 list 权限,Dashboard 页面将被完全屏蔽,包括该角色原本可读的 Dashboard。请参阅交易参考文档。

步骤 3:分配角色

在设置 > 身份与访问 > 成员中,打开目标成员并分配 platform-dashboards 角色。

Warning

角色权限是累加的:主体(principal)将获得其所有角色权限的并集。即使一个用户被同时赋予了 signoz-viewer 和 platform-dashboards,他仍然保留 Viewer 对所有 Dashboard 的访问权限。若要真正限制用户权限,必须使用作用域自定义角色替代其托管角色,而非与其共存。请将用户需要的其他交易权限一并加入该自定义角色中。

验证

以仅持有该作用域角色的用户身份登录,并打开 Dashboard 列表:

  1. 打开角色中包含的某个 dashboard,它能正常加载并显示所有面板。
  2. 打开角色中未包含的 dashboard,页面会提示你无权读取。
  3. 在角色可读取的 dashboard 上查看工具栏和 Actions 菜单,角色无权使用的操作(如编辑和删除)仍然可见但处于禁用状态,并标注了所需的事务。

角色能做什么、不能做什么

  • 列表会显示全部内容。list 不受 read 过滤,因此列表仍会显示工作区中的所有 dashboard。角色无权读取的行依然可以点击,打开时才会提示拒绝访问。dashboard 的内容展示由 read 控制,而列表行来自 list。
  • 保存的视图和置顶跟随 list。持有 list 的用户都可以在 dashboards 页面上创建、重命名和删除保存的视图,以及为自己置顶 dashboard。
  • 被拒绝的操作保持可见并禁用。编辑、锁定、发布和删除操作在悬停时都会显示所需的事务,用户可以据此知道该申请什么权限。
  • 新建 dashboard 与 list 无关。对于拥有 create 但没有 list 的角色,该按钮仍然可用。
  • 公开链接是匿名的。无论 dashboard 事务如何配置,任何拿到已发布链接的人都可以免登录打开 dashboard。发布和取消发布则需要 update。

后续阅读

原始来源: signoz

评论 (0)