Plug-in Code Risk Analyzer per IBM Cloud
Code Risk Analyzer verrà dismesso in tutte le regioni il 12 febbraio 2027. Tuttavia, se una regione non ha un utilizzo attivo di Code Risk Analyzer, il servizio in quella regione può essere interrotto prima. Ulteriori informazioni
L'interfaccia della riga di comando (CLI) di IBM Cloud® fornisce comandi per l'analisi dei rischi del codice. È possibile utilizzare la CLI IBM Cloud per analizzare il codice alla ricerca di vulnerabilità e verificare la conformità con determinate regole. Code Risk Analyzer è disponibile in tutte le regioni di IBM Cloud in cui sono supportate le toolchain.
Utilizzare la CLI per completare le seguenti operazioni:
- Generare una distinta base (BOM) che elenchi le dipendenze e le informazioni sulle licenze disponibili di tutti i pacchetti OS e applicativi di terze parti. È possibile generare questo output anche nel formato CycloneDX-specific.
- Scoprire le vulnerabilità nei pacchetti elencati nella distinta base. È inoltre possibile visualizzare il rapporto generato in formato CycloneDX-specific o utilizzare la riparazione automatica delle vulnerabilità per le applicazioni Node.js, Maven o Gradle (Groovy).
- Analizzare i file di Kubernetes per verificare la conformità a determinate regole.
A partire da gennaio 2024, Code Risk Analyzer utilizzerà i dati sulle vulnerabilità forniti dal progetto open source Clair anziché quelli della società commerciale Snyk Limited. Non è richiesta alcuna azione specifica da parte vostra in seguito a questa modifica. Tuttavia, è possibile osservare alcune differenze nei particolari dei CVE segnalati da Code Risk Analyzer.
Contenuti supportati
Code Risk Analyzer supporta i linguaggi Java™, Node.js, Python e Go. La tabella seguente elenca e descrive i contenuti supportati da Code Risk Analyzer.
| Contenuti | Descrizione |
|---|---|
| Java | Il repo richiede Maven o Gradle per l'automazione della compilazione. Maven usa il file pom.xml per calcolare le dipendenze e Gradle usa il file build.gradle(.kts). Code Risk Analyzer può automatizzare la correzione
sia per Maven che per Gradle (Groovy). |
| Node.js | package-lock.json calcola le dipendenze. Per Node.js, Code Risk analyzer può anche automatizzare la correzione. Assicurarsi che la versione di npm installata corrisponda alla versione di npm del progetto. |
| Python | Le dipendenze sono calcolate utilizzando i file requirements.txt e pyproject.toml. |
| Golang | Supporta la gestione delle dipendenze di go mod e go dep. Per go mod, il file go.sum deve essere presente nel repo. Per go dep, il file Gopkg.lock deve essere
presente nel repo. |
| File Docker | Vengono considerati i file con lo schema Dockerfile nel repo. Per le immagini dei contenitori, sono supportate le distro Debian, Red Hat Enterprise Linux®, Alpine, e Ubuntu Linux. |
| Kubernetes | Vengono considerati i file con i suffissi .yaml e .yml. Il valore kind deve essere impostato su Pod, ReplicaSet, ReplicationController, Deployment,
Daemonset, Statefulset, Job, CronJob, NetworkPolicy, o Ingress. |
| Calico | Vengono considerati i file con i suffissi .yaml e .yml. Il valore kind deve essere impostato su NetworkPolicy, GlobalNetworkPolicy, Profile, NetworkSet,
GlobalNetworkSet, o HostEndpoint. |
| Terraform | Il file di piano di Terraform deve essere generato utilizzando IBM Cloud come provider di Terraform. |
Code Risk Analyzer esamina il codice sorgente e le dipendenze delle immagini nei vostri repository alla ricerca di vulnerabilità. La tabella seguente mostra le fonti di informazioni sulle vulnerabilità che Code Risk Analyzer consulta per i diversi tipi di dipendenze.
| Dipendenza | Versioni supportate | Origine delle informazioni particolari di sicurezza |
|---|---|---|
| Alpine immagine | Tutte le versioni stabili con supporto di sicurezza del fornitore. | SecDBAlpine database. |
| Debian immagine | Tutte le versioni stabili con supporto di sicurezza del fornitore.
I CVE sui pacchetti binari associati al pacchetto sorgente Debian |
Debian Tracciamento dei bug di sicurezza. |
| GoogleContainerTools immagine senza distro | Tutte le versioni stabili con supporto di sicurezza del fornitore. | GoogleContainerTools senza distro |
| Red Hat® Enterprise Linux® (RHEL) immagine | RHEL 6, RHEL/UBI 7, RHEL/UBI 8 e RHEL/UBI 9 | Red Hat API dei dati di sicurezza. |
| Ubuntu immagine | Tutte le versioni stabili con supporto di sicurezza del fornitore. | Ubuntu CVE Tracker. |
| Go, npm ( JavaScript ), Maven ( Java ), PyPI ( Python ), RubyGems ( Ruby ), e Packagist (PHP) | Tutte le versioni stabili con supporto di sicurezza del fornitore. | Database delle vulnerabilità open source. |
Problemi noti con Code Risk Analyzer
Code Risk Analyzer non è in grado di scoprire le vulnerabilità dei pacchetti applicativi che non utilizzano uno schema di versioning, come major.minor.patch. Ad esempio, non sono supportate le versioni pre-release o quelle che contengono
metadati di compilazione.
Prerequisiti
-
Installa la CLI IBM Cloud. Per istruzioni, vedere Download di IBM Cloud CLI.
-
Installare il plug-in Code Risk Analyzer CLI eseguendo il seguente comando:
ibmcloud plugin install cra
-
Assicurarsi di poter accedere a una catena di strumenti in una delle regioni supportate. Non è necessario che la toolchain abbia degli strumenti. Per ulteriori informazioni sulle toolchain, vedi Creazione di una toolchain da un'applicazione.
-
Specificare l'ID della catena di strumenti impostando la variabile d'ambiente
TOOLCHAIN_ID:
export TOOLCHAIN_ID=e22195a5-11e3-44ba-9533-e7c18a3a61a7
- Accedere a una regione specifica di IBM Cloud eseguendo il seguente comando, dove
[region]è la regione in cui è stata creata la catena di strumenti.
ibmcloud login -r [region]
- Opzionalmente, per migliorare il controllo e la sicurezza dei dati quando si utilizza la CLI, è possibile utilizzare percorsi privati per gli endpoint di IBM Cloud. Per prima cosa è necessario abilitare il routing e l'inoltro virtuale nel proprio account, quindi è possibile abilitare l'uso degli endpoint del servizio privato IBM Cloud. Per ulteriori informazioni sull'impostazione dell'account per supportare l'opzione di connettività privata, vedere Abilitazione di VRF ed endpoint di servizio.
Usare il seguente comando per accedere a un endpoint privato, dove [region] è la regione in cui è stata creata la catena di strumenti.
ibmcloud login -a private.cloud.ibm.com -r [region]
Comandi di utilizzo della CLI
Si ricevono notifiche sulla riga di comando quando sono disponibili aggiornamenti della CLI di IBM Cloud e dei plug-in. Assicuratevi di mantenere aggiornata la vostra CLI per poter utilizzare i comandi più recenti. È possibile visualizzare la
versione corrente di tutti i plug-in installati eseguendo il comando ibmcloud plugin list.
Guida all'analizzatore di rischio del codice
Il comando seguente visualizza l'elenco dei comandi di Code Risk Analyzer:
ibmcloud cra --help
Guida al comando Code Risk Analyzer
Il seguente comando visualizza i dettagli dei flag utilizzati con un comando. Utilizzare ibmcloud cra --help per visualizzare i comandi disponibili.
ibmcloud cra <command> --help
Distinta base (BOM)
Il comando bom-generate accede agli artefatti nel percorso della directory specificata ed esegue una ricerca approfondita per identificare tutte le dipendenze, comprese quelle transitive. Il comando identifica anche le licenze con
cui queste dipendenze sono distribuite. Viene creata una distinta base che cattura un'istantanea di tutte le dipendenze. È possibile generare la distinta base nel formato standard o nel formato SBOM di CycloneDX's.
ibmcloud cra bom-generate
Requisiti del comando della distinta base
Il comando bom-generate dipende da alcuni comandi esterni:
- Se il percorso contiene file Docker, questo comando estrae le immagini di base e le immagini di compilazione per ogni fase di compilazione in ogni file Docker. In questo scenario, il comando
bom-generaterichiede che siano disponibili i comandiDocker clietar. - Se il percorso contiene file Maven, questo comando usa
mvnper costruire un elenco di dipendenze. In questo scenario, il comandobom-generaterichiede che il comandomvnsia disponibile. - Se il percorso contiene i file Gradle, questo comando usa
gradleper costruire un elenco di dipendenze. In questo scenario, il comandobom-generaterichiede che il comandogradlesia disponibile. - Se il percorso contiene i file Node.js
package-jsone questo comando viene usato per generare un filepackage-lock.jsoncorrispondente, il comandobom-generateutilizzanpmper costruire il file package-lock.json. In questo scenario, il comando richiede che sia disponibile il comandonpm. - Se il percorso contiene i file Python
requirements.txtopyproject.toml, il comando utilizzapipper generare le dipendenze del pacchetto. In questo scenario, il comandobom-generaterichiede che il comandopipsia disponibile. Sono supportate sia la versione 2 di Python che la versione 3 di Python.
Se si usa Dockerfiles, assicurarsi di accedere al registro dei container da cui estrarre le immagini di base.
Se il file Docker richiede ARGS, impostare un singolo ARG come variabile d'ambiente prima di eseguire il comando. Ad esempio, se il file Docker utilizza un ARG IAM_USER, esportare una variabile d'ambiente denominata IAM_USER:
export IAM_USER='value'. La CLI passa automaticamente queste variabili d'ambiente al comando docker build.
È anche possibile specificare esplicitamente il flag DOCKERBUILDFLAGS. Per esportare DOCKERBUILDFLAGS con il flag ARGS Docker, digitate il seguente comando:
export DOCKERBUILDFLAGS="--build-arg IAM_USER --build-arg API_KEY"
Opzioni del comando BOM
La tabella seguente elenca le opzioni di comando che si possono utilizzare per generare una distinta base con il comando bom-generate.
| Opzioni comando | Obbligatorio o facoltativo | Descrizione |
|---|---|---|
--path |
Obbligatorio | Il percorso della directory del progetto da analizzare. |
-r, --report |
Obbligatorio | Il nome del file in cui memorizzare il report della distinta base. |
-a, --asset-type |
Facoltativo | I controlli di sicurezza da eseguire (applicazioni, immagine, os, tutti). Per impostazione predefinita, questa opzione è impostata su all. L'opzione apps viene usata per limitare la ricerca ai pacchetti applicativi.
L'opzione image è usata per limitare la ricerca alle immagini di base utilizzate nei file Docker. L'opzione os è usata per limitare la scoperta alle sole fasi di costruzione nei file Docker. È possibile specificare
più valori utilizzando una virgola per delimitare i valori, come ad esempio -a os,image,apps. |
-p, --prev-report |
Facoltativo | Utilizzare il report della distinta base precedente per velocizzare il comando. Ad esempio, se un file Docker non è stato aggiornato dall'ultimo rapporto generato, il comando salta il rilevamento dei pacchetti da quel file Docker. Lo
stesso scenario si applica ad altri file manifest, come il file package-lock.json. |
-c, --dockerbuildcontext |
Facoltativo | Se specificato, CRA utilizza la directory nel parametro percorso come contesto di compilazione Docker durante la scansione della fase di compilazione. |
-o, --output |
Facoltativo | Selezionare il formato della distinta base. È possibile generare l'output del formato in formato Standard BOM (standard) o in formato CycloneDX's SBOM (cyclonedx). Il valore predefinito è standard.
È possibile memorizzare entrambi i formati inserendo ciascun formato separato da una virgola senza spazi. |
-f, --dockerbuildflags |
Facoltativo | Personalizzare il comando Docker build per la scansione dello stadio di compilazione. Invece di usare questo flag da riga di comando, si può specificare il valore in una variabile d'ambiente chiamata DOCKERBUILDFLAGS. Per
impostazione predefinita, questa opzione di comando è impostata su ''. Se si utilizza questa opzione, assicurarsi che sia l'ultimo flag fornito al comando. |
-d, --dockerfilepattern |
Facoltativo | Lo schema per identificare il file Docker nel repo. |
-g, --gradle.excludeconfigurations |
Facoltativo | Escludere le configurazioni di Gradle, ad esempio: runtimeClasspath,testCompileClasspath. Per impostazione predefinita, questa opzione di comando è impostata su ''. |
-l, --gradleprops |
Facoltativo | Personalizzare il comando Gradle con le proprietà per la scansione delle dipendenze di Gradle. |
-m, --maven.excludescopes |
Facoltativo | Escludere gli ambiti di Maven, ad esempio: test,compile. Esempio: 'test,compile'. Per impostazione predefinita, questa opzione di comando è impostata su ''. |
-n, --nodejs.createpackagelock |
Facoltativo | Abilita l'attività di creazione del file package-lock.json per i progetti node.js. |
--region |
Facoltativo | La regione ibmcloud in cui si trova la catena di strumenti. |
--toolchainid |
Facoltativo | L'ID della catena di strumenti di destinazione da utilizzare. |
-v, --verbose |
Facoltativo | Abilita i messaggi di log verbosi. |
Ignorare i file
Se il percorso contiene il file .cra/.fileignore, i file specificati nel file .fileignore non vengono analizzati per le dipendenze. Il file .fileignore deve seguire le regole dei file .gitignore. Simile al file .gitignore, il file .fileignore può includere commenti, directory da ignorare, file da ignorare e altri schemi.
Il seguente esempio di file .fileignore mostra come escludere gli script bash, i node_modules e il 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
Impostazione di contesti di costruzione multipli Docker
Quando si lavora con più file Docker all'interno di un singolo progetto, si potrebbe voler definire contesti di compilazione separati per ogni file Docker. Questo si può ottenere usando un file .cra/.dockerbuildcontext, che è
un file JSON che mappa i percorsi dei file Docker con i corrispondenti contesti di compilazione.
Se nella cartella del progetto esiste un file .cra/.dockerbuildcontext, i comandi di compilazione di CRA Docker useranno i percorsi specificati in questo file come contesti di compilazione per i file Docker associati. Le chiavi
dell'oggetto JSON rappresentano i percorsi relativi ai file Docker, mentre i valori specificano i percorsi relativi ai rispettivi contesti di compilazione.
Ecco un esempio di file .dockerbuildcontext che definisce contesti di compilazione diversi per più file Docker:
{
"Dockerfile": "./",
"path/to/different/Dockerfile": "./another/Path"
}
Esempio
I seguenti frammenti di codice mostrano come utilizzare il comando 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
Scansione delle vulnerabilità
Il comando vulnerability-scan riceve in ingresso una distinta base nel formato standard e rileva le vulnerabilità nei pacchetti delle applicazioni e nei pacchetti del sistema operativo elencati nella distinta base.
Sulla base delle informazioni sulle minacce raccolte da più fonti di vulnerabilità ed esposizioni comuni (CVE), vengono fornite raccomandazioni di correzione mirate. Code Risk Analyzer può anche eseguire la riparazione automatica dei pacchetti
vulnerabili solo per le applicazioni basate su Node.js. È possibile generare questo rapporto anche nel formato standard o nel formato VEX (Vulnerability Exploitability Exchange) di CycloneDX's.
ibmcloud cra vulnerability-scan
Opzioni del comando di scansione delle vulnerabilità
La tabella seguente elenca le opzioni per l'utilizzo del comando vulnerability-scan.
| Opzioni comando | Obbligatorio o facoltativo | Descrizione |
|---|---|---|
-b, --bom |
Obbligatorio | Il percorso del file della distinta base generata con il comando bom-generate. La distinta base deve essere in formato standard. |
-a, --autofix |
Facoltativo | Risolve tipi specifici di vulnerabilità delle app. Questa opzione è disponibile solo per le applicazioni Node.js, Maven e Gradle. |
-f, --commentfile |
Facoltativo | Specifica il file in cui viene creato il rapporto markdown. Questo comando è disponibile solo con autofix. |
-c, --cveignore |
Facoltativo | Il percorso del file CVE Ignore che contiene l'elenco dei CVE da ignorare. |
-e, --excludedev |
Facoltativo | Specifica che non si desidera che il comando riporti le CVE per le dipendenze di sviluppo. |
--force |
Facoltativo | Forza l'aggiornamento dei pacchetti dei nodi di primo livello, anche se la versione principale è diversa. Questo comando è disponibile solo con autofix. |
--include-nofix |
Facoltativo | Includere o escludere la segnalazione di CVE che non hanno rimedi noti. Per impostazione predefinita, questa opzione è impostata su app. L'opzione app è usata per includere solo i CVE dei pacchetti di applicazioni
senza correzioni. L'opzione os è usata per includere solo i CVE dei pacchetti OS senza correzioni. L'opzione all viene utilizzata per includere i CVE dei pacchetti di applicazioni e di sistemi operativi senza
correzioni. L'opzione none viene utilizzata per escludere i CVE dei pacchetti di applicazioni e di sistemi operativi senza correzioni. |
--path |
Richiesto se --autofix è abilitato |
Il percorso della directory del progetto da analizzare. Questo comando è disponibile solo con autofix. |
--region |
Facoltativo | La regione ibmcloud per la catena di strumenti. |
-r, --report |
Facoltativo | Il percorso del report generato. |
-o, --output |
Facoltativo | Seleziona il formato del rapporto CVE. È possibile generare l'output del formato in formato Standard CVE (standard) o in formato CycloneDX's VEX (cyclonedx). Il valore predefinito è standard. |
-s, --strict |
Facoltativo | Quando vengono trovate delle vulnerabilità, il comando fallisce (stato di uscita 2). |
--toolchainid |
Facoltativo | L'ID della catena di strumenti di destinazione. |
Ignorare le vulnerabilità
Se viene specificato il parametro -c o --cveignore, il comando cerca quel file e non riporta le CVE specificate nel file. È possibile configurare i CVE in modo da ometterli a tempo indeterminato fino a quando non
sarà disponibile un rimedio o fino a una data di scadenza specificata.
L'esempio seguente mostra uno schema JSON per il file .cveignore:
[
{
"cve": "string",
"alwaysOmit": "bool",
"untilRemediationAvailable": "bool",
"expiration": "string"
}
]
Per ogni voce del file .cveignore sono supportate le seguenti proprietà:
- cve- La vulnerabilità da omettere. Il valore di questa proprietà è un ID CVE.
- alwaysOmit- Se questa proprietà è impostata su
true, la vulnerabilità viene omessa finché non viene modificata. Questa proprietà ha la precedenza sui valori delle altre proprietà. - untilRemediationAvailable- Se questa proprietà è impostata su
true, la vulnerabilità viene omessa finché non è disponibile un percorso di correzione. Se è disponibile un rimedio, la vulnerabilità non viene omessa e viene visualizzato un messaggio. Questa proprietà ha la precedenza sul valore della proprietà di scadenza. - expiration- Se questa proprietà è impostata su
truee la data di scadenza non è stata raggiunta, la vulnerabilità viene omessa. Se la data di scadenza viene raggiunta, la vulnerabilità non viene omessa e viene visualizzato un messaggio. Per definire questa proprietà, utilizzare il formato orario RFC3339 (yyyy-MM-ddTHH:mm:ss[+-]Z).
Il Code Risk Analyzer utilizza solo queste proprietà definite. È possibile aggiungere proprietà senza alcun effetto sulle funzioni. Se una vulnerabilità definita in .cveignore non viene omessa, viene generato un log che ne spiega
il motivo. Se una vulnerabilità definita nel file .cveignore viene omessa, non viene visualizzata alcuna registrazione individuale. Il numero di omissioni e l'elenco degli ID delle vulnerabilità, con il nome del pacchetto, che
sono stati omessi, vengono registrati al termine di un report.
Il seguente frammento di codice mostra un esempio di file .cveignore:
[
{
"cve": "CVE-2021-27290",
"alwaysOmit": true
},
{
"cve": "CVE-2020-8244",
"untilRemediationAvailable": true,
}
]
Esempio
I seguenti frammenti di codice mostrano come utilizzare il comando 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
Distribuzione
Il comando deployment-analyze esegue controlli di configurazione sui manifesti di distribuzione Kubernetes.
ibmcloud cra deployment-analyze
Questo comando fornisce una guida prescrittiva per stabilire una postura di configurazione sicura per i contenitori Docker. Il Code Risk Analyzer utilizza queste configurazioni di sicurezza come punto di riferimento e identifica i controlli
di sicurezza da verificare negli artefatti di distribuzione, come i file .yaml, per le applicazioni Kubernetes. Questo comando fornisce anche una valutazione del rischio per ogni guasto del controllo.
La tabella seguente elenca i controlli che è possibile implementare all'interno di DevSecOps,, come individuati da CIS Docker 1.13.0. Vengono aggiunti altri controlli basati su riferimenti open source del Kubernetes Common Configuration Scoring System(KCCSS).
| ID | Regola | Rischio |
|---|---|---|
| 5.3 | Assicurarsi che i contenitori non abbiano la capacità di CAP_SYS_ADMIN. |
Alto |
| 5.3 | Assicurarsi che i contenitori non abbiano la capacità di CAP_NET_RAW. |
Alto |
| 5.4 | Assicurarsi che non vengano utilizzati contenitori privilegiati. | Alto |
| 5.5 | Assicurarsi che le directory sensibili del sistema host non siano montate sui container. | Medio |
| 5.7 | Assicurarsi che le porte privilegiate non siano mappate all'interno dei container. | Basso |
| 5.9 | Assicurarsi che lo spazio dei nomi di rete dell'host non sia condiviso. | Medio |
| 5.10 | Assicurarsi che l'uso della memoria per il contenitore sia limitato. | Medio |
| 5.11 | Assicurarsi che sul contenitore sia impostata la priorità della CPU appropriata. | Medio |
| 5.12 | Assicurarsi che il file system principale del contenitore sia montato in sola lettura. | Medio |
| 5.15 | Assicurarsi che lo spazio dei nomi dei processi dell'host non sia condiviso. | Medio |
| 5.16 | Assicurarsi che lo spazio dei nomi IPC dell'host non sia condiviso. | Medio |
| 5.31 | Assicurarsi che la presa Docker non sia montata all'interno di contenitori. | Alto |
|
|
Assicurarsi che i contenitori non consentano l'allocazione non sicura delle risorse della CPU. | Medio |
|
|
Assicurarsi che i contenitori non consentano l'escalation dei privilegi. | Medio |
|
|
Assicurarsi che i contenitori non espongano parti non sicure di /proc. |
Medio |
|
|
Assicurarsi che i container non siano esposti attraverso una porta host condivisa. | Medio |
Opzioni del comando di distribuzione
La tabella seguente elenca le opzioni di comando che si possono utilizzare per il comando deployment-analyze.
| Opzioni comando | Obbligatorio o facoltativo | Descrizione |
|---|---|---|
--path |
Obbligatorio | Il percorso della directory del progetto da analizzare. |
-r, --report |
Obbligatorio | Il nome del file in cui creare il report. |
-f, --fileignore |
Facoltativo | Il percorso del file .fileignore. |
-s, --strict |
Facoltativo | I risultati del comando fallito (stato di uscita 2) quando vengono rilevati rischi di distribuzione. |
Esempio
I seguenti frammenti di codice mostrano come utilizzare il comando 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 analisi
Si tratta di una funzione beta disponibile a scopo di valutazione e di test.
Il comando netpol-analyze esegue controlli di configurazione sui manifesti Kubernetes e Calico NetworkPolicy.
ibmcloud cra netpol-analyze
Questo comando verifica la configurazione della connettività di un'applicazione Kubernetes rispetto al controllo NIST SP 800-53 SC-7(5 ). Verifica che la connettività di ogni carico di lavoro sia controllata da almeno una risorsa NetworkPolicy e che le porte non sicure siano bloccate sia in ingresso che in uscita.
Il comando netpol-analyze può anche fornire un rapporto di connettività per l'applicazione analizzata, mostrando tutte le connessioni consentite tra i carichi di lavoro dell'applicazione. È possibile utilizzare questo report come
prova di conformità o per aiutare a risolvere i problemi di connettività. Si può anche usare questo comando per fornire i risultati di lint per le politiche di rete analizzate e poi usare questi risultati per migliorare l'efficienza e la leggibilità
delle politiche di rete. In alcuni casi, i risultati di lint possono anche indicare un errore nelle definizioni dei criteri di rete.
NetworkPolicy opzioni del comando di analisi
La tabella seguente elenca le opzioni di comando che si possono utilizzare per il comando netpol-analyze.
| Opzioni comando | Obbligatorio o facoltativo | Descrizione |
|---|---|---|
--path |
Obbligatorio | Il percorso della directory del progetto da analizzare. |
-r, --report |
Obbligatorio | Il nome del file in cui creare il rapporto di conformità. |
-c, --connectivity |
Facoltativo | Il nome del file in cui creare il rapporto di connettività. |
-l, --lint |
Facoltativo | Il nome del file in cui creare il rapporto di lint. |
-s, --strict |
Facoltativo | Se si riscontrano rischi di connettività, il comando fallisce (stato di uscita 2). |
Esempio
I seguenti esempi di codice mostrano come utilizzare il comando 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
Immagine dell'analizzatore di rete
Il comando netpol-analyze viene eseguito come parte di IBM 's Network Config Analyzer(NCA). Poiché questo comando esegue NCA come immagine
di Docker, è necessario installare Docker sul computer.
L'immagine URL per il Network Policy Analyzer è icr.io/continuous-delivery/cra/nca.
Se l'immagine dell'analizzatore non è già presente nel registro locale, il comando netpol-analyze estrae l'immagine più recente dell'analizzatore (comprese le correzioni per eventuali vulnerabilità) dal sito globale IBM Cloud®
Container Registry.
Utilizzo di Code Risk Analyzer nelle pipeline Tekton
È possibile utilizzare il task task-cra nelle pipeline Tekton. Utilizza la definizione della pipeline Tekton quando crei una richiesta pull, un trigger manuale o emetti un commit. È anche possibile creare i propri task Tekton ed eseguire il Code Risk Analyzer da questi task.
Utilizzo di Code Risk Analyzer in DevSecOps
È possibile utilizzare Code Risk Analyzer in DevSecOps. La tabella seguente elenca e descrive i parametri di Code Risk Analyzer supportati per DevSecOps.
Per ulteriori informazioni sui comandi di utilità dipendenti richiesti dall'immagine della pipeline per eseguire il comando bom-generate, vedere Requisiti della distinta base. Se mancano dei comandi,
si può usare il parametro cra-custom-script-path per fare riferimento a uno script che li installi.
| Nome | Immettere | Descrizione | Obbligatorio o facoltativo |
|---|---|---|---|
| artifactory-dockerconfigjson | SEGRETO | Il file base64-encoded Docker config.json memorizza le informazioni sulle credenziali per Artifactory. |
Facoltativo |
| immagine di base-autenticazione-utente | text | Le credenziali per l'immagine di base del file Docker dell'applicazione che è richiesto dalla scansione di Code Risk Analyzer. | Facoltativo |
| immagine-base-autenticazione-e-mail | text | Le credenziali per l'immagine di base del file Docker dell'applicazione che è richiesto dalla scansione di Code Risk Analyzer. | Facoltativo |
| immagine di base-autenticazione-host | text | Le credenziali per l'immagine di base del file Docker dell'applicazione che è richiesto dalla scansione di Code Risk Analyzer. | Facoltativo |
| immagine-base-autenticazione-password | SEGRETO | Le credenziali per l'immagine di base del file Docker dell'applicazione che è richiesto dalla scansione di Code Risk Analyzer. | Facoltativo |
| cra-cveignore-percorso | text | Il percorso del file cveignore, relativo alla radice del repo dell'applicazione. Il percorso predefinito dei file è .cra/.cveignore. |
Facoltativo |
| cra-percorso dello script personalizzato | text | Il percorso di uno script personalizzato che viene eseguito prima della scansione di Code Risk Analyzer. Questo script è stato creato per fornire l'opzione di impostare le variabili di ENV nel contesto dello strumento Code
Risk Analyzer BOM. |
Facoltativo |
| cra-docker-buildflags | text | Il comando di compilazione personalizzato Docker per la scansione dello stadio di compilazione. Questo parametro è vuoto per impostazione predefinita. | Facoltativo |
| cra-docker-build-contesto | text | Se specificato, Code Risk Analyzer usa la directory nel parametro path come contesto di compilazione di Docker. | Facoltativo |
| cra-escludi-dipendenze-di-sviluppo | text | Specifica se escludere le dipendenze dev dalla scansione (true o false). Il valore predefinito è false. |
Facoltativo |
| cra-gradle-escludi-configurazioni | text | Specifica le configurazioni di Gradle da cui escludere le dipendenze nella scansione. Ad esempio, runtimeClasspath,testCompileClasspath. Questo parametro è vuoto per impostazione predefinita. |
Facoltativo |
| cra-maven-escludi-ambiti | text | Specifica da quali ambiti Maven escludere le dipendenze durante la scansione. Ad esempio, test,compile. Questo parametro è vuoto per impostazione predefinita. |
Facoltativo |
| cra-nodejs-creare-pacchetto-blocco | text | Abilita la scoperta di Code Risk Analyzer per costruire il file package-lock.json per i repository node.js. Questo parametro è impostato di default su false. |
Facoltativo |
| chiave-api-ibmcloud | SEGRETO | La chiave API di IBM Cloud® che interagisce con lo strumento CLI di ibmcloud. |
Obbligatorio |
| pipeline-dockerconfigjson | SEGRETO | Il file base64-encoded Docker config.json che estrae le immagini da un registro privato. |
Facoltativo |
| onepipeline-dockerconfigjson | SEGRETO | Obsoleto. Il file base64-encoded Docker config.json che estrae le immagini da un registro privato. |
Facoltativo |
| debug-pipeline | selezionare | L'interruttore della modalità di debug della pipeline. | Facoltativo |
| opt-in-cra-correzione automatica | text | Consente a Code Risk Analyzer di eseguire il comando cra auto remediation (true o false). Il valore predefinito è false. Questo comando è supportato solo nella pipeline di conformità
continua. |
Facoltativo |
| opt-in-cra-auto-remediation-enabled-repos | text | Specifica l'elenco dei nomi dei depositi separati da virgole da abilitare per il comando cra auto remediation. Questo parametro viene considerato solo se opt-in-cra-auto-remediation è impostato su true ed è supportato solo nella pipeline di conformità continua. |
Facoltativo |
| opt-in-cra-auto-remediation-force | text | Forza il comando cra auto remediation ad aggiornare i pacchetti anche se la versione principale è diversa dalla versione del pacchetto vulnerabile corrente (true o false). Questo parametro viene considerato
solo se opt-in-cra-auto-remediation è impostato su true ed è supportato solo nella pipeline di conformità continua. |
Facoltativo |
Esempi di script personalizzati per DevSecOps
Se il vostro file Docker richiede ARGS, potete usare il parametro cra-custom-script-path per impostare un singolo ARG come variabile d'ambiente prima di eseguire il comando. Il percorso dello script personalizzato è il percorso
di uno script che risiede nel progetto dell'utente. Ad esempio, se il file Docker utilizza IAM_USER ARG, esportare una variabile d'ambiente all'interno dello script denominata IAM_USER: export IAM_USER='value'.
Se l'ARG richiesto dal file Docker è impostato come proprietà dell'ambiente all'interno della toolchain, si può usare get_env per ottenere il valore. In questo caso, è possibile esportare una variabile d'ambiente all'interno
dello script IAM_USER: export IAM_USER=$(get_env iam_user_environment_property_name). Il task run-cra acquisisce automaticamente queste variabili d'ambiente e le passa ai comandi di compilazione di Docker.
L'esempio seguente mostra come utilizzare la variabile cra-custom-script per esportare la variabile 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)
È inoltre possibile utilizzare il parametro cra-custom-script-path per scenari in cui le versioni dello strumento immagine di base DevSecOps potrebbero essere obsolete, in base al progetto. Ad esempio, è possibile aggiornare comandi
come pip/pip3 per scoprire i pacchetti Python che richiedono una versione successiva di pip.
L'esempio seguente mostra come utilizzare cra-custom-script per aggiornare la versione di 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
Se il file Docker utilizza un'immagine da un registro privato Docker, è possibile usare il parametro cra-custom-script-path per autenticarsi a un registro privato Docker prima di eseguire Code Risk Analyzer e consentire a Code
Risk Analyzer di prelevare l'immagine per la scansione.
L'esempio seguente mostra come utilizzare cra-custom-script per autenticarsi al registro del contenitore ibmcloud:
#!/usr/bin/env bash
if [[ "${PIPELINE_DEBUG:-0}" == 1 ]]; then
trap env EXIT
env | sort
set -x
fi
ibmcloud cr login
Debug dell'analizzatore di rischio del codice in DevSecOps
Per facilitare il debug, è possibile eseguire il Code Risk Analyzer localmente come interfaccia a riga di comando (CLI) sul proprio computer locale. Per informazioni sull'esecuzione del comando ibmcloud cra bom-generate per generare
una distinta base, vedere Distinta base(BOM). Dopo aver generato la distinta base, utilizzare il comando ibmcloud cra cve per elencare eventuali vulnerabilità. Per ulteriori informazioni sull'esecuzione
del comando ibmcloud cra cve, vedere Scansione delle vulnerabilità.
Assicurarsi che il task run-cra non contenga errori. Se il task contiene errori, verificare se la pipeline utilizza la versione corrente di DevSecOps. Se il problema non si risolve controllando la versione di DevSecOps,, gli esempi
seguenti forniscono alcuni errori comuni e le soluzioni proposte.
FAILED
Error executing docker pull cmd: [docker pull us.icr.io/opentoolchain/ibmnode:14ubisecure]
È possibile verificare l'accesso al registro privato. Se non si dispone dell'accesso, è possibile utilizzare il parametro cra-custom-script-path e specificare il percorso di uno script personalizzato che viene eseguito prima che
Code Risk Analyzer si autentichi al registro privato.
FAILED
Error executing docker build cmd for stage-0: exit status 1
Se il file Docker richiede ARGS, il comando docker build per le fasi di compilazione fallisce a causa della mancanza di ARGS. Il sito cra-custom-script-path è necessario per impostare gli ARGS come variabili d'ambiente.
Per ulteriori informazioni sull'impostazione dello script personalizzato, vedere Esempi di script personalizzati per 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
Per impostazione predefinita, il comando Code Risk Analyzer bom-generate costruisce i file Docker dal contesto della posizione del file Docker stesso. Se si desidera costruire i file Docker dal contesto della directory principale
del progetto, usare il parametro cra-docker-build-context per consentire a Code Risk Analyzer di costruire i file Docker da questo contesto.
Rimozione dei dati memorizzati di Code Risk Analyzer
Il plug-in Code Risk Analyzer non memorizza alcun dato del cliente nei suoi database. Tuttavia, le versioni precedenti di Code Risk Analyzer Tekton memorizzavano in modo sicuro i risultati delle scansioni delle vulnerabilità nel suo database.
Per richiedere la rimozione dei dati dei clienti eventualmente memorizzati nel Code Risk Analyzer, contattare l 'assistenza IBM.
FAQ
Ottenete le risposte alle domande più frequenti sull'uso di Code Risk Analyzer CLI.
Come si può determinare il motivo del fallimento della CLI?
Prima di chiamare la CLI di Code Risk Analyzer, impostare la variabile d'ambiente IBMCLOUD_TRACE su true per attivare il log di debug.
export IBMCLOUD_TRACE=true
Osservare le chiamate API e le risposte visualizzate nel log per determinare il motivo esatto del fallimento.
Come si può eseguire il debug di un comando BOM che non riesce a estrarre un'immagine di base da un registro privato.
Assicurarsi di essersi autenticati con il registro in cui risiede l'immagine di base usando il comando ibmcloud cr login o il comando docker login.
Come si può eseguire il debug di un comando BOM che non riesce ad analizzare un file Docker?
- Verificate che il file Docker non abbia problemi eseguendo il comando
docker builde verificando che passi. - Se il file Docker richiede il passaggio di ARG, assicurarsi che ARG sia impostato come variabile d'ambiente. È anche possibile utilizzare la variabile d'ambiente
DOCKERBUILDFLAG. - Autenticare con il registro che contiene le immagini di base.
Vedo risultati falsi positivi inaspettati. Cosa devo fare?
Eseguire la pipeline DevSecOps Continuous Deployment (CD) per generare una SBOM aggiornata nell'armadietto delle prove. In questo modo si potrebbe risolvere una potenziale causa di falsi positivi derivante dalla presenza di un SBOM più vecchio generato dalla pipeline DevSecOps Continuous Compliance (CC).
Perché la gravità della segnalazione o del problema è diversa da quella del link di vulnerabilità associato?
Poiché la nostra fonte di informazioni sulle vulnerabilità è cambiata di recente, potreste notare che la gravità associata a una particolare vulnerabilità è cambiata. Code Risk Analyzer determina la gravità ottimale in base al calcolo di tutte le fonti di vulnerabilità.