Plug-in di Code Risk Analyzer per IBM Cloud
L'interfaccia a riga di comando ( IBM Cloud®, CLI) fornisce comandi per l'analisi del rischio del codice. Puoi utilizzare la CLI IBM Cloud per analizzare le vulnerabilità e la conformità del tuo codice a determinate regole. Code Risk Analyzer è disponibile in tutte le regioni IBM Cloud in cui sono supportate le toolchain.
Utilizzare la CLI per completare le seguenti attività:
- Generare un BOM (Bill of Materials) che elenca le dipendenze e le informazioni di licenze disponibili di tutti i package del sistema operativo di terze parti e dei package dell'applicazione. È possibile generare questo output anche in form CycloneDX-specific.
- Rilevare le vulnerabilità nei pacchetti elencati nel BOM. È inoltre possibile visualizzare il report generato in formato CycloneDX-specific, oppure utilizzare la correzione automatica delle vulnerabilità per le applicazioni Node.js, Maven o Gradle (Groovy).
- Analizzare un piano Terraform per la conformità con determinate regole.
- Analizza i file Kubernetes per la conformità con alcune regole.
A partire dal gennaio 2024, Code Risk Analyzer utilizza i dati di vulnerabilità forniti dal progetto open source Clair invece dei dati della società commerciale Snyk Limited. Non è richiesta alcuna azione specifica da parte dell'utente come risultato di questa modifica. Tuttavia, è possibile osservare alcune differenze nei dettagli dei CVE riportati da Code Risk Analyzer.
Contenuto supportato
Code Risk Analyzer supporta i linguaggi Java™, Node.js, Pythone Go. La seguente tabella elenca e descrive il contenuto supportato da Code Risk Analyzer.
Contenuti | Descrizione |
---|---|
Java | Il repo richiede Maven o Gradle per l'automazione della compilazione. Maven utilizza il fil pom.xml per calcolare le dipendenze, mentre Gradle utilizza il fil build.gradle(.kts) . Code Risk Analyzer può automatizzare
la correzione sia per Maven che per Groovy ( Gradle ). |
Node.js | package-lock.json calcola le dipendenze. Per Node.js, l'analizzatore Code Risk può anche automatizzare la correzione. Assicurarsi che la versione npm installata corrisponda alla versione npm del progetto. |
Python | Le dipendenze vengono calcolate utilizzando il file requirements.txt . |
Golang | Supporta la gestione delle dipendenze go mod e go dep . Per go mod , il file go.sum deve essere presente nel repository. Per go dep , il file Gopkg.lock deve essere
presente nel repository. |
Dockerfile | Vengono considerati i file con il modello Dockerfile nel repository. Per le immagini del contenitore, sono supportati Debian, Red Hat Enterprise Linux®, Alpinee Ubuntu Linux distros. |
Kubernetes | Vengono considerati i file con suffisso .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 suffisso .yaml e .yml . Il valore kind deve essere impostato su NetworkPolicy , GlobalNetworkPolicy , Profile , NetworkSet ,
GlobalNetworkSet o HostEndpoint . |
Terraform | Il file del piano Terraform deve essere generato utilizzando IBM Cloud come provider Terraform. |
Code Risk Analyzer esamina le dipendenze del codice sorgente e delle immagini nei repository per rilevare eventuali vulnerabilità. La seguente tabella mostra le origini delle informazioni sulle vulnerabilità che Code Risk Analyzer consulta per diversi tipi di dipendenze.
Dipendenza | Versioni supportate | Origine delle informazioni particolari di sicurezza |
---|---|---|
Immagine Alpine | Tutte le versioni stabili con supporto di sicurezza del fornitore. | Alpine SecDB database. |
Immagine Debian | Tutte le versioni stabili con supporto di sicurezza del fornitore.
I CVE su pacchetti binari associati al Debian |
Debian Security Bug Tracker. |
GoogleContainerTools immagine senza distorsioni | Tutte le versioni stabili con supporto di sicurezza del fornitore. | GoogleContainerTools senza disturbi |
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. |
Immagine Ubuntu | 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 rilevare vulnerabilità sui package di applicazioni che non utilizzano uno schema di controllo delle versioni, come major.minor.patch
. Ad esempio, le versioni pre - release o le versioni che contengono
metadati di build non sono supportate.
Prerequisiti
-
Installa la CLI IBM Cloud. Vedi Scarica la CLI IBM Cloud per istruzioni.
-
Installare il plug-in CLI di Code Risk Analyzer eseguendo il seguente comando:
ibmcloud plugin install cra
-
Assicurati di poter accedere a una toolchain in una delle regioni supportate. Non è necessario che la toolchain disponga di strumenti. Per ulteriori informazioni sulle toolchain, vedi Creazione di una toolchain da un'applicazione.
-
Specifica l'ID toolchain impostando la variabile di ambiente
TOOLCHAIN_ID
:
export TOOLCHAIN_ID=e22195a5-11e3-44ba-9533-e7c18a3a61a7
- Accedi a una regione specifica di IBM Cloud immettendo il seguente comando, dove
[region]
è la regione in cui è stata creata la toolchain.
ibmcloud login -r [region]
- Opzionalmente, per un maggiore controllo e sicurezza dei dati quando si utilizza la CLI, è possibile utilizzare percorsi privati verso gli endpoint di IBM Cloud. Devi prima abilitare il routing e l'inoltro virtuali nel tuo account, quindi puoi abilitare l'uso di endpoint di servizi privati di IBM Cloud. Per ulteriori informazioni sulla configurazione dell'account per supportare l'opzione di connettività privata, vedere Abilitazione di VRF e endpoint di servizio.
Utilizzare il seguente comando per accedere a un endpoint privato dove [region]
è la regione in cui è stato creato il toolchain.
ibmcloud login -a private.cloud.ibm.com -r [region]
Comandi di utilizzo della CLI
Riceverai notifiche sulla riga di comando quando saranno disponibili aggiornamenti per l' IBM Cloud e CLI e i plug-in. Assicurati di mantenere la tua CLI corrente in modo da poter utilizzare i comandi più recenti. È possibile visualizzare la
versione corrente di tutti i plug-in installati eseguendo il comando ibmcloud plugin list
.
Code Risk Analyzer - Guida
Il seguente comando visualizza l'elenco di comandi di Code Risk Analyzer:
ibmcloud cra --help
Guida del comando Code Risk Analyzer
Il comando seguente 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 alle risorse utente nel percorso di directory specificato ed esegue un rilevamento approfondito per identificare tutte le dipendenze, incluse quelle transitive. Il comando identifica anche le licenze
in cui sono distribuite queste dipendenze. Viene creato un BOM che cattura un'istantanea di tutte le dipendenze. È possibile generare la distinta base nel formato standard o in un formato SBOM ( CycloneDX's ).
ibmcloud cra bom-generate
Requisiti del comando BOM
Il comando bom-generate
dipende da alcuni comandi esterni:
- Se il percorso contiene Dockerfiles, questo comando estrae le immagini di base e crea le immagini per ogni fase di build in ogni Dockerfile. In questo scenario, il comando
bom-generate
richiede che i comandiDocker cli
etar
siano disponibili. - Se il percorso contiene file Maven, questo comando utilizza
mvn
per creare un elenco di dipendenze. In questo scenario, il comandobom-generate
richiede che il comandomvn
sia disponibile. - Se il percorso contiene i file Gradle, questo comando utilizza
gradle
per creare un elenco di dipendenze. In questo scenario, il comandobom-generate
richiede che il comandogradle
sia disponibile. - Se il percorso contiene i file Node.js
package-json
e questo comando viene utilizzato per creare un filepackage-lock.json
corrispondente, il comandobom-generate
utilizzanpm
per creare il file package-lock.json. In questo scenario, il comando richiede la disponibilità del comandonpm
. - Se il percorso contiene il file Python requirements.txt, il comando utilizza
pip
per generare le dipendenze del pacchetto. In questo scenario, il comandobom-generate
richiede che il comandopip
sia disponibile. Sono supportati sia Python versione 2 che Python versione 3.
Se stai utilizzando i Dockerfile, assicurati di accedere al registro del contenitore da cui devono essere estratte le immagini di base.
Se il tuo Dockerfile richiede ARGS, imposta un singolo ARG come variabile di ambiente prima di eseguire il comando. Ad esempio, se il Dockerfile sta utilizzando un IAM_USER
ARG, esporta una variabile di ambiente denominata IAM_USER
:
export IAM_USER='value'
. La CLI passa automaticamente queste variabili di ambiente al comando docker build
.
È anche possibile specificare esplicitamente l'indicatore DOCKERBUILDFLAGS
. Per esportare DOCKERBUILDFLAGS
con l'indicatore ARGS Docker, immettere il comando seguente:
export DOCKERBUILDFLAGS="--build-arg IAM_USER --build-arg API_KEY"
Opzioni del comando BOM
La seguente tabella elenca le opzioni del comando che possono essere utilizzate per creare un BOM con il comando bom-generate
.
Opzioni comando | Obbligatorio o facoltativo | Descrizione |
---|---|---|
--path |
Obbligatorio | Il percorso della directory del progetto da sottoporre a scansione. |
-r , --report |
Obbligatorio | Il nome file in cui memorizzare il report BOM. |
-a , --asset-type |
Facoltativo | I controlli di sicurezza da eseguire (app, immagine, os, tutto). Per impostazione predefinita, questa opzione è impostata su " all ". L'opzione apps viene utilizzata per limitare il rilevamento ai pacchetti
dell'applicazione. L'opzione image viene utilizzata per limitare il rilevamento alle immagini di base utilizzate nei Dockerfile. L'opzione os viene utilizzata per limitare il rilevamento per creare le fasi
solo nei Dockerfile. È possibile specificare più valori utilizzando una virgola per delimitare i valori, ad esempio -a os,image,apps . |
-p , --prev-report |
Facoltativo | Utilizzare il prospetto BOM precedente per velocizzare il comando. Ad esempio, se un Dockerfile non è stato aggiornato da quando è stato generato l'ultimo report, il comando ignora il rilevamento dei pacchetti da tale Dockerfile. 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 path come contesto di build Docker durante la scansione della fase di build. |
-o , --output |
Facoltativo | Selezionare il formato del report BOM. È possibile generare l'output del formato sia in formato BOM standard (standard ) che in formato SBOM ( CycloneDX's ) (cyclonedx ). Il valore predefinito è standard .
È possibile archiviare entrambi i formati inserendo ciascun formato separato da una virgola senza spazi. |
-f , --dockerbuildflags |
Facoltativo | Personalizza il comando di build Docker per la scansione della fase di creazione. Invece di utilizzare questo flag della riga comandi, è possibile specificare il valore in una variabile di ambiente denominata DOCKERBUILDFLAGS .
Per impostazione predefinita, questa opzione di comando è impostata su " '' ". Se si utilizza questa opzione, assicurarsi che sia l'ultimo indicatore fornito al comando. |
-d , --dockerfilepattern |
Facoltativo | Il pattern per identificare il Dockerfile nel repository. |
-g , --gradle.excludeconfigurations |
Facoltativo | Escludi le configurazioni Gradle, ad esempio: runtimeClasspath,testCompileClasspath . Per impostazione predefinita, questa opzione di comando è impostata su " '' ". |
-l , --gradleprops |
Facoltativo | Personalizza il comando Gradle con le propriet ... per la scansione della dipendenza Gradle. |
-m , --maven.excludescopes |
Facoltativo | Escludere gli ambiti Maven, ad esempio: test,compile . Esempio: 'test, compile'. Per impostazione predefinita, questa opzione di comando è impostata su " '' ". |
-n , --nodejs.createpackagelock |
Facoltativo | Abilita l'attività per creare il file package-lock.json per progetti node.js. |
--region |
Facoltativo | La regione ibmcloud in cui si trova la toolchain. |
--toolchainid |
Facoltativo | L'ID toolchain di destinazione da utilizzare. |
-v , --verbose |
Facoltativo | Abilitare i messaggi di log dettagliati. |
Ignorare i file
Se il percorso contiene il file .cra/.fileignore
, i file specificati nel file .fileignore
non vengono sottoposti a scansione per le dipendenze. Il file .fileignore
deve seguire le regole dei file .gitignore
. Simile a un file .gitignore
, il file .fileignore
può includere commenti, directory da ignorare, file da ignorare e altri modelli.
Il seguente file .fileignore
di esempio mostra come escludere gli script bash, node_modules e 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 più contesti di compilazione dell' Docker
Quando si lavora con più Dockerfile all'interno di un singolo progetto, è possibile definire contesti di compilazione separati per ogni Dockerfile. Ciò può essere ottenuto utilizzando un file " .cra/.dockerbuildcontext
",
che è un file JSON che mappa i percorsi Dockerfile ai loro contesti di costruzione corrispondenti.
Se nella directory del progetto è presente un file .cra/.dockerbuildcontext
, i comandi di compilazione CRA Docker utilizzeranno i percorsi specificati in questo file come contesti di compilazione per i Dockerfile associati. I
tasti nell'oggetto JSON rappresentano i percorsi relativi ai Dockerfile, mentre i valori specificano i percorsi relativi ai rispettivi contesti di compilazione.
Ecco un esempio di file .dockerbuildcontext
che definisce diversi contesti di compilazione per più Dockerfile:
{
"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
prevede un BOM in formato standard
come input e rileva le vulnerabilità nei pacchetti dell'applicazione e nei pacchetti del sistema operativo elencati nel BOM. Sulla base della ricca intelligence
delle minacce ricavata da più fonti di CVE (Common Vulnerabilities and Vulnerabilities), vengono fornite raccomandazioni di correzione mirate. Code Risk Analyzer può anche eseguire la correzione automatica solo sui pacchetti vulnerabili per
applicazioni basate su Node.js. È inoltre possibile generare questo report nel formato standard o nel formato VEX ( CycloneDX's ).
ibmcloud cra vulnerability-scan
Opzioni del comando di scansione vulnerabilità
La seguente tabella elenca le opzioni per l'utilizzo del comando vulnerability-scan
.
Opzioni comando | Obbligatorio o facoltativo | Descrizione |
---|---|---|
-b , --bom |
Obbligatorio | Il percorso file del BOM generato utilizzando il comando bom-generate . Questo BOM deve essere in formato standard . |
-a , --autofix |
Facoltativo | Corregge specifici tipi di vulnerabilità dell'applicazione. Questa opzione è disponibile solo per le applicazioni Node.js, Maven e Gradle. |
-f , --commentfile |
Facoltativo | Specifica il file in cui viene creato il report di ribasso. Questo comando è disponibile solo con autofix . |
-c , --cveignore |
Facoltativo | Il percorso file del file CVE Ignore che contiene l'elenco di CVE da ignorare. |
-e , --excludedev |
Facoltativo | Specifica che non si desidera che il comando notifichi i CVE per le dipendenze di sviluppo. |
--force |
Facoltativo | Forza un aggiornamento per i pacchetti del nodo di livello superiore, anche quando la versione principale è diversa. Questo comando è disponibile solo con autofix . |
--include-nofix |
Facoltativo | Includere o escludere la segnalazione di CVE che non hanno correzioni note. Per impostazione predefinita, questa opzione è impostata su " app ". L'opzione app viene utilizzata per includere solo i CVE
del pacchetto app senza correzioni. L'opzione os viene utilizzata per includere solo i CVE del package del sistema operativo senza correzioni. L'opzione all viene utilizzata per includere i CVE di app e di
package del sistema operativo senza correzioni. L'opzione none viene utilizzata per escludere i CVE di app e package del sistema operativo senza correzioni. |
--path |
Obbligatorio se --autofix è abilitato |
Il percorso della directory del progetto da sottoporre a scansione. Questo comando è disponibile solo con autofix . |
--region |
Facoltativo | La regione ibmcloud per la toolchain. |
-r , --report |
Facoltativo | Il percorso del report generato. |
-o , --output |
Facoltativo | Seleziona il formato del prospetto CVE. CycloneDX's È possibile generare l'output in formato CVE standard (standard ) o in formato VEX (cyclonedx ). Il valore predefinito è standard . |
-s , --strict |
Facoltativo | Risulta in un errore del comando (stato uscita 2) quando vengono rilevate delle vulnerabilità. |
--toolchainid |
Facoltativo | L'ID della catena di utensili di destinazione. |
Vulnerabilità ignorate
Se viene specificato il parametro -c
o --cveignore
, il comando ricerca tale file e non riporta i CVE specificati nel file. È possibile configurare i CVE in modo che li omettano indefinitamente fino a quando non è
disponibile una correzione o fino a una data di scadenza specificata.
Il seguente esempio mostra uno schema JSON per il file .cveignore
:
[
{
"cve": "string",
"alwaysOmit": "bool",
"untilRemediationAvailable": "bool",
"expiration": "string"
}
]
Le seguenti proprietà sono supportate per ogni voce del file .cveignore
:
- cve- La vulnerabilità da omettere. Il valore di questa proprietà è un ID CVE.
- alwaysOmit- Se questa proprietà è impostata su
true
, la vulnerabilità viene omessa fino a quando non viene modificata. Questa proprietà ha la precedenza su altri valori di proprietà. - untilRemediationAvailable- Se questa proprietà è impostata su "
true
", la vulnerabilità viene omessa fino a quando non è disponibile un percorso di riparazione. Se una correzione diventa disponibile, 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
true
e la data di scadenza non viene raggiunta, la vulnerabilità viene omessa. Se viene raggiunta la data di scadenza, la vulnerabilità non viene omessa e viene visualizzato un messaggio. Utilizzare il formato ora RFC3339 (yyyy-MM-ddTHH:mm:ss[+-]Z
) per definire questa proprietà.
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 spiega
il motivo. Se viene omessa una vulnerabilità definita nel file .cveignore
, non viene visualizzata alcuna registrazione individuale. Il numero di omissioni e un elenco di ID vulnerabilità, con il nome pacchetto, omessi vengono
registrati dopo il completamento di un report.
Il seguente frammento di codice visualizza 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 i controlli di configurazione sui manifest di distribuzione Kubernetes.
ibmcloud cra deployment-analyze
Questo comando fornisce una guida prescrittiva per stabilire una postura di configurazione sicura per i contenitori Docker. Code Risk Analyzer utilizza queste configurazioni di protezione come punto di riferimento e identifica i controlli di
sicurezza per eseguire il check-in delle risorse di distribuzione, come i file .yaml
, per applicazioni Kubernetes. Questo comando fornisce anche valutazioni del rischio per ogni errore di controllo.
La tabella seguente elenca i controlli che è possibile implementare in DevSecOps,, come identificato da CIS Docker 1.13.0. Vengono aggiunti ulteriori controlli in base ai riferimenti open source di Kubernetes KCCSS(Common Configuration Scoring System).
ID | Regola | Rischio |
---|---|---|
5.3 | Assicurarsi che i contenitori non abbiano la capacità CAP_SYS_ADMIN . |
Alto |
5.3 | Assicurarsi che i contenitori non abbiano la capacità CAP_NET_RAW . |
Alto |
5.4 | Assicurarsi che i contenitori privilegiati non siano utilizzati. | Alto |
5.5 | Accertarsi che le directory di sistema host sensibili siano montate sui contenitori. | Medio |
5.7 | Assicurarsi che le porte privilegiate non siano associate all'interno dei contenitori. | Basso |
5.9 | Verificare che lo spazio dei nomi di rete non sia condiviso. | Medio |
5.10 | Assicurarsi che l'utilizzo della memoria per il contenitore sia limitato. | Medio |
5.11 | Verificare che la priorità CPU appropriata sia impostata sul contenitore. | Medio |
5.12 | Accertarsi che il file system root del contenitore sia montato in sola lettura. | Medio |
5.15 | Assicurarsi che lo spazio dei nomi del processo host non sia condiviso. | Medio |
5.16 | Verificare che lo spazio dei nomi IPC dell'host non sia condiviso. | Medio |
5.31 | Assicurati che il socket Docker non venga montato all'interno di alcun contenitore. | Alto |
|
Assicurarsi che i contenitori non consentano l'assegnazione non sicura delle risorse CPU. | Medio |
|
Verificare che i contenitori non consentano l'escalation dei privilegi. | Medio |
|
Verificare che i contenitori non espongano parti non sicure di /proc . |
Medio |
|
Verificare che i contenitori non siano esposti tramite una porta host condivisa. | Medio |
Opzioni del comando di distribuzione
La seguente tabella elenca le opzioni di comandi che possono essere utilizzate per il comando deployment-analyze
.
Opzioni comando | Obbligatorio o facoltativo | Descrizione |
---|---|---|
--path |
Obbligatorio | Il percorso della directory del progetto da sottoporre a scansione. |
-r , --report |
Obbligatorio | Il nome file in cui creare il prospetto. |
-f , --fileignore |
Facoltativo | Il percorso del file dell' .fileignore . |
-s , --strict |
Facoltativo | I risultati dell'errore del comando (stato 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
Analizzatore Terraform
Puoi utilizzare il comando terraform-validate
per analizzare un piano Terraform per la conformità prima di applicare il piano a un ambiente. Questo comando analizza il file del piano Terraform specificato per la conformità alle
regole specificate in IBM Cloud® Security and Compliance Center. Questo comando genera un report di conformità.
È possibile specificare un file di politica che elenchi le regole e i parametri da utilizzare per la convalida. Se non viene specificato alcun file di politica, questo comando analizza il piano per la serie di regole predefinita.
ibmcloud cra terraform-validate
Opzioni del comando Terraform
La seguente tabella elenca le opzioni che è possibile utilizzare per il comando terraform-validate
.
Opzioni comando | Obbligatorio o facoltativo | Descrizione |
---|---|---|
-r , --report |
Obbligatorio | Il percorso del report generato. |
-t , --tf-plan |
Obbligatorio | Il percorso del file del piano Terraform di input. |
-p , --policy-file |
Facoltativo | Il percorso file del profilo della politica. Questo indicatore può accettare un profilo Security and Compliance Center V2 o un file JSON personalizzato con una serie di regole Security and Compliance Center. |
-q , --quiet |
Facoltativo | Visualizza solo informazioni riepilogate. |
-s , --strict |
Facoltativo | Risulta in un errore del comando (stato di uscita 2) se le politiche hanno esito negativo. |
-v , --verbose |
Facoltativo | Visualizza l'elenco delle regole Security and Compliance Center dopo l'elenco delle regole non riuscite. |
-a , --attachment-file |
Facoltativo | Questo indicatore accetta un file che ha allegati JSON per Security and Compliance Center V2. Per utilizzare questo indicatore, è necessario specificare un profilo Security and Compliance Center V2 con il flag -p . |
Esempio
I seguenti frammenti di codice mostrano come utilizzare il comando terraform-validate
:
ibmcloud cra terraform-validate --tf-plan TFPLANFILE --report REPORT [--policy-file POLICYFILE] [--quiet] [--region REGION] [--strict] [--toolchainid TOOLCHAINID] [--verbose] [--attachment-file ATTACHMENT_FILE]
ibmcloud cra tf -r report-user-profile.json -t ./tfplan.json -p ./user-profile.json --verbose
File del piano Terraform di esempio per il comando terraform-validate
{
"format_version": "0.2",
"terraform_version": "1.0.2",
"planned_values": {
"root_module": {
"child_modules": [
{
"resources": [
{
"address": "module.instance.ibm_resource_instance.cos_instance",
"mode": "managed",
"type": "ibm_resource_instance",
"name": "cos_instance",
"provider_name": "registry.terraform.io/ibm-cloud/ibm",
"schema_version": 0,
"values": {
"location": "global",
"parameters": null,
"plan": "lite",
"service": "cloud-object-storage",
"timeouts": null
},
"sensitive_values": {
"extensions": {},
"last_operation": {},
"plan_history": [],
"tags": []
}
}
],
"address": "module.instance"
},
{
"resources": [
{
"address": "module.instance_config.ibm_cos_bucket.bad_resource_cos_bucket_missing_all_configuration[0]",
"mode": "managed",
"type": "ibm_cos_bucket",
"name": "bad_resource_cos_bucket_missing_all_configuration",
"index": 0,
"provider_name": "registry.terraform.io/ibm-cloud/ibm",
"schema_version": 0,
"values": {
"activity_tracking": [],
"allowed_ip": null,
"archive_rule": [],
"cross_region_location": null,
"endpoint_type": "public",
"expire_rule": [],
"force_delete": true,
"key_protect": null,
"metrics_monitoring": [],
"region_location": "us-south",
"retention_rule": [],
"single_site_location": null,
"storage_class": "standard",
"timeouts": null
},
"sensitive_values": {
"activity_tracking": [],
"archive_rule": [],
"expire_rule": [],
"metrics_monitoring": [],
"retention_rule": []
}
},
{
"address": "module.instance_config.ibm_cos_bucket.bad_resource_cos_bucket_missing_all_configuration[1]",
"mode": "managed",
"type": "ibm_cos_bucket",
"name": "bad_resource_cos_bucket_missing_all_configuration",
"index": 1,
"provider_name": "registry.terraform.io/ibm-cloud/ibm",
"schema_version": 0,
"values": {
"activity_tracking": [],
"allowed_ip": null,
"archive_rule": [],
"cross_region_location": null,
"endpoint_type": "public",
"expire_rule": [],
"force_delete": true,
"key_protect": null,
"metrics_monitoring": [],
"region_location": "us-south",
"retention_rule": [],
"single_site_location": null,
"storage_class": "standard",
"timeouts": null
},
"sensitive_values": {
"activity_tracking": [],
"archive_rule": [],
"expire_rule": [],
"metrics_monitoring": [],
"retention_rule": []
}
}
],
"address": "module.instance_config"
}
]
}
},
"resource_changes": [
{
"address": "module.instance.ibm_resource_instance.cos_instance",
"module_address": "module.instance",
"mode": "managed",
"type": "ibm_resource_instance",
"name": "cos_instance",
"provider_name": "registry.terraform.io/ibm-cloud/ibm",
"change": {
"actions": [
"create"
],
"before": null,
"after": {
"location": "global",
"parameters": null,
"plan": "lite",
"service": "cloud-object-storage",
"timeouts": null
},
"after_unknown": {
"account_id": true,
"allow_cleanup": true,
"created_at": true,
"created_by": true,
"crn": true,
"dashboard_url": true,
"deleted_at": true,
"deleted_by": true,
"extensions": true,
"guid": true,
"id": true,
"last_operation": true,
"locked": true,
"name": true,
"plan_history": true,
"resource_aliases_url": true,
"resource_bindings_url": true,
"resource_controller_url": true,
"resource_crn": true,
"resource_group_crn": true,
"resource_group_id": true,
"resource_group_name": true,
"resource_id": true,
"resource_keys_url": true,
"resource_name": true,
"resource_plan_id": true,
"resource_status": true,
"restored_at": true,
"restored_by": true,
"scheduled_reclaim_at": true,
"scheduled_reclaim_by": true,
"service_endpoints": true,
"state": true,
"status": true,
"sub_type": true,
"tags": true,
"target_crn": true,
"type": true,
"update_at": true,
"update_by": true
},
"before_sensitive": false,
"after_sensitive": {
"extensions": {},
"last_operation": {},
"plan_history": [],
"tags": []
}
}
},
{
"address": "module.instance_config.ibm_cos_bucket.bad_resource_cos_bucket_missing_all_configuration[0]",
"module_address": "module.instance_config",
"mode": "managed",
"type": "ibm_cos_bucket",
"name": "bad_resource_cos_bucket_missing_all_configuration",
"index": 0,
"provider_name": "registry.terraform.io/ibm-cloud/ibm",
"change": {
"actions": [
"create"
],
"before": null,
"after": {
"activity_tracking": [],
"allowed_ip": null,
"archive_rule": [],
"cross_region_location": null,
"endpoint_type": "public",
"expire_rule": [],
"force_delete": true,
"key_protect": null,
"metrics_monitoring": [],
"region_location": "us-south",
"retention_rule": [],
"single_site_location": null,
"storage_class": "standard",
"timeouts": null
},
"after_unknown": {
"activity_tracking": [],
"archive_rule": [],
"bucket_name": true,
"crn": true,
"expire_rule": [],
"id": true,
"metrics_monitoring": [],
"resource_instance_id": true,
"retention_rule": [],
"s3_endpoint_private": true,
"s3_endpoint_public": true
},
"before_sensitive": false,
"after_sensitive": {
"activity_tracking": [],
"archive_rule": [],
"expire_rule": [],
"metrics_monitoring": [],
"retention_rule": []
}
}
},
{
"address": "module.instance_config.ibm_cos_bucket.bad_resource_cos_bucket_missing_all_configuration[1]",
"module_address": "module.instance_config",
"mode": "managed",
"type": "ibm_cos_bucket",
"name": "bad_resource_cos_bucket_missing_all_configuration",
"index": 1,
"provider_name": "registry.terraform.io/ibm-cloud/ibm",
"change": {
"actions": [
"create"
],
"before": null,
"after": {
"activity_tracking": [],
"allowed_ip": null,
"archive_rule": [],
"cross_region_location": null,
"endpoint_type": "public",
"expire_rule": [],
"force_delete": true,
"key_protect": null,
"metrics_monitoring": [],
"region_location": "us-south",
"retention_rule": [],
"single_site_location": null,
"storage_class": "standard",
"timeouts": null
},
"after_unknown": {
"activity_tracking": [],
"archive_rule": [],
"bucket_name": true,
"crn": true,
"expire_rule": [],
"id": true,
"metrics_monitoring": [],
"resource_instance_id": true,
"retention_rule": [],
"s3_endpoint_private": true,
"s3_endpoint_public": true
},
"before_sensitive": false,
"after_sensitive": {
"activity_tracking": [],
"archive_rule": [],
"expire_rule": [],
"metrics_monitoring": [],
"retention_rule": []
}
}
}
],
"configuration": {
"provider_config": {
"ibm": {
"name": "ibm",
"version_constraint": "1.25.0",
"expressions": {
"ibmcloud_api_key": {
"constant_value": "BYwB2M3TJdDMlCpHaxaWilNHVod05TVkqjIbGqrlm9Iz"
}
}
},
"module.instance:ibm": {
"name": "ibm",
"version_constraint": "1.25.0",
"module_address": "module.instance",
"expressions": {
"ibmcloud_api_key": {
"constant_value": "BYwB2M3TJdDMlCpHaxaWilNHVod05TVkqjIbGqrlm9Iz"
}
}
},
"module.instance_config:ibm": {
"name": "ibm",
"version_constraint": "1.25.0",
"module_address": "module.instance_config"
}
},
"root_module": {
"module_calls": {
"instance": {
"source": "./instance_module",
"module": {
"outputs": {
"cos_instance_id": {
"expression": {
"references": [
"ibm_resource_instance.cos_instance.id",
"ibm_resource_instance.cos_instance"
]
}
}
},
"resources": [
{
"address": "ibm_resource_instance.cos_instance",
"mode": "managed",
"type": "ibm_resource_instance",
"name": "cos_instance",
"provider_config_key": "instance:ibm",
"expressions": {
"location": {
"constant_value": "global"
},
"name": {},
"plan": {
"constant_value": "lite"
},
"service": {
"constant_value": "cloud-object-storage"
}
},
"schema_version": 0
}
]
}
},
"instance_config": {
"source": "./instance_config_module",
"expressions": {
"cos_instance_id": {
"references": [
"module.instance.cos_instance_id",
"module.instance"
]
}
},
"module": {
"resources": [
{
"address": "ibm_cos_bucket.bad_resource_cos_bucket_missing_all_configuration",
"mode": "managed",
"type": "ibm_cos_bucket",
"name": "bad_resource_cos_bucket_missing_all_configuration",
"provider_config_key": "instance_config:ibm",
"expressions": {
"bucket_name": {},
"region_location": {
"constant_value": "us-south"
},
"resource_instance_id": {
"references": [
"var.cos_instance_id"
]
},
"storage_class": {
"constant_value": "standard"
}
},
"schema_version": 0,
"count_expression": {
"constant_value": 2
}
}
],
"variables": {
"cos_instance_id": {
"description": "COS Instance ID"
}
}
},
"depends_on": [
"module.instance"
]
}
}
}
}
}
Schema del file di profilo SCC V2 di esempio per il comando terraform-validate
{
"title": "User Profile Standard v2 Schema",
"type": "object",
"properties": {
"id": {
"type": "string"
},
"profile_name": {
"type": "string"
},
"profile_version": {
"type": "string"
},
"controls": {
"type": "array",
"items": {
"type": "object",
"properties": {
"control_specifications": {
"type": "array",
"items": {
"type": "object",
"properties": {
"assessment_count": {
"type": "number"
},
"assessments": {
"type": "array",
"items": {
"type": "object",
"properties": {
"assessment_type": {
"type": "string"
},
"assessment_method": {
"type": "string"
},
"assessment_description": {
"type": "string"
},
"assessment_id": {
"type": "string"
},
"parameter_count": {
"type": "number"
},
"parameters": {
"type": "array",
"items": {
"type": "object",
"properties": {
"parameter_name": {
"type": "string"
},
"parameter_display_name": {
"type": "string"
},
"parameter_type": {
"type": "string"
}
}
}
}
}
}
}
}
}
}
}
}
},
"default_parameters": {
"type": "array",
"items": {
"type": "object",
"properties": {
"assessment_type": {
"type": "string"
},
"assessment_id": {
"type": "string"
},
"parameter_name": {
"type": "string"
},
"parameter_default_value": {
"type": "string"
},
"parameter_display_name": {
"type": "string"
},
"parameter_type": {
"type": "string"
}
}
}
}
},
"required": ["default_parameters", "controls", "profile_name", "profile_version"]
File di profilo classico SCC V2 di esempio per il comando terraform-validate
È possibile aggiungere il prefisso rule-
all'ID regola.
{
"schema_version": "2.0",
"scc_rules": [
{
"scc_rule_id": "548a3321-6a39-400c-9c2d-0df9a13afd02"
},
{
"scc_rule_id": "726ec899-505e-4de9-ac1b-9578ef62f89f"
},
{
"scc_rule_id": "962e2bde-2a4f-4e07-a352-ce17708b1e85"
},
{
"scc_rule_id": "9653d2c7-6290-4128-a5a3-65487ba40370"
},
{
"scc_rule_id": "d8d13c3e-5ca0-46c5-a055-2475852c4ec6"
},
{
"scc_rule_id": "0f7e7e60-a05c-43a7-be74-70615f14a342"
},
{
"scc_rule_id": "979fd713-d39f-4efe-ba02-bf6fc07e57bb"
},
{
"scc_rule_id": "rule-e76a3a81-b0d0-41fc-947d-13dc9cfff379"
},
{
"scc_rule_id": "caf5e45d-ccc8-4e35-b124-e1b4c8bcab71"
},
{
"scc_rule_id": "rule-1edc74ae-0dad-4ea1-865d-89e3214d240f"
},
{
"scc_rule_id": "064d9004-8728-4988-b19a-1805710466f6"
},
{
"scc_rule_id": "rule-caf5e45d-ccc8-4e35-b124-e1b4c8bcab71"
}
],
"scc_parameters": {
"ibm_minimum_password_length": 12,
"ibm_password_reuse_prevention": 4,
"allowed_admins_per_account": "10",
"api_keys_rotated_days": 90,
"account_owner_last_login_days": 30,
"no_of_admins_for_iam": 3,
"no_of_service_id_admins_for_iam": 3,
"no_of_managers_for_iam": 0,
"no_of_service_id_managers_for_iam": 0,
"iam_service_ids_max_count": 3,
"ssh_port": 25,
"rdp_port": 3390,
"no_pre_shared_key_characters": 30,
"dns_port": 60,
"vm_nic_count": 1,
"no_of_admins_for_container_registry ": 3,
"no_of_service_id_admins_for_container_registry": 3,
"no_of_managers_for_container_registry": 0,
"no_of_service_id_managers_for_container_registry": 0,
"access_tokens_expire": 120
}
}
Regole Security and Compliance Center
Terraform Analyzer supporta le seguenti regole Security and Compliance Center:
rule-f8722625-1968-4d7a-93cb-4b0f8da726da - Check whether IBMid password policy requires at least one uppercase letter
rule-789cb35b-5bdf-46d3-8b59-e1377e3b211c - Check whether IBMid password policy requires at least one lowercase letter
rule-81b36ae4-0f15-41c7-adac-fa9586ff46ab - Check whether IBMid password policy requires at least one number
rule-979fd713-d39f-4efe-ba02-bf6fc07e57bb - Check whether IBMid password policy requires minimum length of 12 characters
rule-e76a3a81-b0d0-41fc-947d-13dc9cfff379 - Check whether IBMid password policy prevents password reuse below the minimum of #
rule-759d504b-9eed-4602-8b5b-7244bf3f5690 - Check whether IBMid password can contain only printable ASCII characters (in the range 33 - 126)
rule-bcbd57e1-3cdc-4b6d-820b-2c63bc777e19 - Check whether IBMid password policy contains spaces or any of the following characters: ;:("?)<>
rule-fa06f6f2-b98e-49ac-aa55-d57de9e320d3 - Check whether IBMid uses a password meter that coaches users to create strong passwords that exceed the minimum requirements
rule-548a3321-6a39-400c-9c2d-0df9a13afd02 - Check whether IAM roles are used to create IAM policies for IBM resources
rule-726ec899-505e-4de9-ac1b-9578ef62f89f - Check whether a support role has been assigned in IAM to manage cases in the IBM Cloud Support Center
rule-962e2bde-2a4f-4e07-a352-ce17708b1e85 - Check whether API keys are not created in IAM during the initial setup of IAM users
rule-61fa114a-2bb9-43fd-8068-b873b48bdf79 - Check whether IAM users are attached to at least one access group
rule-4d86c074-097e-4ff3-a763-ccff128388e2 - Check whether multifactor authentication (MFA) is enabled at the account level
rule-0704e840-e443-4781-b9be-ec57469d09c1 - Check whether permissions for API key creation are limited and configured in IAM settings for the account owner
rule-d61c20c9-c0be-443b-af0c-0d900601e154 - Check whether Cloud Object Storage public access is disabled in IAM settings (not applicable to ACLs managed using S3 APIs)
rule-0244c010-fde6-4db3-95aa-8952bd292ac3 - Check whether permissions for service ID creation are limited and configured in IAM settings for the account owner
rule-ed64fa73-81e5-4920-8519-acfad845dd6c - Check whether Identity and Access Management (IAM) is enabled with audit logging
rule-b2232217-34a6-4fe8-a791-5903f1cc89ca - Check whether Cloud Shell is disabled in account settings
rule-10de7433-19e4-40a7-aebf-eddf1f75a68c - Check whether Cloud Object Storage is enabled with encryption
rule-7c86bb59-d677-422d-875c-0259053fad20 - Check whether Cloud Object Storage is enabled with customer-managed encryption and Bring Your Own Key (BYOK)
rule-222d6531-1fc7-4485-8771-35eb46c78877 - Check whether Cloud Object Storage is accessible only through HTTPS
rule-7c52a1ce-26cd-4cde-baa7-3bfb3703cf74 - Check whether Cloudant is accessible only through HTTPS
rule-f6197ee2-31bf-4d73-aacd-316c41a48df3 - Check whether Cloud Object Storage is accessible only by using private endpoints
rule-8cbd597c-7471-42bd-9c88-36b2696456e9 - Check whether Cloud Object Storage network access is restricted to a specific IP range
rule-c97259ee-336d-4c5f-b436-1868107a9558 - Check whether Cloud Object Storage is enabled with customer-managed encryption and Keep Your Own Key (KYOK)
rule-ef1db4bb-2490-48a9-883c-a20fea3db0e5 - Check whether Databases for MongoDB is enabled with encryption
rule-7f7ca588-9412-40a9-9bd8-0e5d19141e98 - Check whether Databases for MongoDB is enabled with customer-managed encryption and Bring Your Own Key (BYOK)
rule-77b99b6f-51dc-4290-b20c-7003941c7a46 - Check whether Databases for MongoDB is accessible only through HTTPS
rule-7b210b18-f849-4fa8-bd92-8e47921de51d - Check whether Databases for MongoDB is accessible only by using private endpoints
rule-c58bb2b9-7942-45ab-b9d4-e39c8430f570 - Check whether Databases for Redis is enabled with encryption
rule-e3cad136-17a8-4227-b8af-0be609da1da0 - Check whether Databases for Redis is enabled with customer-managed encryption and Bring Your Own Key (BYOK)
rule-90e3908d-27c3-4050-bb12-413dfc606f5c - Check whether Databases for Redis is accessible only through HTTPS
rule-c48dfb73-ede0-4ebf-b912-214379cd4ce7 - Check whether Databases for Redis is accessible only by using private endpoints
rule-ac09e136-8581-416a-a865-e9fc35a758be - Check whether Databases for Elasticsearch is enabled with encryption
rule-871594ca-0a70-492b-8a42-6f9474445f01 - Check whether Databases for Elasticsearch is enabled with customer-managed encryption and Bring Your Own Key (BYOK)
rule-47ca5017-27e9-4b8b-95d3-c2529271fbb1 - Check whether Databases for Elasticsearch is accessible only through HTTPS
rule-026e6d36-6a15-4623-846d-cab6f3b789d9 - Check whether Databases for Elasticsearch is accessible only by using private endpoints
rule-d634caeb-e5a6-467a-a4ac-8da8fd39f9ef - Check whether Databases for etcd is enabled with encryption
rule-42612696-2b8e-4fa7-8c17-78f191d2e1a0 - Check whether Databases for etcd is accessible only through HTTPS
rule-458decc2-a081-4c49-8f31-eeaf4833d8c8 - Check whether Databases for etcd is accessible only by using private endpoints
rule-4d7e56d6-f657-418c-9e49-6d248b2cf5a6 - Check whether Databases for PostgreSQL is enabled with encryption
rule-041ff30b-7167-4411-985d-5ad32ab6f850 - Check whether Databases for PostgreSQL is enabled with customer-managed encryption and Bring Your Own Key (BYOK)
rule-872db4fc-2f7c-4ba0-ace7-dc468f6813c7 - Check whether Databases for PostgreSQL is accessible only through HTTPS
rule-094495cf-c092-4dcb-96b8-3654c4bcf787 - Check whether Databases for PostgreSQL is accessible only by using private endpoints
rule-beb7b289-706b-4dc0-b01d-b1d15d4331e3 - Check whether Databases for MongoDB network access is restricted to a specific IP range
rule-04d856f1-68ce-4cba-b800-ba49f3c4f1a1 - Check whether Databases for Redis network access is restricted to specific IP range
rule-b5c06228-3f38-4d98-837f-2fe10d6ff9d5 - Check whether Databases for Elasticsearch network access is restricted to a specific IP range
rule-18540c4e-b96d-4ab9-a619-d541cc5a2824 - Check whether Databases for etcd network access is restricted to a specific IP range
rule-9b2d8054-bc93-44fd-901b-91f677287e84 - Check whether Databases for PostgreSQL network access is restricted to a specific IP range
rule-f6b7a692-8e48-4e74-b957-f5d591a7a15d - Check whether Key Protect has high availability
rule-d0725d07-27e6-4079-a3bc-746d5ccae00f - Check whether Hyper Protect Crypto Services instance is enabled with a dual authorization deletion policy
rule-da567ec9-8e24-4c65-993b-ad290bfdb855 - Check whether Cloud Object Storage buckets are enabled with IBM Activity Tracker
rule-0fb54bb2-773b-4cec-81b0-1ca7d8049ba0 - Check whether Cloud Object Storage buckets are enabled with IBM Cloud Monitoring
rule-5910ed25-7ad7-42d0-8e42-905df0123346 - Check whether IBM Activity Tracker is provisioned in multiple regions in an account
rule-d592e06a-8756-4efc-a401-1ec215168f48 - Check whether IBM Activity Tracker trails are integrated with LogDNA logs
rule-c98fab05-5119-451a-b100-35df840d2326 - Check whether IBM Activity Tracker logs are encrypted at rest
rule-1cdad315-c39e-4d7e-99ef-8af88ba410c1 - Check whether Cloud Internet Services (CIS) has web application firewall enabled
rule-564ed93b-1927-4562-8a90-fbae173cdee1 - Check whether Cloud Internet Services (CIS) has DDoS protection enabled
rule-7c5f6385-67e4-4edf-bec8-c722558b2dec - Check whether Virtual Private Cloud (VPC) security groups have no inbound rules that specify source IP 0.0.0.0/0 to SSH port
rule-9653d2c7-6290-4128-a5a3-65487ba40370 - Check whether Virtual Private Cloud (VPC) security groups have no inbound rules that specify source IP 0.0.0.0/0 to RDP port
rule-96527f89-1867-4581-b923-1400e04661e0 - Check whether Virtual Private Cloud (VPC) has no rules in the default security group
rule-4f477e09-c9aa-4bfb-a6b1-eaeaca15c06a - Check whether Virtual Private Cloud (VPC) security groups have no inbound ports open to the internet (0.0.0.0/0)
rule-9407e5a8-ec51-4228-a01a-0f32364224a6 - Check whether Virtual Private Cloud (VPC) security groups have no outbound ports open to the internet (0.0.0.0/0)
rule-65f42d91-d537-4532-a2c8-c5cd377500a7 - Check whether all virtual server instances have at least one Virtual Private Cloud (VPC) security group attached
rule-9e16b8a4-1255-474e-a8a3-afed67de2627 - Check whether all network interfaces of a virtual server instance have at least one Virtual Private Cloud (VPC) security group attached
rule-9ecf7e84-aa51-42ad-875e-58e9522a5e65 - Check whether VPN for VPC has Internet Key Exchange (IKE) policy encryption that is not set to "triple_des"
rule-b4c58eff-4d19-4d33-840e-56b2ac76585a - Check whether VPN for VPC has Internet Key Exchange (IKE) policy authentication that is set to minimum "sha256"
rule-a8a69cd6-a902-4144-b652-8be68600a029 - Check whether VPN for VPC has a Diffie-Hellman group set to at least group #
rule-f98453ba-ebb9-4d96-aa13-09ef808fb4ba - Check whether VPN for VPC has IPsec policy encryption that is not set to "triple_des"
rule-09298b01-e2c5-43f1-a1b4-0b413fe4f998 - Check whether VPN for VPC has IPsec policy authentication that is set to minimum "sha256"
rule-115eb377-e256-459d-9e17-a868e128bd0c - Check whether VPN for VPC has an IPsec policy that does not have Perfect Forward Secrecy (PFS) disabled
rule-d8d13c3e-5ca0-46c5-a055-2475852c4ec6 - Check whether VPN for VPC authentication is configured with a strong pre-shared key with at least # characters
rule-53895d42-9190-47d8-9a70-0c1ebea5f7c7 - Check whether VPN for VPC has a Dead Peer Detection policy that is set to "restart"
rule-200dc6e7-96f1-49a9-9999-7e4645dc7ea6 - Check whether Application Load Balancer for VPC has public access disabled
rule-0e5151b1-9caf-433c-b4e5-be3d505e458e - Check whether Application Load Balancer for VPC is configured with multiple members in the pool
rule-bfc9d304-a086-43c0-b3ba-d0f101f616df - Check whether Application Load Balancer for VPC listener is configured with default pool
rule-8c923215-afdc-41b1-886c-64ce78741f8c - Check whether Application Load Balancer for VPC has health check configured when created
rule-d491a44c-e7bc-46bc-af07-231da0bb6501 - Check whether Application Load Balancer for VPC has a health check protocol that is either HTTP or HTTPS
rule-cb1180b7-2f8c-40ba-b2dd-207bee6bc17f - Check whether Application Load Balancer for VPC pool uses the HTTPS protocol for HTTPS listeners
rule-65b61a0f-ffdb-41ba-873d-ad329e7fc0ee - Check whether Application Load Balancer for VPC is configured to convert HTTP client requests to HTTPS
rule-d544f217-3723-4376-b3aa-037c5f201e8d - Check whether Application Load Balancer for VPC uses HTTPS (SSL & TLS) instead of HTTP
rule-773385ab-4654-4088-883d-fe9d58bc4ecb - Check whether Block Storage for VPC is enabled with customer-managed encryption and Bring Your Own Key (BYOK)
rule-8ffe83cb-0ba1-47d6-a1e0-53e9932a5691 - Check whether Block Storage for VPC is enabled with customer-managed encryption and Keep Your Own Key (KYOK)
rule-f87929f7-0787-4749-a1ce-35c1f2320401 - Check whether data disks are encrypted with customer-managed keys
rule-390aa9af-c497-4ebc-9958-d572a5b7be3d - Check whether unattached disks are encrypted with customer-managed keys
rule-0f7e7e60-a05c-43a7-be74-70615f14a342 - Check whether Security Groups for VPC contains no outbound rules in security groups that specify source IP 8.8.8.8/32 to DNS port
rule-c4d50b06-9331-4f5c-a3f8-9fe8060efc9b - Check whether Security Groups for VPC doesn't allow PING for the default security group
rule-936158a6-40ff-48ca-91a1-f184aa9b0dff - Check whether Virtual Private Cloud (VPC) classic access is disabled
rule-64c0bea0-8760-4a6b-a56c-ee375a48961e - Check whether Virtual Private Cloud (VPC) has no public gateways attached
rule-64e628f7-4f3a-4c0e-85a4-40300bafe856 - Check whether Virtual Private Cloud (VPC) network access control lists don't allow ingress from 0.0.0.0/0 to any port
rule-f9137be8-2490-4afb-8cd5-a201cb167eb2 - Check whether Virtual Private Cloud (VPC) network access control lists don't allow ingress from 0.0.0.0/0 to SSH port
rule-f1e80ee7-88d5-4bf2-b42f-c863bb24601c - Check whether Virtual Private Cloud (VPC) network access control lists don't allow ingress from 0.0.0.0/0 to RDP port
rule-faacfd1f-454f-4e60-95d7-8fe01158840d - Check whether Virtual Private Cloud (VPC) network access control lists don't allow egress from 0.0.0.0/0 to any port
rule-c0314fad-f377-465e-9f16-fa5aa3d5ebbe - Check whether Virtual Servers for VPC instance has the minimum # interfaces
rule-17b54156-373a-48f9-b340-a7e47acd87b6 - Check whether Virtual Servers for VPC instance doesn't have a floating IP
rule-1af31459-ec38-4a58-91b0-956a17a38954 - Check whether Virtual Servers for VPC boot volumes are enabled with customer-managed encryption and Bring Your Own Key (BYOK)
rule-4aead0cd-fe26-44f1-b552-8ffdbb86422a - Check whether Virtual Servers for VPC boot volumes are enabled with customer-managed encryption and Keep Your Own Key (KYOK)
rule-a99b5f58-98ef-4208-9a23-e4fa25115d79 - Check whether Virtual Servers for VPC data volumes are enabled with customer-managed encryption and Bring Your Own Key (BYOK)
rule-df7323fd-0b20-493c-89fe-c0b287817c99 - Check whether Virtual Servers for VPC data volumes are enabled with customer-managed encryption and Keep Your Own Key (KYOK)
rule-6970e312-329d-44dc-b683-5ab14acd6a42 - Check whether Virtual Servers for VPC is provisioned from an encrypted image
rule-24e259fb-608e-486f-bb9d-99b78ae0383c - Check whether Virtual Servers for VPC instances are identifable by the workload they are running based on the Auto Scale for VPC instance group definition
rule-250a7311-0cfd-4b43-8987-e5629f8d99ae - Check whether Application Load Balancer for VPC has application port of the workload that is identifiable by the Auto Scale for VPC instance group definition
rule-c2dd768e-9a49-4d6d-8ac5-8fcfb233a7b0 - Check whether Virtual Private Cloud (VPC) has no subnet with public gateway attached
rule-24508beb-c00a-4c6b-bd04-d38dd8cb7d71 - Check whether App ID user data is encrypted
rule-65196a37-ddcc-422d-8096-09955c4b4e5d - Check whether Event Streams is accessible through public endpoints
rule-3b2768e5-d783-4b0c-a47f-81479af34689 - Check whether Event Streams is accessible only by using private endpoints
rule-c471b983-9dc5-4659-8fb1-4d20c9d516cc - Check whether App ID redirect URIs are using HTTPS only
rule-f4d30138-01c1-409d-a469-fa99a23f2fbd - Check whether App ID redirect URIs are not using localhost or 127.0.0.1
rule-6e0c618d-523d-4352-a1d1-12bb9905b914 - Check whether App ID redirect URIs are not using wildcards (*)
rule-1d2287c7-954e-4425-897b-351c30be723c - Check whether App ID Cloud Directory users aren't able to update their own accounts
rule-9786160b-ee91-45ab-b84b-9806541e0fc6 - Check whether App ID Cloud Directory users aren't able to self-sign up to applications
rule-d9247d0e-dce5-4854-849a-4a9033c8fe8d - Check whether App ID anonymous authentication is disabled
rule-9246d682-f7c5-4aac-8751-3947e4f27b0b - Check whether App ID password strength regex is configured
rule-168f8081-dbd6-4cbc-bf19-f9934b39d59c - Check whether App ID advanced password policies are enabled
rule-dd1600d2-2e69-4ada-bca5-9e70b76ccd21 - Check whether App ID avoid password reuse policy is enabled
rule-5b662adf-fcac-4081-a10d-1aa7109aba4e - Check whether App ID password expiration policy is enabled
rule-59cb7d09-feab-48fc-b18b-ee581ca1761e - Check whether App ID prevent username in password policy is enabled
rule-0b082506-2481-4212-a150-d198357fcc3a - Check whether App ID multifactor authentication (MFA) is enabled for Cloud Directory users
rule-91734f9f-b8ff-4bfd-afb3-db4f789ac38f - Check whether App ID access tokens are configured to expire within # minutes
rule-ded212fe-7def-44ce-9480-0487067b64c4 - Check whether Kubernetes Service clusters are accessible only by using private endpoints
rule-2325054a-c338-474a-9740-0b7034487e40 - Check whether OpenShift clusters are accessible only by using private endpoints
rule-de84afba-b83a-41d6-8c80-d0b6acafe039 - Check whether OpenShift version is up-to-date
Analisi NetworkPolicy
Questa è una funzione beta disponibile per scopi di valutazione e test.
Il comando netpol-analyze
esegue i controlli di configurazione sui manifest Kubernetes e Calico NetworkPolicy.
ibmcloud cra netpol-analyze
Questo comando controlla la postura di 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 per l'ingresso che per l'uscita.
Il comando netpol-analyze
può fornire anche un prospetto di connettività per l'applicazione sottoposta a scansione, che mostra tutte le connessioni consentite tra carichi di lavoro dell'applicazione. È possibile utilizzare questo
report come prova di conformità o per facilitare il debug dei problemi di connettività. È anche possibile utilizzare questo comando per fornire i risultati lint per le politiche di rete scansionate e quindi utilizzare questi risultati per
migliorare l'efficienza e la leggibilità delle politiche di rete. In alcuni casi, i risultati di lint potrebbero anche indicare un errore nelle definizioni della politica di rete.
Opzioni del comando di analisi NetworkPolicy
La seguente tabella elenca le opzioni di comandi che possono essere utilizzate per il comando netpol-analyze
.
Opzioni comando | Obbligatorio o facoltativo | Descrizione |
---|---|---|
--path |
Obbligatorio | Il percorso della directory del progetto da sottoporre a scansione. |
-r , --report |
Obbligatorio | Il nome file in cui creare il report di conformità. |
-c , --connectivity |
Facoltativo | Il nome file in cui creare il report di connettività. |
-l , --lint |
Facoltativo | Il nome file in cui creare il report lint. |
-s , --strict |
Facoltativo | Risulta in un errore del comando (stato uscita 2) quando vengono rilevati rischi di connettività. |
Esempio
I seguenti frammenti di codice di esempio mostrano come puoi 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 del programma di analisi della configurazione di rete
Il comando netpol-analyze
viene eseguito come parte di IBM NCA(Network config analyzer). Poiché questo comando esegue NCA come immagine
Docker, devi installare Docker sul tuo computer.
L' URL a dell'immagine per l'analizzatore di criteri di rete è icr.io/continuous-delivery/cra/nca
.
Se l'immagine del programma di analisi non è già nel registro locale, il comando netpol-analyze
estrae l'immagine del programma di analisi più recente (incluse le fix per eventuali vulnerabilità) dal IBM Cloud® Container Registryglobale.
Utilizzo di Code Risk Analyzer nelle pipeline Tekton
È possibile utilizzare l'attività task-cra
nelle pipeline Tekton. Utilizza la definizione della pipeline Tekton quando crei una richiesta di pull, un trigger manuale o immetti un commit. È inoltre possibile creare le proprie attività Tekton ed eseguire Code Risk Analyzer da tali
attività.
Utilizzo di Code Risk Analyzer in DevSecOps
È possibile utilizzare Code Risk Analyzer in DevSecOps. La tabella seguente elenca e descrive i parametri supportati di Code Risk Analyzer per l' DevSecOps.
Per ulteriori informazioni sui comandi del programma di utilità dipendenti richiesti dall'immagine della pipeline per eseguire il comando bom-generate
, vedi Requisiti BOM. Se i comandi sono mancanti,
è possibile utilizzare il parametro cra-custom-script-path
per fare riferimento a uno script per installare tali comandi.
Nome | Immettere | Descrizione | Obbligatorio o facoltativo |
---|---|---|---|
artifactory-dockerconfigjson | SEGRETO | Il file base64-encoded Docker config.json che memorizza le credenziali per Artifactory. |
Facoltativo |
utente - autorizzazione - baseimage | text | Le credenziali per l'immagine di base del Dockerfile dell'applicazione richiesto dalla scansione di Code Risk Analyzer. | Facoltativo |
email - auth - baseimage | text | Le credenziali per l'immagine di base del Dockerfile dell'applicazione richiesto dalla scansione di Code Risk Analyzer. | Facoltativo |
host - autenticazione - immagine di base | text | Le credenziali per l'immagine di base del Dockerfile dell'applicazione richiesto dalla scansione di Code Risk Analyzer. | Facoltativo |
baseimage - auth - password | SEGRETO | Le credenziali per l'immagine di base del Dockerfile dell'applicazione richiesto dalla scansione di Code Risk Analyzer. | Facoltativo |
percorso cra - cveignore | text | Il percorso del file cveignore relativo alla root del repository dell'applicazione. Il percorso file predefinito è .cra/.cveignore . |
Facoltativo |
percorso - script - personalizzato - cra | text | Il percorso di uno script personalizzato eseguito prima della scansione di Code Risk Analyzer. Questo script ha origine per fornire l'opzione per impostare le variabili ENV nel contesto dello strumento BOM di Code Risk Analyzer. |
Facoltativo |
cra - docker - buildflags | text | Il comando di build Docker personalizzato per la scansione della fase di build. Questo parametro è vuoto per impostazione predefinita. | Facoltativo |
cra - docker - build - context | text | Se specificato, Code Risk Analyzer utilizza la directory nel parametro del percorso come contesto di build Docker. | Facoltativo |
cra - exclude - devdependencies | text | Specifica se escludere le dipendenze di sviluppo dalla scansione (true o false ). Il valore predefinito è false . |
Facoltativo |
cra - gradle - exclude - configs | text | Specifica quali configurazioni Gradle escludere le dipendenze dalla scansione. Ad esempio, runtimeClasspath,testCompileClasspath . Questo parametro è vuoto per impostazione predefinita. |
Facoltativo |
ambiti - esclusione - maven - cra | text | Specifica gli ambiti Maven da cui escludere le dipendenze nella scansione. Ad esempio, test,compile . Questo parametro è vuoto per impostazione predefinita. |
Facoltativo |
cra - nodejs - create - package - lock | text | Abilita il rilevamento di Code Risk Analyzer per creare il file package-lock.json per i repository node.js. Questo parametro è impostato su " false " per impostazione predefinita. |
Facoltativo |
ibmcloud - api - key | SEGRETO | La chiave API IBM Cloud® che interagisce con lo strumento CLI ibmcloud . |
Obbligatorio |
pipeline - dockerconfigjson | SEGRETO | Il file base64-encoded Docker config.json che estrae immagini da un registro privato. |
Facoltativo |
onepipelina-dockerconfigjson | SEGRETO | Obsoleto. Il file base64-encoded Docker config.json che estrae immagini da un registro privato. |
Facoltativo |
debug pipeline | selezionare | Lo switch della modalità di debug della pipeline. | Facoltativo |
opt-in - cra - auto - correzione | text | Abilita Code Risk Analyzer per 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 - risoluzione - abilitato - repos | text | Specifica l'elenco di nomi repository 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 in Continuous Compliance Pipeline. |
Facoltativo |
opt-in - cra - auto - correzione - forza | text | Forza il comando cra auto remediation per aggiornare i package anche se la versione principale è diversa dalla versione del package vulnerabile corrente (true o false ). Questo parametro viene considerato
solo se opt-in-cra-auto-remediation è impostato su true ed è supportato solo in Continuous Compliance Pipeline. |
Facoltativo |
Esempi di script personalizzati per DevSecOps
Se il tuo Dockerfile richiede ARGS, puoi utilizzare il parametro cra-custom-script-path
per impostare un singolo ARG come una variabile di ambiente prima di eseguire il comando. Il percorso script personalizzato è il percorso
di uno script che risiede nel progetto utente. Ad esempio, se il Dockerfile utilizza IAM_USER ARG
, esporta una variabile di ambiente all'interno dello script denominato IAM_USER: export IAM_USER='value'
. Se l'ARG
richiesto dal tuo Dockerfile è impostato come una proprietà di ambiente all'interno delle toolchain, puoi usare get_env
per ottenere il valore. In questa istanza, è possibile esportare una variabile di ambiente all'interno dello
script IAM_USER: export IAM_USER=$(get_env iam_user_environment_property_name)
. L'attività run-cra
prende automaticamente queste variabili di ambiente e le passa ai comandi di build Docker.
Il seguente esempio mostra come utilizzare 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 di immagine di base " DevSecOps " potrebbero essere obsolete, in base al progetto. Ad esempio,
puoi aggiornare i comandi come pip/pip3
per il rilevamento dei package Python che richiedono una versione pip successiva.
Il seguente esempio mostra come utilizzare cra-custom-script
per aggiornare la versione 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 tuo Dockerfile utilizza un'immagine da un registro Docker privato, puoi utilizzare il parametro cra-custom-script-path
per eseguire l'autenticazione in un registro Docker privato prima di eseguire Code Risk Analyzer e per
consentire a Code Risk Analyzer di eseguire il pull di questa immagine per la scansione.
Il seguente esempio 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 del Code Risk Analyzer in DevSecOps
Per facilitare il debug, puoi eseguire il Code Risk Analyzer localmente come una CLI (command - line interface) sulla tua macchina locale. Per informazioni sull'esecuzione del comando ibmcloud cra bom-generate
per generare un
BOM, consultare Distinta base(BOM). Dopo aver generato il BOM, utilizzare il comando ibmcloud cra cve
per elencare eventuali vulnerabilità. Per ulteriori informazioni sull'esecuzione del comando
ibmcloud cra cve
, vedi Scansione vulnerabilità.
Assicurarsi che l'attività run-cra
non contenga errori. Se l'attività contiene errori, controlla se la tua pipeline utilizza la versione corrente di DevSecOps. Se il problema non viene risolto controllando la versione di DevSecOps,,
i seguenti esempi forniscono alcuni errori comuni e le soluzioni proposte.
FAILED
Error executing docker pull cmd: [docker pull us.icr.io/opentoolchain/ibmnode:14ubisecure]
È possibile verificare di disporre dell'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 di Code Risk Analyzer per l'autenticazione nel registro privato.
FAILED
Error executing docker build cmd for stage-0: exit status 1
Se il tuo Dockerfile richiede ARGS, il comando docker build
per le fasi di build non riesce a creare a causa dell'ARGS mancante. cra-custom-script-path
è richiesto per impostare l'ARGS come variabili di ambiente.
Per ulteriori informazioni sulla configurazione 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 bom-generate
di Code Risk Analyzer crea i Dockerfile dal contesto dell'ubicazione del Dockerfile stesso. Se si desidera creare i Dockerfile dal contesto della directory del progetto root,
utilizzare il parametro cra-docker-build-context
per consentire a Code Risk Analyzer di generare i Dockerfile da questo contesto.
Rimozione dei dati di Code Risk Analyzer archiviati
Il plug-in Code Risk Analyzer non memorizza alcun dato client nei propri database. Tuttavia, le versioni precedenti delle attività di Code Risk Analyzer Tekton archiviavano in modo sicuro i risultati delle scansioni delle vulnerabilità nel proprio database.
Per richiedere la rimozione dei dati del client che potrebbero essere archiviati in Code Risk Analyzer, contatta il SupportoIBM.
FAQ
Ottieni le risposte alle domande più frequenti sull'utilizzo della CLI di Code Risk Analyzer.
Come posso determinare il motivo per cui la CLI ha avuto esito negativo?
Prima di richiamare la CLI di Code Risk Analyzer, impostare la variabile di ambiente IBMCLOUD_TRACE
su true per attivare il log di debug.
export IBMCLOUD_TRACE=true
Osserva le chiamate API e le risposte mostrate nel log per determinare il motivo esatto dell'errore.
Come posso eseguire il debug di un comando BOM che non riesce a estrarre un'immagine di base da un registro privato.
Assicurati di essere autenticato con il registro in cui risiede l'immagine di base utilizzando il comando ibmcloud cr login
o il comando docker login
.
Come posso eseguire il debug di un comando BOM che non riesce ad analizzare un Dockerfile?
- Verifica che il Dockerfile non abbia problemi eseguendo il comando
docker build
e accertandoti che abbia esito positivo. - Se il tuo Dockerfile richiede il passaggio di ARG, assicurati che ARG sia impostato come una variabile di ambiente. È anche possibile utilizzare la variabile di ambiente
DOCKERBUILDFLAG
. - Autenticarsi con il registro che contiene le immagini di base.
Sto vedendo risultati falsi positivi inaspettati. Cosa devo fare?
Esegui la pipeline di distribuzione continua ( DevSecOps, CD) per generare una SBOM aggiornata nell'armadietto delle prove. Questo potrebbe risolvere una potenziale causa di falsi positivi derivante dalla presenza di un SBOM più vecchio generato dal flusso di Continuous Compliance (CC) dell' DevSecOps.
Perché la severità del report o del problema è diversa da quella del link di vulnerabilità associato?
Poiché la nostra fonte di informazioni sulla vulnerabilità è stata modificata di recente, potresti vedere che la gravità associata a una particolare vulnerabilità è cambiata. Code Risk Analyzer determinerà la severità ottimale in base al calcolo di tutte le fonti di vulnerabilità.