{{< details >}}

  • Tier: 旗舰版
  • Offering: JihuLab.com, 私有化部署

{{< /details >}}

使用应用程序安全功能时,您可能会遇到以下问题。

日志级别

极狐GitLab分析器输出日志的详细程度由 SECURE_LOG_LEVEL 环境变量决定。此日志级别或更高级别的消息会被输出。

从最高到最低严重性,日志级别为:

  • fatal
  • error
  • warn
  • info (默认)
  • debug

调试级别日志记录

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

调试日志记录可能会带来严重的安全风险。输出可能包含环境变量和其他密钥的内容,这些内容对作业可用。输出被上传到极狐GitLab服务器,并在作业日志中可见。

{{< /alert >}}

要启用调试级别日志记录,请在您的 .gitlab-ci.yml 文件中添加以下内容:

variables:
  SECURE_LOG_LEVEL: "debug"

这表示所有极狐GitLab分析器都将输出所有消息。有关详细信息,请参阅 日志级别

安全作业失败并退出代码为 1

如果安全作业失败且原因不明确:

  1. 启用 调试级别日志记录
  2. 运行作业。
  3. 检查作业的输出。
  4. 删除 debug 日志级别以恢复到默认的 info 值。

过时的安全报告

当合并请求生成的安全报告过时时,合并请求会在安全小部件中显示警告消息,并提示您采取适当的行动。

这种情况可能发生在两种场景中:

源分支落后于目标分支

当目标分支和源分支之间的最新公共祖先提交不是目标分支上的最新提交时,安全报告可能会过时。

要解决此问题,请重新基或合并以合并目标分支中的更改。

合并目标分支更改

目标分支的安全报告已过时

这可能由于多种原因导致,包括作业失败或新建议。当合并请求显示安全报告已过时时,您必须在目标分支上运行新的流水线。选择新流水线以运行新的流水线。

运行新的流水线

收到警告消息 … report.json: no matching files

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

调试日志记录可能会带来严重的安全风险。输出可能包含环境变量和其他密钥的内容,这些内容对作业可用。输出被上传到极狐GitLab服务器,并在作业日志中可见。

{{< /alert >}}

此消息通常紧随 错误 No files to upload,并在其他错误或警告之前,这些错误或警告指示为何未生成 JSON 报告。检查整个作业日志以查找这些消息。如果您未找到这些消息,请在设置 SECURE_LOG_LEVEL: "debug" 后重试失败的作业,作为 自定义 CI/CD 变量。这提供了额外的信息以进一步调查。

收到错误消息 sast job: config key may not be used with 'rules': only/except

包含 .gitlab-ci.yml 模板时,如 SAST.gitlab-ci.yml,根据您的极狐GitLab CI/CD 配置可能会发生以下错误:

无法创建流水线

    jobs:sast 配置键不能与 `rules`: only/except 一起使用

当包含的作业的 rules 配置被 重写过时的 onlyexcept 语法时,会出现此错误。要解决此问题,您必须:

有关更多信息,请参阅 重写 SAST 作业

将您的 only/except 语法转换为 rules

当重写模板以控制作业执行时,之前的 onlyexcept 实例不再兼容,必须转换为 rules 语法

如果您的重写旨在限制作业仅在 main 上运行,之前的语法看起来类似于:

include:
  - template: Jobs/SAST.gitlab-ci.yml

# 确保扫描仅在 main 或合并请求上执行
spotbugs-sast:
  only:
    refs:
      - main
      - merge_requests

要将上述配置转换为新的 rules 语法,重写如下:

include:
  - template: Jobs/SAST.gitlab-ci.yml

# 确保扫描仅在 main 或合并请求上执行
spotbugs-sast:
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
    - if: $CI_MERGE_REQUEST_ID

如果您的重写旨在限制作业仅在分支上运行,而不在标签上运行,它看起来类似于:

include:
  - template: Jobs/SAST.gitlab-ci.yml

# 确保扫描不在标签上执行
spotbugs-sast:
  except:
    - tags

要转换为新的 rules 语法,重写如下:

include:
  - template: Jobs/SAST.gitlab-ci.yml

# 确保扫描不在标签上执行
spotbugs-sast:
  rules:
    - if: $CI_COMMIT_TAG == null

有关更多信息,请参阅 rules

将您的模板固定为过时版本

为了确保最新支持,我们强烈建议您迁移到 rules

如果您无法立即更新 CI 配置,有几个解决方法涉及固定到以前的模板版本,例如:

  include:
    remote: 'https://gitlab.com/gitlab-org/gitlab/-/raw/12-10-stable-ee/lib/gitlab/ci/templates/Security/SAST.gitlab-ci.yml'

此外,我们提供了一个专用项目,包含版本化的遗留模板。此项目可用于离线设置或任何希望使用 自动 DevOps

说明在 遗留模板项目中可用。

发现漏洞,但作业成功。如何让流水线失败?

在这些情况下,作业成功是默认行为。作业状态指示分析器本身的成功或失败。分析器结果显示在 作业日志合并请求小部件安全仪表板

错误:作业 仅用于配置,其脚本不应执行

极狐GitLab 13.4 中的更改了对 Security/Dependency-Scanning.gitlab-ci.ymlSecurity/SAST.gitlab-ci.yml 模板意味着,如果您通过设置 rules 属性启用 sastdependency_scanning 作业,它们会失败并出现错误 (作业) 仅用于配置,其脚本不应执行

sastdependency_scanning 语句可用于对所有 SAST 或依赖扫描进行更改,例如更改 variablesstage,但不能用于定义共享的 rules

空的漏洞报告,依赖列表页面

如果流水线有手动步骤,其中包含 allow_failure: false 选项的作业,并且该作业未完成,极狐GitLab无法使用安全报告中的数据填充列出的页面。在这种情况下,漏洞报告依赖列表页面为空。这些安全页面可以通过运行流水线的手动步骤中的作业来填充。