自定义 RBAC 角色 (Pro)

DefectDojo Pro 功能。 本页所述的成员 / 组 / 全局角色 RBAC 系统是 DefectDojo Pro 的一部分。开源版 DefectDojo 使用授权用户模型。有关开源版访问控制,请参见该页面;如果您正在版本之间迁移,请参见 3.0 升级说明

DefectDojo Pro 内置了五种角色:只读者(Reader)编写者(Writer)维护者(Maintainer)所有者(Owner)API 导入者(API Importer)。如果这些角色都不适合您的需求,您现在可以通过精确选择要授予的权限来构建自己的角色。

自定义角色可以在内置角色能够使用的任何地方使用:作为全局角色、作为组的角色、作为默认组角色,以及作为单个组织或资产上的成员角色。

这五种内置角色成为锁定的、可克隆的预设。它们的权限保持不变(有关每种角色授予的权限,请参见操作权限图表),它们无法被编辑或删除,克隆其中一种角色是创建新角色的推荐方式。

开始之前

自定义角色管理默认处于关闭状态。超级用户可以通过启用设置(Settings) > 功能开关(Feature Flags) 中的自定义角色(Custom Roles) 来开启此功能。有关该页面的工作方式,请参见功能开关

在该功能关闭时,角色页面仍然可读:您可以查看内置角色及其权限,但无法创建、编辑、克隆或删除任何内容。

管理角色需要超级用户状态或内置的所有者(Owner) 全局角色。这是刻意设计的,不能委派给自定义角色:请参见自定义全局角色可解锁的功能

打开角色页面

前往左侧边栏中的 👤 用户(Users) > 角色(Roles)。该菜单项对超级用户和拥有内置所有者全局角色的用户可见。

列出内置角色和自定义角色的角色页面

该表列出了您实例中的每个角色:

显示内容
ID角色的数字 ID。在筛选用户表或调用 API 时很有用。
名称(Name)角色名称。
描述(Description)您对该角色用途的说明。此项为可选,除非有人填写,否则为空。内置角色不附带此说明。
权限(Permissions)已授予权限的数量。点击可打开完整权限网格的只读视图。
用户(Users)有多少用户将此角色作为其全局角色持有。点击可在用户表中查看这些用户。
类型(Type)五种预设角色为内置(Built-in),您创建的角色为自定义(Custom)

每一列都可排序和筛选,关键字搜索会匹配名称和描述。

创建角色

克隆内置角色(推荐)

克隆操作让您从一套已知可用的权限集开始,而不是从空白网格开始,这样就更不容易意外遗漏角色所需的权限。

  1. 找到与您需求最接近的角色。
  2. 打开其 菜单,选择克隆角色(Clone Role)
  3. 系统会立即创建一个副本,命名为 <original> (copy),其权限和描述与来源角色相同。
  4. 打开该副本的 菜单,选择编辑角色(Edit Role),然后重命名并调整其权限。

内置角色虽然无法编辑,但可以被克隆。克隆出的角色会记录其来源角色。

从零开始创建

  1. 点击新建角色(New Role)
  2. 为其填写名称(Name)(必填)和可选的描述(Description)
  3. 在下方的网格中选择其权限(参见下一节)。
  4. 点击保存角色(Save Role)

角色名称必须唯一,且检查时不区分大小写:如果已存在 Triage Lead,则 triage lead 会被拒绝。

选择权限

角色表单中的权限网格

权限分为三张表加一份清单。

对象权限(Object Permissions) 适用于角色所分配到的组织和资产,以及它们下属的所有内容。

查看添加编辑删除
组织☑️☑️☑️☑️
资产☑️☑️ ¹☑️☑️
测试活动☑️☑️☑️☑️
测试☑️☑️☑️☑️
发现项☑️☑️☑️☑️
发现项组☑️☑️☑️☑️
风险接受☑️☑️☑️☑️
位置☑️☑️☑️☑️
组件☑️
备注²☑️☑️☑️
基准²☑️☑️
语言☑️☑️☑️☑️
技术☑️☑️☑️☑️
资产 API 扫描配置☑️☑️☑️☑️
资产跟踪文件☑️☑️☑️☑️
☑️☑️☑️
  1. 资产(Asset) > 添加(Add) 是指在角色所分配到的组织内创建新资产。
  2. 备注和基准的查看权限是继承而来的:能够查看父级测试活动、测试、发现项或资产的角色,就能查看其备注和基准。这些单元格显示的是 ? 图标,而不是复选框。

