推广安全扫描

您可以将安全扫描推广到单个项目、子群组和群组。您应该从单个项目开始,然后逐步扩大范围。逐步推广允许您在每个阶段评估结果并根据需要进行调整。

要启用单个项目的安全扫描:

  • 启用单个安全扫描器。
  • 通过使用 AutoDevOps 启用所有安全扫描器。

要启用多个项目、子群组或群组的安全扫描:

  • 使用扫描执行策略强制实施所有或部分安全扫描器。

启用单个安全扫描器

要启用具有自定义设置选项的单个安全扫描工具,请将极狐GitLab CI/CD 模板 添加到您的 .gitlab-ci.yml 文件中。

有关如何启用单个安全扫描器的说明,请参阅其文档。

通过使用 Auto DevOps 启用安全扫描

要启用以下默认设置的安全扫描工具,请启用 Auto DevOps

虽然您不能直接自定义 Auto DevOps,但您可以在项目的 .gitlab-ci.yml 文件中包含 Auto DevOps 模板

自定义安全扫描器

每个安全扫描器的行为可以通过使用预定义的 CI/CD 变量和每个扫描器自己的 CI/CD 变量进行自定义。有关 CI/CD 变量的详细信息,请参阅每个扫描器的文档。

{{< alert type=”warning” >}}

所有安全扫描工具的自定义应在合并请求中进行测试,然后再将这些更改合并到默认分支。未能这样做可能会导致意外结果,包括大量误报。

{{< /alert >}}

模板版本

大多数极狐GitLab 应用程序安全工具有两个模板版本:

  • 稳定版: 稳定模板是默认的。它提供可靠和一致的应用程序安全体验。您应该为大多数需要稳定性和可预测行为的用户和项目使用稳定模板。
  • 最新版本: 最新模板适用于那些希望访问和测试尖端功能的人。它通过模板名称中的“latest”来识别。它不被视为稳定,并可能包括计划在下一个重大版本中发布的重大更改。此模板允许您在新功能和更新成为稳定版本的一部分之前进行尝试。

{{< alert type=”note” >}}

混合不同的安全模板版本可能会导致合并请求和分支流水线同时运行。您应该在项目中使用稳定版或最新版本模板中的一个。

{{< /alert >}}

覆盖默认注册表基本地址

默认情况下,极狐GitLab 安全扫描器使用 registry.gitlab.com/security-products 作为 Docker 镜像的基本地址。您可以通过设置 CI/CD 变量 SECURE_ANALYZERS_PREFIX 将其覆盖到其他位置。这会同时影响所有扫描器。

容器扫描分析器是一个例外,它不使用 SECURE_ANALYZERS_PREFIX 变量。要覆盖其 Docker 镜像,请参阅在离线环境中运行容器扫描的说明。

使用合并请求流水线的安全扫描工具

默认情况下,应用程序安全作业配置为仅针对分支流水线运行。要在合并请求流水线中使用它们,您必须引用它们的最新版本模板

例如,要同时运行 SAST 和依赖扫描,使用以下模板:

include:
  - template: Jobs/Dependency-Scanning.latest.gitlab-ci.yml
  - template: Jobs/SAST.latest.gitlab-ci.yml

使用自定义扫描阶段

通过启用单个安全扫描器启用安全扫描时,扫描作业默认使用预定义的 test 阶段。如果您在 .gitlab-ci.yml 文件中指定了自定义阶段而没有包含 test 阶段,则会发生错误。

例如,以下尝试使用 unit-tests 阶段:

include:
  - template: Jobs/Dependency-Scanning.gitlab-ci.yml
  - template: Jobs/SAST.gitlab-ci.yml
  - template: Jobs/Secret-Detection.gitlab-ci.yml

stages:
  - unit-tests

custom job:
  stage: unit-tests
  script:
    - echo "custom job"

上述 .gitlab-ci.yml 导致了一个语法错误:

Unable to create pipeline
- dependency_scanning job: chosen stage test does not exist; available stages are .pre
- unit-tests
- .post

此错误出现是因为安全扫描作业使用的 test 阶段没有在 .gitlab-ci.yml 文件中声明。要解决此问题,您可以:

  • 在您的 .gitlab-ci.yml 中添加一个 test 阶段:

    include:
      - template: Jobs/Dependency-Scanning.gitlab-ci.yml
      - template: Jobs/SAST.gitlab-ci.yml
      - template: Jobs/Secret-Detection.gitlab-ci.yml
    
    stages:
      - test
      - unit-tests
    
    custom job:
      stage: unit-tests
      script:
        - echo "custom job"
    
  • 覆盖每个安全作业的默认阶段。例如,要使用预定义的阶段 unit-tests

    include:
      - template: Jobs/Dependency-Scanning.gitlab-ci.yml
      - template: Jobs/SAST.gitlab-ci.yml
      - template: Jobs/Secret-Detection.gitlab-ci.yml
    
    stages:
      - unit-tests
    
    dependency_scanning:
      stage: unit-tests
    
    sast:
      stage: unit-tests
    
    .secret-analyzer:
      stage: unit-tests
    
    custom job:
      stage: unit-tests
      script:
        - echo "custom job"
    

有关覆盖安全作业的更多信息,请参阅:

所有安全扫描工具都定义了它们的阶段,因此这种错误可能发生在所有工具上。