程式碼風險分析器外掛程式 IBM Cloud

Code Risk Analyzer 將於 2027 年 2 月 12 日在所有地區停產。 但是,如果某一區域沒有使用 Code Risk Analyzer,則該區域的服務可能會提早停止。 進一步瞭解

IBM Cloud® 命令列介面(CLI)提供用於程式碼風險分析的指令。 您可以使用 IBM Cloud 命令列介面來分析您的程式碼是否存在漏洞,以及是否符合特定規則。 程式碼風險分析器可在所有支援工具鏈的 IBM Cloud 區域中使用。

使用 CLI 完成下列任務:

  • 產生物料清單 (BOM),列出所有第三方作業系統套件和應用程式套件的相依性和可用授權資訊。 您也可以以 CycloneDX-specific 格式產生此輸出。
  • 在 BOM 中列出的套件中發現漏洞。 您也可以檢視 CycloneDX-specific 格式的已產生報告,或使用 Node.js、Maven 或 Gradle (Groovy) 應用程式的弱點自動修復功能。
  • 分析 Kubernetes 檔案是否符合某些規則。

從 2024 年 1 月開始,Code Risk Analyzer 將使用 Clair 開源專案提供的漏洞數據,而不是商業公司 Snyk Limited 提供的數據。 您無需因這項變更而採取任何特定行動。 不過,您可能會發現 Code Risk Analyzer 所報告的 CVE 在細節上有些差異。

支援的內容

Code Risk Analyzer 支援 Java™, Node.js, Python 和 Go 語言。 下表列出並說明 Code Risk Analyzer 支援的內容。

支援的內容
内容 說明
Java 此 repo 需要使用 Maven 或 Gradle 進行自動化建置。 Maven 使用 pom.xml 檔案計算相依性,而 Gradle 則使用 build.gradle(.kts) 檔案。 Code Risk Analyzer 可以自動針對 Maven 和 Gradle (Groovy) 進行修復。
Node.js package-lock.json 檔案會計算相依性。 對於 Node.js,Code Risk analyzer 也可以自動進行修復。 確保安裝的 npm 版本與專案的 npm 版本相符。
Python 相依性是透過 requirements.txtpyproject.toml 檔案計算出來的。
Golang 支援 go modgo dep 依賴管理。 對於 go modgo.sum 檔案必須在 repo 中。 對於 go depGopkg.lock 檔案必須在 repo 中。
Dockerfile 在 repo 中具有 Dockerfile 模式的檔案會被考慮。 對於容器影像,支援 Debian, Red Hat Enterprise Linux®, Alpine 和 Ubuntu Linux 分散套件。
Kubernetes .yaml.yml 為後綴的檔案都在考慮之列。 kind 的值必須設定為 Pod, ReplicaSet, ReplicationController, Deployment, Daemonset, Statefulset, Job, CronJob, NetworkPolicy,或 Ingress
Calico .yaml.yml 為後綴的檔案都在考慮之列。 kind 的值必須設定為 NetworkPolicy, GlobalNetworkPolicy, Profile, NetworkSet, GlobalNetworkSet,或 HostEndpoint
Terraform Terraform 計劃檔必須使用 IBM Cloud 作為 Terraform 提供者來產生。

Code Risk Analyzer 會檢查您儲存庫中的原始碼和影像依賴,以找出漏洞。 下表顯示 Code Risk Analyzer 會針對不同種類的相依性諮詢弱點資訊的來源。

Code Risk Analyzer 檢查漏洞的支援依賴項目
相依關係 支援的版本 安全注意事項的來源
Alpine 圖片 所有穩定版本都有廠商安全支援。 Alpine SecDB 資料庫
Debian 圖片 所有穩定版本都有廠商安全支援。

與 Debian 原始碼套件 linux 相關聯的二進位套件上的 CVE,例如 linux-libc-dev,不會被報告。 這些二進位套件大多是內核和內核模組,不會在容器映像中執行。

