收集證明 Script

此腳本 collect-evidence 協助採用者、使用者及貢獻者將其合規性資料傳送至 DevSecOps 變更管理資料流

該 Script 執行下列作業:

  • 嘗試處理任何附件作為結果,並從那些結果建立事件問題。 支援有限數目的工具輸出格式。
  • 如果發現問題,Script 會評估其寬限期 (到期日) 及豁免狀態。
  • 在證明櫃中建立證明資產。
  • 建立 證明 本身,並附加問題及提供的附件。

對於 successfailure 狀態,如果未在 collect-evidence 內傳遞任何附件,則會將該特定作業及階段的管線日誌擷取為附件。

collect-evidence Script 由管線提供。 不需要安裝它。 此腳本具有以下依賴項:

  • bash
  • libstdc++ 共用程式庫
  • libgcc 共用程式庫

請確定相依關係已安裝在使用此工具來報告證明的基本映像檔中。

CLI 指令架構

collect-evidence 功能可透過兩個介面使用:

  1. Shell Script Wrapper (collect-evidence):提供向後相容性的傳統 bash 腳本介面
  2. Direct CLI Command (cocoa locker evidence collect):具有完整功能存取的原生 CLI 介面

版本切換

collect-evidence shell 腳本支援兩個實作版本,可以使用 collect-evidence-version 環境屬性來切換:

版本 實作 狀態 說明
v1 舊式 可用 基於 bash 的原始實作,完全向後相容
v2 以 CLI 為基礎 預設值 包覆 cocoa locker evidence collect CLI 指令的現代實作

用法

Script collect-evidence 需要下列參數:

  • --tool-type 提供證明資料之工具的 ID。 例如: 「奧瓦斯普-扎普-伊」,「卡」
  • --evidence-type 該證據類型的識別碼。 例如: com.ibm.image_vulnerability_scan, com.ibm.unit_tests
  • --asset-key pipelinectl 資產中的索引鍵。 針對下列指令 load_artifact <key>load_repo <key>
  • --asset-type pipelinectl 中的資產類型,可以是下列其中一種類型: repo, artifact
  • --status 證據的狀態可為以下其中一種: success, pending, failure
  • --assets 指定多個 asset-key 和 asset-type 配對。 例如,您可以使用 --assets asset-key1:asset-type1 --assets asset-key2:asset-type2。 如果您使用此選項,請不要個別指定 asset-key 及 asset-type。

以下參數為可選項:

  • --attachment 要作為結果處理並附加至證明的檔案。 可以多次指定多個檔案的參數。 對於影像簽名,請確保使用--attachment參數附加簽名檔。 簽名文件必須包含簽名詳細信息,例如金鑰 ID、演算法和簽章摘要。 常見格式包括 JSON 或 TXT。
  • --meta 要新增至證明的任意 meta 資料。 參數接受 'key = value' 配對,且可以指定多次。 您可以包含與映像簽署流程相關的元數據,例如簽署環境或簽署期間使用的任何特定配置。
  • --additional-comment 在管線失敗時新增至問題的註解。

請使用下列指令來取得說明:

collect-evidence --help

回覆值

collect-evidence 會在 STDOUT ( successfailurepending 其中之一) 上輸出已評估證明狀態字串。 此評估值取決於已處理的結果附件、找到的發生事件問題,以及這些問題的可能補救,例如具有到期日集或豁免標籤。 如需相關資訊,請參閱 發生事件問題

# example on how to read the output into a variable in bash
read -r status < <(collect-evidence "${evidence_params[@]}")
echo $status # success

切換至 v2 (以 CLI 為基礎的實作)

若要使用新的基於 CLI 的實作,請在您的管道中設定環境屬性:

collect-evidence-version=v2

直接使用 CLI 指令

cocoa locker evidence collect \
  --tool-type "sonarqube" \
  --evidence-type "com.ibm.static_scan" \
  --assets "app-repo:repo" \
  --status "success" \
  --attachment ./sonarqube-result.json \
  --pipeline-run-id "${PIPELINE_RUN_ID}" \
  --pipeline-namespace "ci" \
  --incident-org "my-org" \
  --incident-repo "compliance-issues"
cocoa locker evidence collect \
  --tool-type "detect-secrets" \
  --evidence-type "com.ibm.detect_secrets" \
  --assets "app-repo:repo" \
  --status "success" \
  --pipeline-run-id "${PIPELINE_RUN_ID}" \
  --pipeline-namespace "ci" \
  --incident-org "my-org" \
  --incident-repo "compliance-issues"
