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 condivisalibgccLibreria 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:
- Shell Script Wrapper (
collect-evidence): Interfaccia tradizionale per script bash che fornisce compatibilità con il passato - 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-typeL'ID dello strumento che fornisce i dati della prova. Ad esempio: "owasp - zap - ui", "cra"--evidence-typeL'ID del tipo di prova. Ad esempio:com.ibm.image_vulnerability_scan,com.ibm.unit_tests--asset-keyLa chiave negli asset pipelinectl. Per i seguenti comandiload_artifact <key>oppureload_repo <key>--asset-typeIl tipo di asset da pipelinectl e può essere uno dei seguenti:repo,artifact--statusLo stato delle prove può essere uno dei seguenti:success,pending,failure--assetsSpecificare 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:
--attachmentIl 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.--metaMetadati 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-commentIl 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_testscom.ibm.detect_secretscom.ibm.branch_protectioncom.ibm.static_scancom.ibm.code_vulnerability_scancom.ibm.code_bom_checkcom.ibm.code_cis_checkcom.ibm.cloud.image_vulnerability_scancom.ibm.cloud.image_signingcom.ibm.dynamic_scancom.ibm.cloud.image_signingcom.ibm.acceptance_testscom.ibm.prod_change_requestcom.ibm.close_change_reques
Raccolta dei tipi di evidenza e mappatura degli strumenti
| 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:
urlIl repository URL.commitIl commit SHA.
Risorse artifact aggiunte utilizzando il comando save_artifact
Controllare il riferimento del comando per informazioni esatte sull'utilizzo.
Campi obbligatori:
nameIl nome della risorsa utente. Ad esempio, per un'immagine includere registro, spazio dei nomi e immagine (esempio:us.icr.io/team-images/service).digestIl 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-typeeupload-logssono 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.