Debian 安全錯誤追蹤
GoogleContainerTools 無散熱影像 所有穩定版本都有廠商安全支援。 GoogleContainerTools 無電源
Red Hat® Enterprise Linux® (RHEL) 映像 RHEL 6、RHEL/UBI 7、RHEL/UBI 8 和 RHEL/UBI 9 Red Hat 安全資料 API
Ubuntu 圖片 所有穩定版本都有廠商安全支援。 Ubuntu CVE 追蹤器
Go、npm ( JavaScript )、Maven ( Java )、PyPI ( Python )、RubyGems ( Ruby ) 和 Packagist (PHP) 所有穩定版本都有廠商安全支援。 開放原始碼漏洞資料庫

Code Risk Analyzer 已知問題

Code Risk Analyzer 無法發現不使用版本方案的應用程式套件上的漏洞,例如 major.minor.patch。 例如,不支援預發行版本或包含建立元資料的版本。

必要條件

  • 安裝 IBM Cloud CLI。 有關說明,請參閱 下載 IBM Cloud CLI

  • 執行下列指令,安裝 Code Risk Analyzer CLI 外掛程式:

ibmcloud plugin install cra
  • 請確定您可以在其中一個支援的區域存取工具鏈。 工具鏈不需要任何工具。 如需工具鏈的相關資訊,請參閱從應用程式建立工具鏈

  • 透過設定 TOOLCHAIN_ID 環境變數指定工具鏈 ID:

export TOOLCHAIN_ID=e22195a5-11e3-44ba-9533-e7c18a3a61a7
  • 執行下列指令登入 IBM Cloud 的特定區域,其中 [region] 為建立工具鏈的區域。
ibmcloud login -r [region]
  • 選擇性地,為了在使用 CLI 時加強對資料的控制和安全性,您可以選擇使用專用路由到 IBM Cloud 端點。 您必須先在帳戶中啟用虛擬路由和轉發,然後才可以啟用 IBM Cloud 私人服務端點的使用。 如需有關設定帳戶以支援專用連線選項的詳細資訊,請參閱 啟用 VRF 和服務端點

使用下列指令登入私人端點,其中 [region] 是建立工具鏈的區域。

ibmcloud login -a private.cloud.ibm.com -r [region]

CLI 使用指令

當 IBM Cloud 命令列介面及外掛程式有更新時,您將透過命令列收到通知。 請確保您的 CLI 是最新的,以便您可以使用最新的指令。 您可以執行 ibmcloud plugin list 指令,檢視所有已安裝外掛程式的目前版本。

程式碼風險分析器說明

以下指令會顯示 Code Risk Analyzer 指令清單:

ibmcloud cra --help

程式碼風險分析器指令說明

以下指令會顯示與指令搭配使用的旗標的詳細資訊。 使用 ibmcloud cra --help 顯示可用的指令。

ibmcloud cra <command> --help

物料清單 (BOM)

bom-generate 指令會存取指定目錄路徑中的工件,並執行深度發現,以辨識所有的依賴關係,包括反式依賴關係。 該指令也會識別這些相依性依據的發行授權。 建立的 BOM 可以捕捉所有相依性的快照。 您可以以標準格式或 CycloneDX's SBOM 格式產生 BOM。

ibmcloud cra bom-generate

BOM 指令需求

bom-generate 指令取決於某些外部指令:

  • 如果路徑包含 Dockerfile,此指令會為每個 Dockerfile 中的每個建立階段取得基本映像檔和建立映像檔。 在這種情況下,bom-generate 指令需要 Docker clitar 指令可用。
  • 如果路徑包含 Maven 檔案,此指令會使用 mvn 建立依賴清單。 在這種情況下,bom-generate 指令需要 mvn 指令可用。
  • 如果路徑包含 Gradle 檔案,此指令會使用 gradle 建立依賴清單。 在這種情況下,bom-generate 指令需要 gradle 指令可用。
  • 如果路徑包含 Node.js package-json 檔案,且此指令用來產生相對應的 package-lock.json 檔案,則 bom-generate 指令會使用 npm 來建立 package-lock.json 檔案。 在這種情況下,該命令需要 npm 命令可用。
  • 如果路徑包含 Python requirements.txtpyproject.toml 檔案,指令會使用 pip 來產生套件相依性。 在這種情況下,bom-generate 指令需要 pip 指令可用。 Python 版本 2 和 Python 版本 3 均支援。

如果您使用的是 Dockerfiles,請確認登入您的容器註冊表,基本映像會從該處擷取。

