script di raccolta - prova

Lo collect-evidence script aiuta gli adottanti, gli utenti e i contributori a inviare i propri dati di conformità al flusso di dati di gestione delle modifiche dell' DevSecOps.

Lo script esegue le seguenti attività:

  • Tenta di elaborare eventuali allegati come risultati e crea problemi di incidente da tali risultati. È supportato un numero limitato di formati di output dello strumento.
  • Se vengono rilevati dei problemi, lo script valuta i relativi periodi di tolleranza (date di scadenza) e gli stati di esenzione.
  • Crea un asset di prova nel locker delle prove.
  • Crea la prova e allega i problemi e gli allegati forniti.

Per uno stato di success o failure, se non viene passato alcun allegato all'interno di collect-evidence, i log della pipeline per quella particolare attività e la fase vengono catturati come un allegato.

Lo script collect-evidence è fornito dalla pipeline. Non è necessario installarlo. Lo script ha le seguenti dipendenze:

  • bash
  • libstdc++ Libreria condivisa
  • libgcc Libreria condivisa

Assicurarsi che le dipendenze siano installate nell'immagine di base che utilizza questo strumento per la segnalazione delle prove.

Architettura dei comandi CLI

La funzionalità collect-evidence è disponibile attraverso due interfacce:

  1. Shell Script Wrapper (collect-evidence): Interfaccia tradizionale per script bash che fornisce compatibilità con il passato
  2. Comando CLI diretto (cocoa locker evidence collect): Interfaccia CLI nativa con accesso completo alle funzioni

Versione Toggle

Lo script di shell collect-evidence supporta due versioni di implementazione che possono essere modificate utilizzando la proprietà d'ambiente collect-evidence-version:

Versione Implementazione Condizione Descrizione
v1 Legacy Disponibile Implementazione originale basata su bash con piena retrocompatibilità
v2 Basato su CLI Valore predefinito Implementazione moderna che racchiude il comando CLI di cocoa locker evidence collect

Utilizzo

Lo script collect-evidence richiede i seguenti parametri:

  • --tool-type L'ID dello strumento che fornisce i dati della prova. Ad esempio: "owasp - zap - ui", "cra"
  • --evidence-type L'ID del tipo di prova. Ad esempio: com.ibm.image_vulnerability_scan, com.ibm.unit_tests
  • --asset-key La chiave negli asset pipelinectl. Per i seguenti comandi load_artifact <key> oppure load_repo <key>
  • --asset-type Il tipo di asset da pipelinectl e può essere uno dei seguenti: repo, artifact
  • --status Lo stato delle prove può essere uno dei seguenti: success, pending, failure
  • --assets Specificare più coppie asset - chiave e tipo di asset. Ad esempio, è possibile utilizzare --assets asset-key1:asset-type1 --assets asset-key2:asset-type2. Se si utilizza questa opzione, non specificare separatamente la chiave asset e il tipo di asset.

Il seguente parametro è facoltativo:

  • --attachment Il file da elaborare come risultato e allegato alla prova. Il parametro può essere specificato più volte per più file. Per la firma delle immagini, assicurarsi che il file di firma sia allegato utilizzando il parametro --attachment. Il file di firma deve includere i dettagli della firma, come l'ID della chiave, l'algoritmo e il digest firmato. I formati più comuni sono JSON o TXT.
  • --meta Metadati arbitrari da aggiungere alla prova. Il parametro accetta coppie 'key = value' e può essere specificato più volte. È possibile includere metadati rilevanti per il processo di firma dell'immagine, come l'ambiente di firma o qualsiasi configurazione specifica utilizzata durante la firma.
  • --additional-comment Il commento che viene aggiunto a un problema se una pipeline ha avuto esito negativo.

Utilizzare il seguente comando per ottenere aiuto:

collect-evidence --help

Valore di ritorno

collect-evidence esegue l'output della stringa di stato della prova valutata su STDOUT (uno tra success, failure o pending). Questo valore valutato dipende dagli allegati dei risultati elaborati, dai problemi degli incidenti rilevati e dalla possibile risoluzione di tali problemi, ad esempio avere una data di scadenza impostata o un'etichetta di esenzione. Per ulteriori informazioni, vedi Problemi relativi agli incidenti.

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

Passaggio a v2 (implementazione basata su CLI)

Per utilizzare la nuova implementazione basata sulla CLI, impostare la proprietà environment nella pipeline:

collect-evidence-version=v2

Utilizzo diretto del comando 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"

Per il riferimento completo al comando CLI e per tutti i parametri disponibili, vedere il documento di prova di Cocoa Locker Collect.

Utilizzo di esempio

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

È possibile utilizzare direttamente il comando 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"

Formati strumento supportati

L'implementazione corrente attualmente supporta i seguenti strumenti (forniti come parametro --tool-type ):

Nome strumento Descrizione
cra IBM Analizzatore di rischio del codice
cra-cis IBM Analizzatore dei rischi del codice CIS
va Vulnerability Advisor per IBM Cloud Container Registry
gosec GoLang Scanner di sicurezza
xray JFrog Xray - Scansione delle vulnerabilità e sicurezza dei container
owasp-zap Proxy di attacco Zed (ZAP) di OWASP
owasp-zap-ui Interfaccia utente di OWASP Zed Attack Proxy (ZAP UI)
sonarqube SonarQube scansione
peer-review Scansione della Peer Review
twistlock TwistLock
cims Multi-scanner per immagini di container (CIMS)
mend Scansione della rammenda
mend-sast Scansione SAST di Mend
checkov Scansione Checkov
cra-tf Analizzatore di rischio del codice per Terraform
tfsec Scanner di sicurezza Terraform
fips-scanner Scanner FIPS (Federal Information Processing Standards)
detect-secrets Rilevare i segreti
ciso-code-signing Strumento di firma del codice CISO
sysdig Scansione Sysdig
cyclonedx CycloneDX formato. Il rilevamento degli strumenti per la gestione dei problemi sarà effettuato sulla base dei metadati di CycloneDX qui
grype Grype Scan

CycloneDX Metadata utilizza il rilevamento degli strumenti per la gestione dei problemi.

Se lo script collect-evidence viene richiamato con un tipo di strumento non supportato, lo script non tenta di elaborare gli allegati. Inoltre, la gestione del problema viene ignorata e la raccolta di prove non viene arrestata.

Se lo script fornisce un allegato da uno strumento supportato, ma l'allegato non può essere elaborato, la gestione del problema viene ignorata e la raccolta di prove non viene arrestata.

Tipo di prova

È possibile impostare il tipo di prova utilizzando il parametro --evidence-type. Puoi impostare qualsiasi tipo, ma IBM Cloud® Compliance Manager supporta i seguenti tipi di prova:

  • 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

Raccolta dei tipi di evidenza e mappatura degli strumenti

Strumento supportato per le prove
ID del tipo di prova Strumento supportato di default Origine Proprietà Attività consigliata Problemi
com.ibm.branch_protection cocoa-branch-protection CI Piattaforma repo Problemi non incidenti
com.ibm.unit_tests jest PR/CI Utente repo Problemi non incidenti
com.ibm.detect_secrets detect-secrets PR/CI/CC Piattaforma repo Problemi di incidenti / non incidenti
com.ibm.code_vulnerability_scan cra-tf, cra, mend
Per le infrastrutture come codice: tfsec, checkov
CI Piattaforma repo Problemi di incidenti / non incidenti
com.ibm.code_bom_check cra-bom, sbom-utility PR/CI/CC Piattaforma repo Problemi di incidenti / non incidenti
com.ibm.code_cis_check cra-cis PR/CI/CC Piattaforma repo Problemi non incidenti
com.ibm.peer_review peer-review CI Piattaforma repo Problemi non incidenti
com.ibm.static_scan sonarqube, gosec
Per le infrastrutture come codice: terraform-fmt, terraform-validate, tflint
CI/CC Piattaforma repo Problemi di incidenti / non incidenti
com.ibm.cloud.image_signing artifact-signing CI Piattaforma repo Problemi non incidenti
com.ibm.acceptance_tests jest CI Utente risorsa utente Problemi non incidenti
com.ibm.dynamic_scan owasp-zap, owasp-zap-ui CI Piattaforma risorsa utente Problemi di incidenti / non incidenti
com.ibm.cloud.image_vulnerability_scan va, sysdig, xray CI/CC Piattaforma risorsa utente Problemi di incidenti / non incidenti
com.ibm.prod_change_request gitlab CD Piattaforma risorsa utente Problemi non incidenti
com.ibm.close_change_request gitlab CD Piattaforma risorsa utente Problemi non incidenti
com.ibm.cloud.slsa tekton-chains CI Piattaforma risorsa utente Problemi non incidenti
com.ibm.cloud.verify_signature ciso-code-signing CD Piattaforma risorsa utente Problemi non incidenti
com.ibm.pipeline_logs NA CI/CD/CC Piattaforma NA NA
com.ibm.pipeline_run_data NA CI/CD/CC Piattaforma NA NA
com.ibm.network_compliance CI Piattaforma repo Problemi di incidenti / non incidenti