组与成员权限(Group & Member Permissions) 控制谁可以管理成员资格。此处的列为查看、管理、添加、添加所有者和编辑、删除。

可用操作
组织组、资产组查看、添加、添加所有者、编辑、删除
组织成员、资产成员、组成员管理、添加所有者、删除

全局功能权限(Global Feature Permissions) 控制的是实例范围内的 Pro 功能,而非单个组织或资产,因此只有当角色作为全局角色持有时才会生效。在仅用作资产成员资格的角色上授予这些权限不会产生任何效果。

可用操作
报告模板查看、添加、编辑、删除
已生成报告查看、添加、删除
连接器、Sensei、资产层级结构、版本管理器、调优器、通用解析器、规则、集成查看、编辑
缓解策略编辑
审计日志、计量查看

附加权限(Additional Permissions) 是一份不符合查看/添加/编辑/删除模式的功能清单:

  • 配置资产通知:选择单个资产发送哪些通知,以及发送到何处。
  • 导入扫描结果:导入和重新导入扫描结果,创建和更新发现项。
  • 共享仪表板布局:向其他用户发布仪表板布局。仅限全局角色。
  • 共享表格偏好设置:发布已保存的表格视图(列、筛选器、排序顺序)。仅限全局角色。
  • 查看备注历史记录:查看谁在何时更改了备注。

如何读懂网格

角色权限的只读视图

您看到的内容含义
空复选框该权限存在但未被授予。点击即可授予。
已勾选的复选框已授予。
阴影处理的空单元格该行和操作不存在此权限,不可选择。
? 图标查看权限继承自父对象,因此此处无需授予。
绿色 ✔(只读视图)已授予。
红色 ✘(只读视图)未授予。

在每一行中,最左侧的权限(查看,或成员行中的管理)是该行其余权限的前提条件。您必须先授予该权限,该行中的其他单元格才会变为可用,因为角色无法对看不到的内容进行有意义的编辑或删除。清除该前提权限会同时清除该行的其余权限。

编辑、克隆和删除

每一行的 菜单都提供编辑角色(Edit Role)克隆角色(Clone Role)删除角色(Delete Role)角色历史记录(Role History)

内置角色仅提供克隆角色选项。任何人(包括超级用户)都无法编辑或删除它们。这样可以保持一个已知的基准不变,并使升级过程可预测。

删除仍被分配给任何人的角色将会失败。请先重新分配或移除这些分配,然后再删除该角色。计入此项的分配包括组织和资产成员资格(用户和组均计入)、全局角色、组成员资格,以及系统设置中的默认组角色。

API 可以通过单次调用为您完成重新分配。请参见通过 API 管理角色

分配自定义角色

自定义角色会与内置角色一起出现在每个角色下拉列表中:

位置方式
用户上的全局角色用户表单上的全局角色字段。仅限超级用户。请参见设置用户的权限
组上的全局角色组表单上的全局角色字段。请参见共享权限:用户组
组织或资产成员资格组织或资产上的权限对话框,适用于用户和组。请参见 Pro 中的权限设置
默认组角色系统设置中的默认组角色,应用于新创建的用户。请参见管理默认权限
组内角色组成员列表中的角色下拉列表。此下拉列表仅提供至少授予一项组权限的角色,因此没有任何组权限的角色不会出现在其中。

有两个限制值得了解:

  • 所有者级别被保留。 自定义角色永远不能成为所有者级别的角色。只有内置的所有者角色才是,因此只有它拥有管理其他所有者的隐含权力。
  • 将所有者角色授予他人仍需要相应的添加所有者权限,无论是在组织、资产还是组上进行操作。

自定义全局角色可解锁的功能

