Help us learn about your current experience with the documentation. Take the survey.

许可证审批策略

  • Tier: Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

使用许可证审批策略来指定标准,以确定在合并请求能够合并之前何时需要批准。

许可证审批策略仅适用于受保护的目标分支。

以下视频概述了这些策略。

创建新许可证审批策略的前提条件

许可证审批策略依赖依赖扫描作业的输出来验证要求是否已满足。如果依赖扫描未正确配置,因此没有与打开的合并请求相关的依赖扫描作业运行,则该策略没有可用于验证要求的数据。当安全策略缺少评估数据时,默认情况下它们会失败关闭,并假设合并请求可能包含漏洞。您可以使用 fallback_behavior 属性选择退出默认行为,并将策略设置为失败打开。失败打开的策略会解除所有无效和不可执行规则的阻止。

为确保您的策略得到执行,您应该在目标开发项目中启用依赖扫描。您可以通过几种不同的方式实现这一点:

许可证审批策略需要来自GitLab 支持的包的许可证信息。

创建新的许可证审批策略

创建许可证审批策略以强制许可证合规性。

要创建许可证审批策略:

  1. 链接安全策略项目到您的开发组、子组或项目(需要所有者角色)。
  2. 在左侧边栏,选择搜索或转到并找到您的项目。
  3. 选择安全 > 策略
  4. 创建新的合并请求审批策略
  5. 在您的策略规则中,选择许可证扫描

定义哪些许可证需要批准的标准

可以使用以下类型的标准来确定哪些许可证是"批准"或"拒绝"的,并且需要批准。

  • 当检测到明确禁止的许可证列表中的任何许可证时。
  • 当检测到任何许可证时,除了已被明确列为可接受的许可证。

将合并请求分支中检测到的许可证与默认分支中的许可证进行比较的标准

可以使用以下类型的标准来确定是否需要批准,基于默认分支中存在的许可证:

  • 可以配置拒绝的许可证,仅当拒绝的许可证是默认分支中尚不存在的依赖项的一部分时才需要批准。
  • 可以配置拒绝的许可证,如果拒绝的许可证存在于默认分支中已存在的任何组件中,则需要批准。

License approval policy

如果发现违反许可证审批策略的许可证,它会阻止合并请求并指示开发人员将其移除。请注意,除非许可证审批策略的合格批准者批准合并请求,否则在移除 denied 许可证之前无法合并合并请求。

Merge request with denied licenses

故障排除

许可证合规性小组件卡在加载状态

在以下情况下显示加载动画:

  • 当流水线正在进行时。
  • 如果流水线已完成,但仍在后台解析结果。
  • 如果许可证扫描作业已完成,但流水线仍在运行。

许可证合规性小组件每隔几秒轮询一次更新的结果。当流水线完成时,流水线完成后的第一次轮询会触发结果的解析。这可能需要几秒钟,具体取决于生成报告的大小。

最终状态是当成功的流水线运行已完成、已解析,并且小组件中显示了许可证。

许可证审批策略因 unknown 许可证阻止合并请求

在某些情况下,许可证审批策略可能会因 unknown 许可证而阻止合并请求。这可能在以下任何情况下发生:

  • 依赖扫描作业无法识别特定组件的许可证。
  • 使用了扫描工具无法识别的新或不常见的许可证。
  • 组件的元数据中缺少或不完整的许可证信息。

要解决此问题:

  1. 查看流水线页面上的许可证选项卡,以识别哪些组件具有 unknown 许可证,或查看由 GitLab 安全机器人生成的 out-of-policy 许可证。
  2. 手动调查这些组件以确定其实际许可证。
  3. 如果无法确定许可证或不可接受,请考虑移除或替换受影响的组件。

如果您需要临时允许与 unknown 许可证合并:

  1. 编辑您的许可证审批策略。
  2. unknown 添加到允许的许可证列表中。
  3. 解决问题后,记得从允许的许可证列表中移除 unknown,以保持适当的许可证合规性。

我们正在计划增强功能,以允许在史诗 10203中仅对特定包排除许可证。

处理许可证合规性问题时,特别是处理 unknown 许可证时,务必咨询您的法律团队。