cocoa locker evidence collect \
  --tool-type "va" \
  --evidence-type "com.ibm.cloud.image_vulnerability_scan" \
  --assets "image-0:artifact" \
  --status "success" \
  --pipeline-run-id "${PIPELINE_RUN_ID}" \
  --attachment image-0_va-report.json \
  --pipeline-namespace "ci" \
  --incident-org "my-org" \
  --incident-repo "compliance-issues"

如需完整的 CLI 指令參考及所有可用參數,請參閱 cocoa locker evidence collect

範例用法

collect-evidence \
  --tool-type "sonarqube" \
  --evidence-type "com.ibm.static_scan" \
  --asset-type "repo" \
  --asset-key "app-repo" \
  --status "success" \
  --attachment ./sonarqube-result-1.json \
  --attachment ./sonarqube-result-2.json \
  --meta environment=staging
collect-evidence \
  --tool-type "ciso-code-signing" \
  --evidence-type "com.ibm.cloud.image_signing" \
  --asset-type "artifact" \
  --asset-key "signed-image" \
  --status "success" \
  --attachment ./signature.json \   # The signature details in JSON format
  --attachment "./${artifact}.fingerprint" \ #  The fingerprint is a hash value generated from the artifact, ensuring integrity and authenticity.
  --meta environment=production

您可以直接使用 cocoa locker evidence collect 指令:

cocoa locker evidence collect \
  --tool-type "sonarqube" \
  --evidence-type "com.ibm.static_scan" \
  --assets "app-repo:repo" \
  --status "success" \
  --attachment ./sonarqube-result.json \
  --pipeline-run-id "${PIPELINE_RUN_ID}" \
  --pipeline-namespace "ci" \
  --incident-org "my-org" \
  --incident-repo "compliance-issues"

支援的工具格式

現行實作目前支援下列工具 (以 --tool-type 參數提供):

工具名稱 說明
cra IBM 程式碼風險分析器
cra-cis IBM 程式碼風險分析器 CIS
va Vulnerability Advisor 因為 IBM Cloud Container Registry
gosec GoLang 安全掃描器
xray JFrog Xray - 漏洞掃描與容器安全
owasp-zap OWASP Zed 攻擊代理 (ZAP)
owasp-zap-ui OWASP Zed 攻擊代理 UI (ZAP UI)
sonarqube SonarQube 掃描
peer-review 同儕審查掃描
twistlock TwistLock
cims 容器映像多重掃描器 (CIMS)
mend 修補掃描
mend-sast 修復 SAST 掃描
checkov Checkov 掃描
cra-tf 適用於 Terraform 的程式碼風險分析器
tfsec Terraform 安全掃描器
fips-scanner FIPS (聯邦資訊處理標準) 掃描器
detect-secrets 偵測秘密
ciso-code-signing CISO 程式碼簽章工具
sysdig Sysdig 掃描
cyclonedx CycloneDX 格式。 問題管理的工具偵測將根據 CycloneDX 元資料 在此 執行
grype Grype Scan

CycloneDX metadata 採用工具偵測功能來進行問題管理。

如果使用不受支援的工具類型來呼叫 collect-evidence Script,則 Script 不會嘗試處理附件。 此外,會跳過問題處理,且不會停止證明收集。

如果您的 Script 從支援的工具提供附件,但無法處理該附件,則會跳過問題處理,且不會停止證明收集。

證明類型

您可以使用 --evidence-type 參數來設定證明類型。 您可以設定任何類型,但 IBM Cloud® Compliance Manager 支援下列證明類型:

  • com.ibm.unit_tests
  • com.ibm.detect_secrets
  • com.ibm.branch_protection
  • com.ibm.static_scan
  • com.ibm.code_vulnerability_scan
  • com.ibm.code_bom_check
  • com.ibm.code_cis_check
  • com.ibm.cloud.image_vulnerability_scan
  • com.ibm.cloud.image_signing
  • com.ibm.dynamic_scan
  • com.ibm.cloud.image_signing
  • com.ibm.acceptance_tests
  • com.ibm.prod_change_request
  • com.ibm.close_change_reques

證據類型收集與工具映射