部分界面功能是基于最低全局角色而非单项权限来控制访问的。为了让自定义角色能够与这些限制协同工作,DefectDojo 会将自定义全局角色与内置层级进行对比排名:自定义角色会获得其权限完全覆盖的最高层级。

  • 完全覆盖维护者所授予的全部权限的自定义角色,在这些限制中会被视为维护者。
  • 完全覆盖编写者所授予的权限,则会被视为编写者。只读者同理。
  • 若都无法完全覆盖,则不会获得任何层级。其各项权限仍会按所授予的方式正常工作;只是基于层级的界面限制仍会保持关闭状态。
  • 所有者层级永远无法通过此方式获得。 角色管理以及其他所有基于所有者全局角色进行限制的功能,仍仅限超级用户和内置的所有者角色使用。

覆盖必须是完整的,这有时会让人感到意外。从维护者克隆而来的角色会获得维护者层级。若手动重建维护者的权限时遗漏了一项,该角色则会落到编写者层级。如果自定义全局角色缺少您预期中的界面功能,请将其与操作权限图表中的内置层级进行对比。

角色历史记录

自定义角色会保留审计跟踪。从角色的 菜单打开角色历史记录(Role History),即可查看哪些权限被授予或撤销、由谁操作、何时操作,以及持有该角色的用户发生的变更。

该历史记录不会显示以下两项内容:角色自身名称和描述的变更,以及内置角色的权限(这些权限是预置的,从不被编辑,因此不会产生历史记录)。

角色历史记录属于只读内容,因此无论自定义角色功能是否开启,都可以查看。

通过 API 管理角色

角色可通过 /api/v2/roles/ 访问。读取操作对任何已通过身份验证的用户开放,因为客户端需要角色列表来填充下拉菜单。写入操作需要超级用户状态或内置的所有者全局角色,并且需要启用自定义角色功能开关。

操作请求
列出角色GET /api/v2/roles/
获取单个角色GET /api/v2/roles/{id}/
列出所有可授予的权限GET /api/v2/roles/permissions_catalog/
创建角色POST /api/v2/roles/,带 name、可选的 descriptionpermissions 列表
替换角色的权限PATCH /api/v2/roles/{id}/,带 permissions 列表
克隆角色POST /api/v2/roles/{id}/clone/,带可选的 namedescription
删除角色DELETE /api/v2/roles/{id}/
删除角色并转移其分配DELETE /api/v2/roles/{id}/?reassign_to={other_role_id}
读取角色的历史记录GET /api/v2/roles/{id}/history/

说明:

  • permissions替换角色的授权列表,而不是在其基础上追加。请发送您希望该角色最终拥有的完整权限集合。
  • ?reassign_to= 会在一次事务中,将被删除角色的所有分配转移到您指定的角色。这是批量重新分配的唯一方式:界面未提供此功能。
  • 尝试编辑或删除内置角色会返回 403。编辑未知的权限值、重复使用已存在的角色名称,或在未指定 reassign_to 的情况下删除正在使用中的角色,都会返回 400 并附带说明。
  • is_owner 无法通过 API 设置。提交该字段会被接受但会被忽略。

须知事项

  • 同一对象上的多个角色会授予其权限的并集。 如果用户直接在某资产上持有一个角色,又通过组继承了另一个角色,那么该用户会获得两个角色所授予的全部权限。角色只会增加权限,永远不会移除权限。
  • 权限变更会在下次页面加载时生效,而不会在当前视图中立即生效。后台作业最多可能需要 30 秒,缓存的权限数据最多可能需要 5 分钟,才能反映出某项编辑。
  • 角色下拉列表最多显示 250 个角色。 超过此数量后,部分角色将不会出现在下拉列表中,但它们仍会继续正常工作。
  • 维护者和所有者可以添加组织,但网格中不会显示此项。 对于这两种角色,该授权以全局范围的授权形式存储,而网格只读取对象范围的授权,因此其组织 > 添加单元格显示为未授予。克隆这两种角色中的任意一种都会保留该授权。
  • 术语遵循您实例的设置。 本文档使用默认标签“组织”和“资产”。如果您的实例关闭了组织/资产的重新标记功能,同样的行会显示为“产品类型”和“产品”。
  • 角色页面对其他所有人都是只读的。 直接访问 /settings/roles 的用户可以查看角色及其权限,但无法更改任何内容。权限数据并不敏感,服务器会在每次写入时强制执行真正的边界检查。