如果您的 Dockerfile 需要 ARGS,請在執行指令前,將個別 ARG 設定為環境變數。 例如,如果 Dockerfile 使用 IAM_USER ARG,則輸出一個名為 IAM_USER: export IAM_USER='value' 的環境變數。 CLI 會自動將這些環境變數傳給 docker build 指令。

您也可以明確指定 DOCKERBUILDFLAGS 標誌。 若要使用 ARGS Docker 標誌匯出 DOCKERBUILDFLAGS,請鍵入下列指令:

export DOCKERBUILDFLAGS="--build-arg IAM_USER --build-arg API_KEY"

BOM 指令選項

下表列出您可以使用 bom-generate 指令產生 BOM 的指令選項。

產生 BOM 的指令選項
指令選項 必要或選用 說明
--path 必要 要掃描的專案目錄路徑。
-r, --report 必要 儲存 BOM 報告的檔案名稱。
-a, --asset-type 選用 要執行的安全性檢查 (應用程式、影像、OS,全部)。 預設情況下,此選項設定為 allapps 選項用來限制發現應用程式套件。 image 選項用來限制發現 Dockerfile 中使用的基本映像。 os 選項用來限制只發現 Dockerfile 中的建立階段。 您可以使用逗號來分隔多個值,例如 -a os,image,apps
-p, --prev-report 選用 使用之前的 BOM 報告來加快指令的執行。 例如,如果 Dockerfile 在上次報告產生後沒有更新,指令會跳過從該 Dockerfile 發現套件。 同樣的情況也適用於其他清單檔案,例如 package-lock.json 檔案。
-c, --dockerbuildcontext 選用 如果指定,CRA 會在建立階段掃描時使用路徑參數中的目錄作為 Docker 建立上下文。
-o, --output 選用 選擇 BOM 報告格式。 您可以以 Standard BOM 格式 (standard) 或 CycloneDX's SBOM 格式 (cyclonedx) 產生格式輸出。預設值為 standard。 您可以同時儲存兩種格式,只要輸入每種格式,並以逗號分隔,不留空格即可。
-f, --dockerbuildflags 選用 自訂 Docker build 指令以進行建立階段掃描。 您可以在名為 DOCKERBUILDFLAGS 的環境變數中指定該值,而不是使用此命令列旗標。 預設情況下,此指令選項設定為 ''。 如果使用此選項,請確定它是提供給指令的最後一個旗標。
-d, --dockerfilepattern 選用 在 repo 中識別 Dockerfile 的模式。
-g, --gradle.excludeconfigurations 選用 排除 Gradle 配置,例如:runtimeClasspath,testCompileClasspath。 預設情況下,此指令選項設定為 ''
-l, --gradleprops 選用 自訂 Gradle 指令與 Gradle 依賴掃描的屬性。
-m, --maven.excludescopes 選用 排除 Maven 範圍,例如:test,compile. 範例:'test,compile'。 預設情況下,此指令選項設定為 ''
-n, --nodejs.createpackagelock 選用 啟用為 node.js 專案建立 package-lock.json 檔案的任務。
--region 選用 工具鏈所在的 ibmcloud 區域。
--toolchainid 選用 要使用的目標工具鏈 ID。
-v, --verbose 選用 啟用詳盡的記錄訊息。

忽略檔案

如果路徑包含 .cra/.fileignore 檔案,則不會掃描 .fileignore 檔案中指定的檔案是否有依賴關係。 .fileignore 檔案必須遵循 .gitignore 檔案的規則。 與 .gitignore 檔案相似,.fileignore 檔案可以包含註解、要忽略的目錄、要忽略的檔案以及其他 模式

以下 .fileignore 檔案範例顯示如何排除 bash 腳本、node_modules 和 Dockerfile。

# Ignore nested functional_tests directory
**/functional_tests

