IBM Cloud Docs
持續合規管線

持續合規管線

連續相符性管線 (CC 管線) 會定期掃描已部署的構件及其來源儲存庫。

CC 管線會使用 environment-tag 值來處理 inventory 儲存庫中的項目,以判定要查看的最新部署狀態。 掃描並執行構件和來源儲存庫的檢查之後,管線會建立新的發生事件問題,或更新發生事件儲存庫中的現有發生事件問題。 最後,使用這些問題及結果,管線會收集證明並彙總證明,因此 Security and Compliance Center 可以更新所找到構件的相符性狀態。

階段和作業

下表列出在 CC 管線中執行的作業。 此外,此表格還提供下列每一個階段的概觀:

  • 作業或階段: 這是指 .pipeline-config.yaml 配置檔內所定義的階段名稱。

  • 簡要說明: 這會提供在階段執行期間所執行之動作的簡要說明。

  • 允許自訂: 這指出使用者是否有彈性在 .pipeline-config.yaml 檔中插入自訂 Script 來修改或取代階段的預設行為。

  • 預設參考實現:這表明是否DevSecOps管道帶有階段的預定義或預設實作。 值得注意的是,對於某些階段,例如 unit-tests 或者 setup,這DevSecOpspipeline 不提供任何開箱即用的實作。 相反地,使用者必須提供自訂 Script 或自訂程式碼,以符合其應用程式的需求。

  • 證明收集: 這指出階段是否執行標準證明收集。 什麼時候DevSecOps管道為階段提供參考實現,證據收集是開箱即用的。 不過,如果 使用者 選擇修改或取代這些預先定義的階段,則必須確保其自訂實作包括適當的證明集合。 在以下階段,使用者承擔同樣的責任:DevSecOpspipeline 不提供開箱即用的實現,因此需要他們執行證據收集。 該直欄指出負責執行證明收集的實體 (使用者/管線)。

  • 跳過允許 (適用於版本> = v10): 這指出使用者是否可以在 .pipeline-config.yaml 中將 skip 內容設為 true,以拒絕執行此階段。 不過,在使用此特性時,尤其對於設計用於收集證明的階段,建議注意。 跳過這類階段可能會導致遺漏建置的必要證明。

表 1. 連續合規管線階段及作業
作業或階段 簡短說明 .pipeline-config.yaml 中允許自訂 預設參照實作 證明集合 允許跳過
start 設定管線環境。 管線
setup 設定建置和測試環境。
detect-secrets 在應用程式碼上執行偵測密鑰掃描。 管線
static-scan 在應用程式碼上執行靜態掃描程式碼。 管線
dynamic-scan 在應用程式上執行動態掃描。 管線
compliance-checks 在應用程式儲存庫上執行 Code Risk Analyzer 掃描及其他相符性檢查。 管線
scan-artifact 掃描建置的構件。 管線
finish 收集、建立及上傳日誌檔、構件及證明至證明櫃。 管線

如需如何使用 .pipeline-config.yaml 檔案來自訂階段的相關資訊,請參閱 自訂 Script管線參數 清單。

階段和證明

下表提供各種證明類型與管道內進行其收集的特定階段之間的關係。

表 2. 連續整合階段及相關聯證明
作業或階段 證明類型
start NA
setup NA
detect-secrets com.ibm.detect_secrets
static-scan com.ibm.static_scan
compliance-checks com.ibm.code_bom_check, com.ibm.code_cis_check, com.ibm.code_vulnerability_scan, com.ibm.branch_protection
dynamic-scan com.ibm.dynamic_scan
scan-artifact com.ibm.cloud.image_vulnerability_scan
finish com.ibm.pipeline_logs, com.ibm.pipeline_run_data

如需如何使用 collect-evidence Script 在可自訂使用者階段內收集證明的相關資訊,請參閱 collect-evidence Script

處理構件和儲存庫的庫存

開始階段會複製庫存,並處理正式作業環境中的最新項目。 您可以提供下列管線參數來指定此環境:

表 2. 持續合規管線構件和儲存庫
名稱 類型 說明 必要或選用
environment-tag 文字 代表庫存中最新目標環境的標籤。 範例: prod_latestus-south_prod_latest 必要
environment-branch 文字 代表庫存中目標環境的分支名稱。 範例: prod 已淘汰-改為偏好 environment-tag
region-prefix 文字 作為目標環境之 latest 標籤字首的區域名稱。 範例: us-south 已淘汰-改為偏好 environment-tag

庫存項目包含已部署的構件和儲存庫來源。 管線會使用下列 pipelinectl 指令來處理及收集庫存項目,並針對管線執行登錄它們:

start 階段也會複製找到的儲存庫、每一個儲存庫,以及每一個確定配對。 因此,例如,在資料夾中複製 repo1 with commit sha1,但管線會在個別資料夾中複製相同的 repo1 with commit sha2