支援的證據工具
證據類型 ID 預設支援的工具 原點 所有權 推薦資產 問題
com.ibm.branch_protection cocoa-branch-protection CI 平台 儲存庫 (repo) 非事件問題
com.ibm.unit_tests jest 公關/企業形象 使用者 儲存庫 (repo) 非事件問題
com.ibm.detect_secrets detect-secrets PR/CI/CC 平台 儲存庫 (repo) 事件/非事件問題
com.ibm.code_vulnerability_scan cra-tf, cra, mend
基礎結構為代碼:tfsec, checkov
CI 平台 儲存庫 (repo) 事件/非事件問題
com.ibm.code_bom_check cra-bom, sbom-utility PR/CI/CC 平台 儲存庫 (repo) 事件/非事件問題
com.ibm.code_cis_check cra-cis PR/CI/CC 平台 儲存庫 (repo) 非事件問題
com.ibm.peer_review peer-review CI 平台 儲存庫 (repo) 非事件問題
com.ibm.static_scan sonarqube, gosec
用於基礎結構作為代碼:terraform-fmt, terraform-validatetflint
CI/CC 平台 儲存庫 (repo) 事件/非事件問題
com.ibm.cloud.image_signing artifact-signing CI 平台 儲存庫 (repo) 非事件問題
com.ibm.acceptance_tests jest CI 使用者 構件 (artifact) 非事件問題
com.ibm.dynamic_scan owasp-zap, owasp-zap-ui CI 平台 構件 (artifact) 事件/非事件問題
com.ibm.cloud.image_vulnerability_scan va, sysdig, xray CI/CC 平台 構件 (artifact) 事件/非事件問題
com.ibm.prod_change_request gitlab CD 平台 構件 (artifact) 非事件問題
com.ibm.close_change_request gitlab CD 平台 構件 (artifact) 非事件問題
com.ibm.cloud.slsa tekton-chains CI 平台 構件 (artifact) 非事件問題
com.ibm.cloud.verify_signature ciso-code-signing CD 平台 構件 (artifact) 非事件問題
com.ibm.pipeline_logs NA CI/CD/CC 平台 NA NA
com.ibm.pipeline_run_data NA CI/CD/CC 平台 NA NA
com.ibm.network_compliance CI 平台 儲存庫 (repo) 事件/非事件問題

當掃描失敗或無法解析附件時,工具會自動建立一個非事故問題來追蹤失敗。

資產需求

使用此工具收集的證明是 V2 證明收集工作及相關證明櫃更新項目的一部分。

此新方法著重於資產型證明,這表示證明透過在那些構件或儲存庫上執行的掃描及測試連接至構件及儲存庫,並產生證明的結果。 例如:

  • 具有特定確定的儲存庫會變成已掃描的確定資產,並建立確定資產的證明。
  • 使用相同的儲存庫及確定,會建置映像檔。 影像會變成與來源資產、儲存庫及確定相關的資產。
  • 會掃描影像,並建立證明。 所有掃描結果都透過證明、其資產及相關資產連接。

若要讓所有這一切一起運作,隨參數 --asset-type--asset-key 提供的資產必須符合部分需求:

使用 save_repo 指令新增的 repo 資產

請檢查 指令參考手冊,以取得確切的用法資訊。

必要的欄位:

  • url 此儲存庫 URL。
  • commit 確定 SHA。

使用 save_artifact 指令新增的 artifact 資產

請檢查 指令參考手冊,以取得確切的用法資訊。

必要的欄位:

  • name 構件名稱。 例如,對於圖像,包括註冊表、命名空間和圖像(例如:us.icr.io/team-images/service )。
  • digest 工件摘要(例如: sha256:a2292ed2b82c7a51d7d180c3187dbb0f7cc9ab385a68484c4f117e994acd6192 )。

非影像的 save_artifact 中需要變更: 收集證明現在支援所有資產類型。 用於收集證明以使用任何資產類型 save_artifact 應明確地將資產儲存為 type ,例如:zip save_artifact artifact-1 type=zip ...。 在收集證據腳本中, asset-type 應該是工件,並且類型是從工件中查詢的。 為了讓此程序運作,已修改可可櫃資產新增,以新增任何類型的資產。 儲存之後,可以如下呼叫收集證明 Script:

collect-evidence --tool-type toolType --evidence-type artifact --asset-key artifact-1 ...

請參閱我們的範例應用程式,以 deployment 獲取類型 的範例實作。https://us-south.git.cloud.ibm.com/open-toolchain/hello-compliance-app

利用這些變更,collect-evidence Script 會處理所有類型的構件,包括影像及非影像構件。

收集中的多個資產-證明

透過使用 collect-evidence,您可以配置同時收集多個資產的證明。 您可以使用 --assets 旗標來起始證明收集,該旗標指定多個資產索引鍵及資產類型配對。 例如,input --assets asset-key1:asset-type1 --assets asset-key2:asset-type2。 如果您選擇此選項,請不要個別指出 asset-key 和 asset-type。

請記住這些關於多資產集合的關鍵點:

  • statusattachmenttool-typeevidence-typeupload-logs 在所有資產中都是常數。
  • 依預設,當您指定多個資產時,證明處理遵循舊式流程。 如果您指定單一資產,則會透過特定於工具或附件的流程進行證明處理。
  • 如果失敗,則會根據資產來建立問題。 在成功重新執行證明收集之後,這些問題即會關閉。 結案會與您指定的資產產生關聯。
  • 會產生單一證明檔案,其特色是包含所有合併資產的 ID。