# Ignore bash scripts
**/*.sh

# This should allow this one file
!test/gatling_tests/loginTobx.sh

# Ignore node_modules
node_modules

# Exclude the dockerfile from scanning
Dockerfile

設定多個 Docker 建立情境

在單一專案中使用多個 Dockerfile 時,您可能想要為每個 Dockerfile 定義獨立的建立上下文。 這可以透過使用 .cra/.dockerbuildcontext 檔案來實現,這是一個 JSON 檔案,將 Dockerfile 路徑對應到其對應的建立上下文。

如果專案目錄中存在 .cra/.dockerbuildcontext 檔案,CRA Docker 建立指令會使用此檔案中的指定路徑作為相關 Dockerfile 的建立上下文。 JSON 物件中的鍵代表 Dockerfile 的相對路徑,而值則指定各自建立上下文的相對路徑。

以下是 .dockerbuildcontext 檔案的範例,它為多個 Dockerfile 定義了不同的建立上下文:

{
  "Dockerfile": "./",
  "path/to/different/Dockerfile": "./another/Path"
}

範例

以下程式碼片段顯示如何使用 bom-generate 指令:

ibmcloud cra bom-generate --path PATH --report REPORT [--asset-type ASSET-TYPE] [--dockerbuildcontext] [--dockerbuildflags DOCKERBUILDFLAGS] [--dockerfilepattern DOCKERFILEPATTERN] [--gradle.excludeconfigurations GRADLE.EXCLUDECONFIGURATIONS] [--maven.excludescopes MAVEN.EXCLUDESCOPES] [--nodejs.createpackagelock] [--prev-report PREV-REPORT] [--region REGION] [--toolchainid TOOLCHAINID] [--verbose]
ibmcloud cra bom --path . --report bomreport.json

漏洞掃描

vulnerability-scan 指令會將 standard 格式的 BOM 作為輸入,並偵測 BOM 中列出的應用程式套件和作業系統套件的漏洞。 根據從多種來源的 Common Vulnerabilities and Exposures (CVE) 收集到的豐富威脅情報,提供有針對性的修復建議。 Code Risk Analyzer 也可以僅針對 Node.js 基於應用程式的弱點套件執行自動修復。 您也可以以標準格式或 CycloneDX's Vulnerability Exploitability Exchange (VEX) 格式產生此報告。

ibmcloud cra vulnerability-scan

漏洞掃描指令選項

下表列出使用 vulnerability-scan 指令的選項。

執行弱點掃描的指令選項
指令選項 必要或選用 說明
-b, --bom 必要 使用 bom-generate 指令產生的 BOM 檔案路徑。 此 BOM 必須是 standard 格式。
-a, --autofix 選用 修復特定類型的應用程式漏洞。 此選項只適用於 Node.js、Maven 和 Gradle 應用程式。
-f, --commentfile 選用 指定建立 markdown 報告的檔案。 此指令只有在 autofix.
-c, --cveignore 選用 CVE Ignore 檔案的檔案路徑,該檔案包含要忽略的 CVE 清單。
-e, --excludedev 選用 指定您不希望命令報告開發相依性的 CVE。
--force 選用 強制更新頂層節點套件,即使主要版本不同。 此指令只有在 autofix.
--include-nofix 選用 包含或排除報告沒有已知修復的 CVE。 預設情況下,此選項設定為 appapp 選項用來只包含沒有修補的應用程式套件 CVE。 os 選項用來只包含沒有修補的作業系統套件 CVE。 all 選項用來包含沒有修復的應用程式和作業系統套件 CVE。 none 選項用來排除沒有修復的應用程式和作業系統套件 CVE。
--path --autofix 已啟用,則必須使用 要掃描的專案目錄路徑。 此指令只有在 autofix.
--region 選用 工具鏈的 ibmcloud 區域。
-r, --report 選用 產生報告的路徑。
-o, --output 選用 選擇 CVE 報告格式。 您可以以標準 CVE 格式 (standard) 或 CycloneDX's VEX 格式 (cyclonedx) 產生格式輸出。預設值為 standard
-s, --strict 選用 當發現漏洞時,會導致指令失敗 (退出狀態 2)。
--toolchainid 選用 目標工具鏈的 ID。

忽略弱點

如果指定了 -c--cveignore 參數,命令會尋找該檔案,而不會報告該檔案中指定的 CVE。 您可以設定 CVE 無限期省略,直到有補救措施為止,或直到指定的到期日為止。

以下範例顯示 .cveignore 檔案的 JSON 方案:

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

.cveignore 檔案中的每個項目都支援下列屬性:

  • cve- 要省略的弱點。 此屬性的值是 CVE ID。
  • alwaysOmit- 如果此屬性設定為 true,漏洞會被省略,直到它被變更為止。 此屬性優先於其他屬性值。
  • untilRemediationAvailable- 如果此屬性設定為 true,漏洞會被省略,直到有修復路徑為止。 如果有可用的修復方法,漏洞不會被省略,並會顯示訊息。 該屬性優先於到期屬性值。
  • expiration- 如果此屬性設定為 true 且未達到期日,則會省略該漏洞。 如果到了到期日,則不會省略漏洞,並會顯示訊息。 使用 RFC3339 時間格式 (yyyy-MM-ddTHH:mm:ss[+-]Z) 定義此屬性。

Code Risk Analyzer 只使用這些定義的屬性。 您可以新增對函數沒有影響的屬性。 如果 .cveignore 中定義的弱點未被省略,則會產生解釋原因的日誌。 如果省略 .cveignore 檔案中定義的漏洞,則不會顯示個別記錄。 報告完成後,會記錄遺漏的次數和漏洞 ID 的清單,以及遺漏的套件名稱。

以下程式碼片段顯示 .cveignore 檔案範例:

[
    {
        "cve": "CVE-2021-27290",
        "alwaysOmit": true
    },
    {
        "cve": "CVE-2020-8244",
        "untilRemediationAvailable": true,
    }
]

範例

以下程式碼片段顯示如何使用 vulnerability-scan 指令:

ibmcloud cra vulnerability-scan --bom BOM [--cveignore CVEIGNORE] [--report REPORT] [--excludedev] [--include-nofix app,os,all,none] [--region REGION] [--strict] [--toolchainid TOOLCHAINID] [--output OUTPUTFILE]
ibmcloud cra cve --bom ./bom-file.json --cveignore ./cveignore-example.json --report ./output-vulnerability-report.json --excludedev --include-nofix all --strict

部署

deployment-analyze 指令會對 Kubernetes 部署清單執行組態檢查。

ibmcloud cra deployment-analyze

此指令為 Docker 容器建立安全組態提供規範性指引。 程式碼風險分析器使用這些安全組態作為參考點,並識別安全控制,以在 .yaml 檔案等部署工件中檢查 Kubernetes 應用程式。 此指令也提供每個控制失敗的風險評估。

下表列出了您可以在 DevSecOps, 中執行的控制,這些控制來自 CIS Docker 1.13.0。 根據 Kubernetes Common Configuration Scoring System(KCCSS) 的開放原始碼參考,新增了更多控制。

安全性控制項
ID rule 風險
5.3 確保容器不具備 CAP_SYS_ADMIN 功能。
5.3 確保容器不具備 CAP_NET_RAW 功能。
5.4 確保不使用特權容器。
5.5 確保敏感的主機系統目錄不會掛載在容器上。
5.7 確保未在容器內對應特權連接埠。
5.9 確保主機的網路名稱空間未共用。
5.10 確保容器的記憶體使用量受到限制。
5.11 確保已在容器上設定適當的 CPU 優先順序。
5.12 確保容器的根檔案系統掛載為唯讀。
5.15 確保主機的程序名稱空間未共用。
5.16 確保主機的 IPC 命名空間未共用。
5.31 確保 Docker 插座未安裝在任何容器內。
確保容器不允許不安全地分配 CPU 資源。
確保容器不允許權限升級。
確保容器不會露出 /proc 的不安全部位。
確保容器不會透過共用主機連接埠暴露。

部署指令選項

下表列出 deployment-analyze 命令可以使用的命令選項。

部署分析的指令選項。
指令選項 必要或選用 說明
--path 必要 要掃描的專案目錄路徑。
-r, --report 必要 建立報告的檔案名稱。
-f, --fileignore 選用 .fileignore 檔案的檔案路徑。
-s, --strict 選用 發現部署風險時,指令失敗的結果(退出狀態 2)。

範例

以下程式碼片段顯示如何使用 deployment-analyze 指令:

ibmcloud cra deployment-analyze --path PATH --report REPORT [--fileignore FILE_IGNORE] [--strict]
ibmcloud cra depl --path ./sampleDir --report deployment-report.json --strict

NetworkPolicy 分析

此為測試版功能,僅供評估與測試之用。

netpol-analyze 指令會在 Kubernetes 和 Calico NetworkPolicy 艙單上執行組態檢查。

ibmcloud cra netpol-analyze

此指令會根據 NIST SP 800-53 SC-7(5)控制檢查 Kubernetes 應用程式的連線設定狀態。 它驗證每個工作負載的連線是否都由至少一個 NetworkPolicy 資源控制,以及非安全連接埠的入口和出口是否都被封鎖。

netpol-analyze 指令也可以提供掃描應用程式的連線性報告,顯示應用程式工作負載之間所有允許的連線。 您可以使用此報告作為符合規定的證據,或協助除錯連線問題。 您也可以使用此指令為掃描的網路政策提供 lint 結果,然後運用這些結果來改善網路政策的效率和可讀性。 在某些情況下,lint 結果也可能指出網路政策定義中的錯誤。

NetworkPolicy 分析指令選項

下表列出 netpol-analyze 命令可以使用的命令選項。

執行網路政策分析的指令選項
指令選項 必要或選用 說明
--path 必要 要掃描的專案目錄路徑。
-r, --report 必要 建立符合性報告的檔案名稱。
-c, --connectivity 選用 建立連線報告的檔案名稱。
-l, --lint 選用 建立 lint 報告的檔案名稱。
-s, --strict 選用 當發現連線風險時,會導致指令失敗 (退出狀態 2)。

範例

以下範例程式碼片段展示如何使用 netpol-analyze 指令:

ibmcloud cra netpol-analyze --path PATH --report REPORT [--connectivity CONNFILE] [--lint LINTFILE] [--strict]
ibmcloud cra np --path ./sampleDir --report netpol-report.json --strict

網路組態分析器影像

netpol-analyze 指令是 IBM ' Network Config Analyzer(NCA) 的一部分。 由於此指令是以 Docker image 執行 NCA,因此您必須在電腦上安裝 Docker 在您的電腦上。

網路政策分析器的圖像 URL 為 icr.io/continuous-delivery/cra/nca.

如果您的本機註冊表中還沒有分析器映像檔,netpol-analyze 指令會從全局 IBM Cloud® Container Registry 中取得最新的分析器映像檔 (包括任何弱點的修補程式)。

在 Tekton 管道中使用程式碼風險分析器

您可以在 task-cra 任務在 Tekton 管道中。 當您建立拉取請求、手動觸發或發出提交時,請使用 Tekton 管道定義。 您也可以建立自己的 Tekton 任務,並從這些任務執行程式碼風險分析器。

使用程式碼風險分析器 DevSecOps

您可以在 DevSecOps. 下表列出並說明 DevSecOps 支援的 Code Risk Analyzer 參數。

有關管道映像執行 bom-generate 指令所需的依附公用程式指令的詳細資訊,請參閱 BOM 要求。 如果缺少命令,您可以使用 cra-custom-script-path 參數引用腳本來安裝這些命令。

DevSecOps 基於代碼風險分析器的參數
名稱 類型 說明 必要或選用
artifactory-docker配置JSON 密鑰 base64-encoded Docker config.json 檔案,儲存 Artifactory 的憑證資訊。 選用
基礎映像-認證使用者 文字 程式碼風險分析器掃描所需的應用程式 Dockerfile 基本映像的憑證。 選用
基礎映像驗證電子郵件 文字 程式碼風險分析器掃描所需的應用程式 Dockerfile 基本映像的憑證。 選用
基礎映像驗證主機 文字 程式碼風險分析器掃描所需的應用程式 Dockerfile 基本映像的憑證。 選用
基礎映像驗證密碼 密鑰 程式碼風險分析器掃描所需的應用程式 Dockerfile 基本映像的憑證。 選用
cra-cveignore-路徑 文字 cveignore 檔案的路徑,相對於應用程式 repo 的根目錄。 預設檔案路徑為 .cra/.cveignore 選用
cra-自訂腳本路徑 文字 在 Code Risk Analyzer 掃描之前執行的自訂指令碼路徑。 這個腳本的來源是在 Code Risk Analyzer BOM 工具的上下文中提供設定 ENV 變數的選項。 選用
cra-docker-buildflags 文字 用於建立階段掃描的自訂 Docker 建立指令。 此參數預設為空。 選用
cra-docker-build-context 文字 如果指定,Code Risk Analyzer 會使用路徑參數中的目錄作為 Docker 建立上下文。 選用
cra-排除開發依賴項 文字 指定是否從掃描排除 dev 的相依性 (truefalse)。 預設值為 false 選用
cra-gradle-排除設定檔 文字 指定在掃描時要排除哪些 Gradle 配置的依賴關係。 例如,runtimeClasspath,testCompileClasspath。 此參數預設為空。 選用
cra-maven-exclude-scopes 文字 指定掃描時要排除依賴的 Maven 範圍。 例如,test,compile。 此參數預設為空。 選用
cra-nodejs-建立-套件鎖定檔 文字 啟用 Code Risk Analyzer discovery 為 node.js repos 建立 package-lock.json 檔案。 此參數預設為 false 選用
ibmcloud-api-key 密鑰 ibmcloud CLI 工具互動的 IBM Cloud® API 金鑰。 必要
管道-Docker配置JSON 密鑰 base64-encoded Docker config.json 檔案,可從私人註冊表中抽取影像。 選用
onepipeline-docker配置JSON 密鑰 已淘汰。 base64-encoded Docker config.json 檔案,可從私人註冊表中抽取影像。 選用
管道除錯 選取 管道除錯模式切換。 選用
選擇加入-CRA-自動修復 文字 啟用 Code Risk Analyzer 執行 cra auto remediation 指令 (truefalse)。 預設值為 false。 只有 Continuous Compliance Pipeline 才支援此指令。 選用
選擇加入-CRA-自動修復-已啟用-repos 文字 指定要為 cra auto remediation 指令啟用的以逗號分隔的儲存庫名稱清單。 只有當 opt-in-cra-auto-remediation 設定為 true 時,才會考慮此參數,且僅在持續符合性管道中支援。 選用
選擇加入 CRA 自動修復力量 文字 強制 cra auto remediation 指令更新套件,即使主要版本與目前易受攻擊的套件版本不同 (truefalse)。 只有當 opt-in-cra-auto-remediation 設定為 true 時,才會考慮此參數,且僅在持續符合性管道中支援。 選用

自訂指令碼範例 DevSecOps

如果您的 Dockerfile 需要 ARGS,您可以在執行指令之前,使用 cra-custom-script-path 參數將個別 ARG 設定為環境變數。 自訂指令碼路徑是使用者專案中的指令碼路徑。 例如,如果 Dockerfile 使用 IAM_USER ARG,則在指令碼內匯出一個環境變數,名稱為 IAM_USER: export IAM_USER='value'。 如果您的 Dockerfile 所需的 ARG 被設定為工具鏈內的環境屬性,您可以使用 get_env 來取得該值。 在這種情況下,您可以在 IAM_USER: export IAM_USER=$(get_env iam_user_environment_property_name) 腳本中輸出環境變數。 run-cra 任務會自動擷取這些環境變數,並傳送給 Docker 建立指令。

以下範例說明如何使用 cra-custom-script 匯出 ENV 變數:

#!/usr/bin/env bash

if [[ "${PIPELINE_DEBUG:-0}" == 1 ]]; then
    trap env EXIT
    env | sort
    set -x
fi

export IAM_USER=$(get_env iam_user_environment_property_name)

您也可以根據專案,針對 DevSecOps 基本映像工具版本可能過時的情況,使用 cra-custom-script-path 參數。 例如,您可以更新 pip/pip3 等指令,以發現需要較後期 pip 版本的 Python 套件。

以下範例說明如何使用 cra-custom-script 更新 pip 版本:

#!/usr/bin/env bash

if [[ "${PIPELINE_DEBUG:-0}" == 1 ]]; then
    trap env EXIT
    env | sort
    set -x
fi

python3 -m pip install --upgrade pip

如果您的 Dockerfile 使用來自私有 Docker 註冊中心的映像,您可以在執行 Code Risk Analyzer 之前,使用 cra-custom-script-path 參數驗證私有 Docker 註冊中心,並允許 Code Risk Analyzer 拉取此映像進行掃描。

下面的示例展示了如何使用 cra-custom-script 身份验证 ibmcloud 容器注册表:

#!/usr/bin/env bash

if [[ "${PIPELINE_DEBUG:-0}" == 1 ]]; then
    trap env EXIT
    env | sort
    set -x
fi

ibmcloud cr login

調試程式碼風險分析器中的 DevSecOps

為了協助除錯,您可以在本機上以指令列介面 (CLI) 的方式執行 Code Risk Analyzer。 有關執行 ibmcloud cra bom-generate 指令以產生 BOM 的資訊,請參閱 物料清單(BOM)。 產生 BOM 之後,使用 ibmcloud cra cve 指令列出任何弱點。 如需執行 ibmcloud cra cve 指令的詳細資訊,請參閱 漏洞掃描

確保 run-cra 任務不包含任何錯誤。 如果任務包含錯誤,請檢查您的管道是否使用目前版本的 DevSecOps。 如果檢查 DevSecOps, 的版本仍無法解決問題,以下範例提供一些常見錯誤和建議的解決方案。

FAILED
Error executing docker pull cmd: [docker pull us.icr.io/opentoolchain/ibmnode:14ubisecure]

您可以驗證是否可以存取私人註冊表。 如果您沒有存取權限,您可以使用 cra-custom-script-path 參數,並指定在 Code Risk Analyzer 之前執行的自訂腳本路徑,以驗證私有註冊表。

FAILED
Error executing docker build cmd for stage-0: exit status 1

如果您的 Dockerfile 需要 ARGS,則編譯階段的 docker build 指令會因為缺少 ARGS 而無法編譯。 cra-custom-script-path 需要將 ARGS 設定為環境變數。 有關設定自訂指令碼的詳細資訊,請參閱 DevSecOps 的自訂指令碼範例

FAILED
Error executing docker build cmd for stage-0: exit status 1
...
COPY file-to-copy.js file-to-copy.js:
------
failed to compute cache key: "/file-to-copy.js" not found: not found

預設情況下,Code Risk Analyzer bom-generate 指令會從 Dockerfile 本身位置的上下文建立 Dockerfile。 如果您想要從專案根目錄的上下文建立 Dockerfile,請使用 cra-docker-build-context 參數允許 Code Risk Analyzer 從這個上下文建立 Dockerfile。

移除儲存的 Code Risk Analyzer 資料

Code Risk Analyzer 外掛程式不會在其資料庫中儲存任何用戶端資料。 然而,早期版本的 Code Risk Analyzer Tekton 任務會將漏洞掃描的結果安全地儲存在資料庫中。

若要要求移除可能儲存在 Code Risk Analyzer 中的任何客戶資料,請聯絡 IBM Support

常見問題

取得有關使用 Code Risk Analyzer CLI 常見問題的答案。

如何確定 CLI 失敗的原因?

在您呼叫 Code Risk Analyzer CLI 之前,請將 IBMCLOUD_TRACE 環境變數設定為 true,以開啟除錯記錄。

export IBMCLOUD_TRACE=true

觀察 API 呼叫和日誌中顯示的回應,以判斷失敗的確切原因。

如何調試 BOM 指令無法從私有註冊表取得基本映像。

使用 ibmcloud cr login 指令或 docker login 指令,確定您已通過基本映像所在註冊表的驗證。

如何除錯分析 Docker 檔案失敗的 BOM 指令?

  • 執行 docker build 指令並確認通過,以驗證 Dockerfile 沒有任何問題。
  • 如果您的 Dockerfile 需要傳入 ARG,請確定 ARG 已設定為環境變數。 您也可以使用 DOCKERBUILDFLAG 環境變數。
  • 使用包含基本影像的註冊表進行驗證。

我看到了意想不到的假陽性結果。 我應該怎麼辦?

執行 DevSecOps 持續部署 (CD) 管道,在證據櫃中製作更新的 SBOM。 這可能會解決因 DevSecOps Continuous Compliance (CC) pipeline 所產生的舊版 SBOM 而導致誤判的潛在原因。

為何報告或問題的嚴重性與相關弱點連結的嚴重性不同?

由於我們的弱點資訊來源最近有所變更,您可能會發現與特定弱點相關的嚴重性已經改變。 Code Risk Analyzer 會根據所有弱點來源的計算結果,決定最佳的嚴重性。