管線會使用簡式命名表示法及增量索引來登錄管線執行的構件及儲存庫,例如下列範例:

  • repo-1, repo-2, repo-3
  • artifact-1 artifact-2, artifact-3

您可以使用下列 pipelinectl 指令,在自訂階段中列出這些項目:

如果您使用 pipelinectl 指令 load_repo "$repo" branch 來擷取 CC 管線中的分支資訊,則一律會傳回 master 作為分支。 因此,請使用 commit hashes 而非分支。

設定階段

CC 管線中的設定階段會執行位於 .pipeline-config.yaml 所定義的 setup 階段中的 Script。 您可以使用下列指令來判斷 Script 執行所在的管線:

get_env pipeline_namespace

視執行的管線而定,此指令會傳回 cccdcipr。 如此一來,必要的話,您可以在管線之間重複使用設定 Script。

偵測密鑰掃描

IBM Detect Secrets 工具可識別在應用程式碼中可見密鑰的位置。 如需為掃描設定儲存庫的相關資訊,請參閱 這裡

靜態程式碼掃描

靜態程式碼掃描階段會在指定的應用程式儲存庫程式碼庫上執行靜態程式碼分析器工具。

CC 管線提供在掃描器的庫存中找到的儲存庫。

您可以使用下列任何方法,將靜態程式碼新增至管線:

  • 將 SonarQube 工具新增至工具鏈,以提供已在執行中的 SonarQube 實例名稱、URL 及認證。 static-scan 作業會對指定的儲存庫執行掃描。
  • 針對自訂實作,將程式碼新增至 .pipeline-config.yaml 檔案中的 static-scan 自訂階段。

動態掃描

「動態掃描」階段會執行動態應用程式安全測試工具,以尋找已部署應用程式中的漏洞。

  • 針對自訂實作,將您自己的動態掃描程式碼新增至 .pipeline-config.yaml 檔中的動態掃描自訂階段。

如果要進一步瞭解如何使用 OWASP-ZAP 來配置動態掃描,請參閱 配置 CC 管線的 ZAP 掃描

掃描並移入相符性檢查

表 3. 相符性掃描及檢查
掃描或檢查 說明
Code Risk Analyzer 漏洞掃描 尋找所有應用程式套件相依關係、容器基本映像檔及作業系統套件的漏洞。 使用 Code Risk Analyzer 工具。
Code Risk Analyzer CIS 檢查 在 Kubernetes 部署資訊清單上執行 配置檢查。 使用 Code Risk Analyzer 工具。
Code Risk Analyzer 物料清單 (BOM) 檢查 所指定儲存庫的 BOM,用於擷取所有相依關係的 pedigree。 這個 BOM 會以不同的粒度收集。 例如,BOM 會擷取建置中使用的基本映像檔清單、基本映像檔中的套件清單,以及在基本映像檔上安裝的應用程式套件清單。 BOM 充當分析結果的基準,並可能用來施行原則閘道。 使用 Code Risk Analyzer 工具。
Mend Unified Agent 漏洞掃描 Mend Unified Agent 掃描工具 會掃描應用程式儲存庫的開放程式碼元件,以找出有漏洞的程式庫及原始檔。 如需相關資訊,請參閱 配置 Mend Unified Agent 掃描

這些 Script 會在管線知道的所有應用程式儲存庫上執行。 CC 管線使用 pipelinectl save_repo 介面來登錄在庫存項目中找到的儲存庫,然後使用 list_reposload_repo 指令來反覆運算儲存庫,並將它們傳送至掃描器。

如需使用者 Script 階段預期輸出的相關資訊,請參閱 自訂 Script

構件掃描和簽署

構件掃描階段提供 Docker 映像檔的預設行為,具有可自訂的步驟:

  • Container Registry Vulnerability Advisor 掃描

CC 管線使用 pipelinectl save_artifact 介面來登錄在庫存項目中找到的構件,然後使用 list_artifactsload_artifact 指令來反覆運算這些構件。

若要開始使用此階段,請使用 pipelinectl 介面來提供管線的構件。 您不需要更新建置 Script 和 .pipeline-config.yaml 配置。

如果要使用不同的掃描程序,或處理 icr.io中 Docker 映像檔以外的構件,您可以在專案中使用 .pipeline-config.yaml 配置來自訂這些階段。

在建置上收集法規遵循資料

CC 管線會嘗試處理來自檢查及掃描的結果,根據每個找到的 CVE、漏洞或警示,將結果細分為個別問題。 CC 管線找到的問題會標示 continuous-compliance-check 標籤,以識別在正式作業環境上探索到的問題。

管線會收集所有檢查及掃描的 證明,並將它們儲存在證明櫃中。 證明收集器也會儲存管線日誌檔 (管線資料本身),其中包含 Tekton 定義。 根據掃描所建立的問題,並檢查結果是否也附加至證明。