从 Rules Engine 转换 (Pro)
注意:Rules Engine 2.0 是 DefectDojo Pro 专属功能。
两套引擎并行运行。启用 Rules Engine 2.0 不会改变您现有的 Rules Engine 规则中的任何内容,也没有必须迁移它们的截止时间。
当您确实想要迁移时,有一个转换器可以使用。它会将一条 Rules Engine 规则(一个过滤器加一份有序的动作列表)转换为一张等价的 Rules Engine 2.0 图。
转换器的保证
规则要么完整地转换成功,要么完全不转换。 每一次转换都会报告两类结果:
- **问题(Problems)**表示该规则未被写入。不会保存任何部分结果。
- **警告(Warnings)**表示规则转换成功了,但其中有些内容发生了变化,值得您查看一下。
不会有任何内容被悄悄地近似处理。转换器的全部价值就在于:您可以信任一条转换后没有任何附带说明的规则,而对有说明的规则进行人工核查。
转换后的规则始终以禁用状态创建。 两套引擎都在运行,而两条规则对相同的发现项做相同的事情,正是转换器绝不能自行产生的结果。请对每一条转换后的规则进行审查,并有意识地去启用它。
一条规则只会被转换一次。 每条转换后的规则都会记住它来源于哪条规则,因此第二次运行转换器会跳过已经转换过的规则,而不会产生重复项。若要有意替换之前转换出的图,请使用覆盖(overwrite)选项。
运行转换器
通过 UI
规则列表提供了一个转换操作,它会按规则报告哪些转换成功、哪些被跳过、哪些失败。
通过命令行
python manage.py convert_rules_to_v2| Option | Effect |
|---|---|
--dry-run | 打印每条规则本会产生的图,不写入任何内容。 |
--rule-ids 1,2,3 | 仅转换这些规则。省略时会转换所有规则。 |
--overwrite | 替换某条已转换规则的图并提升其版本号,而不是跳过它。 |
--activate-schedules | 同时将每个计划复制到其转换后的规则上。默认关闭。 |
--drop-invalid-filters | 丢弃过滤器集合已不再识别的作用范围过滤器并发出警告,而不是让该规则转换失败。 |
--json | 以 JSON 而非文本形式打印报告。 |
只有当某条规则转换失败时,该命令才会以非零状态退出。跳过会被报告,但不算失败。
先对全部规则用 --dry-run 了解一下情况,再进行真正的转换。
转换会产生什么
| Rules Engine concept | Becomes |
|---|---|
| 规则的过滤器 | 触发器节点上的 Scope(作用范围)。 |
| 带有计划的规则 | 一个 On a Schedule 触发器。 |
| 没有计划的规则 | 一个 Manual Run 触发器。 |
| 按顺序排列的每个动作 | 一个节点,按相同顺序串联。 |
| 由条件守护的动作 | 该节点前面的一个 If / Filter 节点。 |
过滤器词汇表是两套引擎共用的,因此作用范围无需转译即可转换。这是有意为之的:这是同一套过滤器集合,只是有一套实现。
转换后的图会按照与手工构建的图相同的方式进行校验,包括每个节点的配置以及每个下拉菜单的允许取值。某条规则若持有一个产品后来已经弃用的严重程度或风险值,会在转换时就被发现,而不是等到运行时。
哪些内容不会被带过来
有四件事需要提前规划。转换器会在每次运行时以说明的形式报告这些内容。
- 运行历史留在原处。 现有的运行历史及其受影响和被跳过的记录,仍保留在 Rules Engine 的 UI 中,不会被复制。
- 计划默认不会被激活。 一条以计划触发的规则可以转换,但除非您传入
--activate-schedules,否则其计划不会被复制。这样做是为了在两套引擎同时运行期间,让生效中的计划始终唯一归属于原有引擎,从而使转换后的规则不会在您不知情的情况下开始触发。当您确实复制某个计划时,副本会被赋予一个不同的名称,以免与原计划冲突。 - 并发模型不同。 Rules Engine 只有一把实例级的运行锁。Rules Engine 2.0 则按规则各自串行化,因此不同的规则会并发运行。原本轮流执行的一组规则,现在会出现重叠。
- 有一个动作没有对应项。 “将误报状态设为 false”这个动作无法用 Rules Engine 2.0 的节点表达,必须手动转换。
所有者未设置的规则也能转换,但会附带警告。请记住,没有所有者的规则看不到任何发现项,因此请在启用之前为其指定一个所有者。
建议的操作顺序
- 启用 Rules Engine 2.0,并让您现有的规则继续运行。
- 用
--dry-run运行转换器,并阅读报告。 - 执行转换。所有结果都会以禁用状态落地。
- 打开每一条转换后的规则,检查其图,并将模式保持为 Simulate。
- 启用转换后的规则,让它与原规则并行运行一段时间。Simulate 意味着它会更改发现项但不发送任何内容,因此可以将它的运行结果与原规则的结果进行比对。
- 在您确认满意后,禁用原规则,并将转换后的规则切换为 Live。
- 最后再复制计划,确保此时已经没有任何东西在运行旧规则。
第 5 步是尤其不该跳过的一步。两套引擎同时编辑相同的发现项,观察起来没有问题,但您希望是自己来决定发送何时开始。