Quando una scansione non va a buon fine o quando gli allegati non possono essere analizzati, lo strumento crea automaticamente un problema non incidentale per tracciare il guasto.

Requisiti asset

La prova raccolta con questo strumento fa parte del lavoro di raccolta di prove V2 e degli aggiornamenti del blocco di prove correlati.

Questo nuovo metodo si concentra sulla prova basata sull'asset, il che significa che la prova è connessa alla risorsa utente e al repository attraverso le scansioni e i test eseguiti su tali risorse utente o repository e ha prodotto risultati per la prova. Ad esempio:

  • Un repository con un determinato commit diventa un asset di commit, che viene scansionato, creando la prova per l'asset di commit.
  • Utilizzando lo stesso repository e commit, viene creata un'immagine. L'immagine diventa un asset correlato all'asset di origine, il repository e il commit.
  • L'immagine viene scansionata e viene creata la prova. Tutti i risultati della scansione sono connessi tramite la prova, il relativo asset e gli asset correlati.

Per far sì che tutto questo funzioni insieme, gli asset forniti con i parametri --asset-type e --asset-key devono essere conformi ad alcuni requisiti:

Risorse repo aggiunte utilizzando il comando save_repo

Controllare il riferimento del comando per informazioni esatte sull'utilizzo.

Campi obbligatori:

  • url Il repository URL.
  • commit Il commit SHA.

Risorse artifact aggiunte utilizzando il comando save_artifact

Controllare il riferimento del comando per informazioni esatte sull'utilizzo.

Campi obbligatori:

  • name Il nome della risorsa utente. Ad esempio, per un'immagine includere registro, spazio dei nomi e immagine (esempio: us.icr.io/team-images/service).
  • digest Il digest dell'artefatto (esempio: sha256:a2292ed2b82c7a51d7d180c3187dbb0f7cc9ab385a68484c4f117e994acd6192).

Modifiche richieste in save_artifact per le non immagini: raccogliere la prova ora supporta tutti i tipi di asset. Per raccogliere le prove per lavorare su qualsiasi tipo di asset save_artifact È necessario salvare esplicitamente il file con l'estensione type, ad esempio zip save_artifact artifact-1 type=zip .... Nello script di raccolta delle prove, il asset-type deve essere un artefatto e il tipo viene interrogato dall'artefatto. Perché questo processo funzioni, l'aggiunta di asset del blocco di cacao è stata modificata per aggiungere asset di qualsiasi tipo. Una volta salvato, lo script di raccolta prove può essere richiamato come riportato di seguito:

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

Per un esempio di implementazione, consultare la nostra applicazione di esempio per deployment il tipo https://us-south.git.cloud.ibm.com/open-toolchain/hello-compliance-app

Con queste modifiche, lo script di raccolta prove elabora tutti i tipi di risorse utente, incluse le risorse utente immagine e non immagine.

Più asset in raccolta - prova

Utilizzando la raccolta prove, è possibile configurare la raccolta simultanea di prove per più asset. La raccolta di prove viene avviata utilizzando l'indicatore --assets, che specifica più coppie asset - chiave e tipo di asset. Ad esempio, input --assets asset-key1:asset-type1 --assets asset-key2:asset-type2. Se si sceglie questa opzione, non indicare separatamente asset - key e asset - type.

Ricordare questi punti chiave relativi alla raccolta multi - asset:

  • status, attachment, tool-type, evidence-type e upload-logs sono costanti in tutti gli asset.
  • Per impostazione predefinita, quando si designano più asset, l'elaborazione delle prove segue il flusso legacy. Se si specifica un singolo asset, l'elaborazione delle prove avviene attraverso un flusso specifico dello strumento o dell'allegato.
  • In caso di errore, i prelievi vengono creati per asset. Questi problemi vengono chiusi in caso di riesecuzione corretta della raccolta di prove. La chiusura è correlata agli asset specificati.
  • Viene generato un file di prova singolare, che presenta un ID che comprende tutti gli asset combinati.