IBM Cloud Docs
配置 IBM Cloud Code Risk Analyzer 扫描

配置 IBM Cloud Code Risk Analyzer 扫描

您可以使用 IBM Cloud Code Risk Analyzer 来分析代码中的漏洞,并根据指定的规则验证合规性。

当 Code Risk Analyzer 评估应用程序时:

  • 将生成软件材料清单 (SBOM),其中列出所有第三方软件包的依赖关系和可用许可证信息。 如果需要,可以使用 cycloneDX-specific 格式生成此值。

  • 将扫描 SBOM 文件中列出的包以查找漏洞。 此文件可以 cycloneDX-specific 格式生成。 或者,您可以对使用 Node.js,Maven 或 Gradle编写的应用程序发现的漏洞启用自动补救。

  • 将对所有 Kubernetes 文件进行合规性分析。

  • 将对所有 Terraform 计划进行合规性分析。

在支持工具链的所有 IBM Cloud 区域中都提供了 Code Risk Analyzer。 有关更多信息,请参阅 插件文档

配置扫描

要生成 SBOM 文件,Code Risk Analyzer 扫描将访问指定目录路径中的工件,并执行深度发现以识别所有依赖关系 (包括跟踪依赖关系)。 没有生成 SBOM 文件和发现漏洞所需的特定管道环境变量,但如果路径包含 Dockerfile,那么会拉取基本映像,并为文件中指定的每个构建阶段构建映像。

如果 Dockerfile 需要 ARGS,请将单个 ARG 设置为定制脚本中的环境变量,并提供定制脚本的位置作为管道可 vairable。

表 1. Docker 脚本环境变量
环境变量 描述 必需或可选 用途
cra-custom-script-path 存储库中脚本的路径。 可选 设置 Docker 脚本所需的环境变量。

有关更多信息,请参阅 定制脚本

缺省情况下,不会分析 Terraform 文件。 要扫描 Terraform 文件,必须设置以下管道环境变量。

表 2. Terraform 分析环境变量
环境变量 描述 必需或可选 用途
opt-in-tfsec True 或 False。 缺省情况下设置为 false。 可选 扫描 Terraform 文件以获取安全性。
opt-in-cra-tf-validate True 或 False。 缺省情况下设置为 false。 可选 验证 Terraform 文件。

Code Risk Analyzer 扫描使用提供的 API 密钥登录到 IBMCloud CLI 并触发 Docker 构建。 现有 IBM Cloud CLI 会话将继续用于此 CRA 步骤的其余部分。 但是,对于标准 API 密钥登录,IBM Cloud CLI 会话将在 20 分钟后到期。 如果构建过程耗时超过 20 分钟,那么由于会话已到期,CRA 步骤将失败并显示 401 错误消息。 引入了环境变量 ibmcloud-enable-session-keep-alive,以便使 IBMCloud CLI 会话在如此长时间的操作中保持活动状态。

表 3. 用于长时间运行的作业的 IBMCloud Live Session
环境变量 描述 Type 必需或可选 用途
ibmcloud-enable-session-keep-alive 0 或 1。 缺省情况下设置为 0。 select 可选 在 Code Risk Analyzer 扫描中,使长时间运行的作业的 IBMCloud CLI 会话保持活动状态。

缺省情况下,Code Risk Analyzer deployment-analyze 命令在 Kubernetes 部署清单上运行 配置检查。 Code Risk Analyzer deployment-analyze 命令使用 --strict 选项集运行。 要在 Code Risk Analyzer 部署-分析扫描期间忽略文件,必须使用以下环境变量。

表 4. IBMCloud CRA CIS 扫描环境变量
环境变量 描述 必需或可选 用途
cra-cis-fileignore-path 存储库中 .fileignore 文件的路径。 可选 指定 .fileignore 文件的路径,该文件包含代码风险分析器部署分析扫描期间要忽略的文件的信息。

省略漏洞以部署应用程序

“代码风险分析器”旨在先找到易受攻击的包,然后再找到脂板。 在特殊情况下,您可能需要部署应用程序,即使检测到易受攻击的软件包并且尚未修复。 在可能的情况下,您应该在重新部署代码之前更新软件包或将其除去。

要忽略特定文件并完成推送到生产环境,可以使用以下模式在扫描的存储库根目录中创建名为 .cra/.cveignore 的文件:

[
  {
    "cve": "string",
    "alwaysOmit": "bool",
    "untilRemediationAvailable": "bool",
    "expiration": "string"
  },
]

以下代码片段显示了样本 .cveignore 文件:

[
  {
    "cve": "CVE-2021-27290",
    "alwaysOmit": true
  },
  {
    "cve": "CVE-2020-8244",
    "untilRemediationAvailable": true,
  },
  {
    "cve": "CLAIR-JAVA-ORGAPACHEHTTPCOMPONENTS-31517",
    "expiration": "2022-02-10T22:08:41+04:00",
    "comment": "Additional security measures are in place"
  }
]

此文件以前称为 .craveomit。 原始文件格式已 不推荐 并由 .cra/.cveignore 替换。 请更新代码以使用最新文件。

您可以了解有关 Code Risk Analyzer 插件的文档 的更多信息,也可以检查 不推荐使用的 CRA 文档

自动修复漏洞

您可以使用 Code Risk Analyzer 作为持续合规性 (CC) 管道的一部分,不仅可以查找漏洞,还可以自动修复漏洞。 代码风险分析器作为管道的 compliance-check 步骤的一部分工作。 缺省情况下,将关闭自动补救。

自动补救仅可用于 CC 管道。

开启自动补救后,Code Risk Analyzer 会尝试通过针对存储库的缺省分支创建具有所标识修订的拉取请求,将易受攻击的包更新为不可 vunlnerable 版本。 缺省情况下,Code Risk Analyzer 将更新主易受攻击软件包以及从属软件包的次要版本和补丁版本,但不会更新软件包的主要版本。 如果可接受拉取请求,那么可以手动核准并合并该请求。 每次运行管道时,都会生成新的拉取请求,因此请确保在打开这些请求时进行复审和合并,以避免重复。

自动修复可用于 Enterprise GitHub 和 GitLab 存储库,并且可以修改下表中指定的文件。

表 1. 受支持的生态系统
生态系统 可修改文件
Nodejs package.jsonpackage-lock.json
Gradle build.gradlegradle.lockfilebuildscript-gradle.lockfile
Maven pom.xml

要开始自动修复漏洞,请为管道设置以下可选环境变量。

表 2. 受支持的生态系统
变量 描述 缺省设置
opt-in-cra-auto-remediation 为管道启用自动补救。 false
要开始补救,请将此变量设置为 true
opt-in-cra-auto-remediation-force 在打开的拉取请求中强制主软件包更新。 false
要强制主软件包更新,请将此变量设置为 true
opt-in-cra-auto-remediation-enabled-repos 指定要在其中启用自动补救的特定存储库。 针对调用 list_repos 时返回的所有存储库启用。 要指定特定存储库,请提供以逗号分隔的存储库名称列表。