隨著 Code Risk Analyzer (CRA) 即將 停用Syft 和 Grype 掃描工具可作為替代方案,並提供 CRA 的大部分功能。 請參閱「停用 Code Risk Analyzer 掃描」以停用 CRA 功能。

配置 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 方案的相符性。

Code Risk Analyzer 適用於所有支援工具鏈的 IBM Cloud 區域。 如需相關資訊,請參閱 外掛程式說明文件

配置掃描

為了產生 SBOM 檔,Code Risk Analyzer 掃描會存取指定目錄路徑中的構件,並執行深度探索以識別所有相依關係; 包括機密相依關係。 沒有產生 SBOM 檔及探索漏洞所需的特定管線環境變數,但如果路徑包含 Dockerfile,則會取回基本映像檔,並針對檔案中指定的每一個建置階段建置映像檔。

如果您的 Dockerfile 需要 ARGS,請在自訂 Script 中設定個別 ARG 作為環境變數,並提供自訂 Script 的位置作為管線變數。

Docker 腳本環境變數
環境變數 說明 必要或選用 目的
cra-custom-script-path 儲存庫中指令碼的路徑。 可选 设置 Docker 脚本需要的环境变量。

如需相關資訊,請參閱 自訂 Script

依預設,不會分析 Terraform 檔案。 若要掃描 Terraform 檔案,您必須設定下列管線環境變數。

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 階段作業在如此長時間的作業中保持作用中。

用於長時間運作作業的 IBMCloud Live Session
環境變數 說明 類型 必要或選用 目的
ibmcloud-enable-session-keep-alive 0 或 1。 預設值為 0。 選取 選用 在 Code Risk Analyzer 掃描中,讓長時間執行工作的 IBMCloud CLI 階段作業保持作用中。

依預設,Code Risk Analyzer 部署分析指令會在 Kubernetes 部署資訊清單上執行 配置檢查。 Code Risk Analyzer 部署-analyze 指令會在設定 --strict 選項的情況下執行。 若要在 Code Risk Analyzer 部署分析掃描期間忽略檔案,必須使用下列環境變數。

IBMCloud CRA CIS掃描環境變數
環境變數 說明 必要或選用 目的
cra-cis-fileignore-path 儲存庫中 .fileignore 檔案的路徑。 選用 指定 .fileignore 檔案的路徑,該檔案包含在 Code Risk Analyzer 部署分析掃描期間要忽略的檔案資訊。

省略漏洞以部署應用程式

程式碼風險分析器 (Code Risk Analyzer) 的設計目的,是要在諮詢委員會之前找到易受攻擊的套件。 在異常情況下,即使偵測到有漏洞的套件且尚未修正,您也可能需要部署應用程式。 可能的話,您應該先更新套件或移除它們,然後再重新部署程式碼。

若要忽略特定檔案並完成推送至正式作業,您可以使用下列綱目,在已掃描儲存庫的根目錄中建立稱為 .cra/.cveignore 的檔案:

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

下列程式碼 Snippet 顯示 .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 作為 Continuous Compliance (CC) 管線的一部分,以不僅尋找並自動補救漏洞。 Code Risk Analyzer 在管線的 compliance-check 步驟中運作。 依預設,會關閉自動補救。

自動補救僅適用於 CC 管線。

開啟自動補救時,Code Risk Analyzer 會針對儲存庫的預設分支建立具有已識別修正程式的取回要求,以嘗試將有漏洞的套件更新至非 vunlnerable 版本。 依預設,Code Risk Analyzer 會更新主要有漏洞套件及相依套件的次要及修補程式版本,但不會更新套件的主要版本。 如果可接受取回要求,您可以手動核准並合併它。 每次執行管線時,都會產生新的取回要求,因此請務必在開啟它們時檢閱並合併,以避免重複。

自動補救可用於 Enterprise GitHub 和 GitLab 儲存庫,並且可以修改下表中指定的檔案。

支持的生態系統
生態系統 可修改的檔案
Nodejs package.jsonpackage-lock.json
Gradle build.gradlegradle.lockfilebuildscript-gradle.lockfile
Maven pom.xml

若要開始自動補救漏洞,請為管線設定下列選用環境變數。

支持的生態系統
變數 說明 預設設定
opt-in-cra-auto-remediation 啟用管線的自動補救。 false
若要開始補救,請將此變數設為 true
opt-in-cra-auto-remediation-force 在開啟的取回要求中強制進行主要套件更新。 false
若要強制主要套件更新,請將此變數設為 true
opt-in-cra-auto-remediation-enabled-repos 指定您要啟用自動補救的特定儲存庫。 針對呼叫 list_repos 時所傳回的所有儲存庫啟用。 若要指定特定的儲存庫,請提供以逗點區隔的儲存庫名稱清單。

選擇不參與「程式碼風險分析器」的掃描

請設定以下環境變數,以停用 Code Risk Analyzer 的掃描功能。

變數 類型 必要或選用 選擇退出值 預設值 替代方案
cra-bom-generate 列舉 選用 0 1 Syft
cra-vulnerability-scan 列舉 選用 0 1 Grype
cra-deploy-analysis 列舉 選用 0 1 契訶夫
opt-in-cra-tf-validate 列舉 選用 0 1 契訶夫

預設情況下,漏洞掃描與部署分析掃描均被設定為分支保護的必選檢查項目。 若您想停用上述任一項掃描功能,請務必 自訂合規性檢查設定分支保護規則