IBM Cloud Docs
Plug-in di Code Risk Analyzer per IBM Cloud

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 supportati
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.

Dipendenze supportate che Code Risk Analyzer controlla per le vulnerabilità
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 linux, come linux-libc-dev, non vengono riportati. La maggior parte di questi pacchetti binari sono moduli kernel e kernel, che non vengono eseguiti in immagini contenitore.

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 comandi Docker cli e tar siano disponibili.
  • Se il percorso contiene file Maven, questo comando utilizza mvn per creare un elenco di dipendenze. In questo scenario, il comando bom-generate richiede che il comando mvn sia disponibile.
  • Se il percorso contiene i file Gradle, questo comando utilizza gradle per creare un elenco di dipendenze. In questo scenario, il comando bom-generate richiede che il comando gradle sia disponibile.
  • Se il percorso contiene i file Node.js package-json e questo comando viene utilizzato per creare un file package-lock.json corrispondente, il comando bom-generate utilizza npm per creare il file package-lock.json. In questo scenario, il comando richiede la disponibilità del comando npm.
  • Se il percorso contiene il file Python requirements.txt, il comando utilizza pip per generare le dipendenze del pacchetto. In questo scenario, il comando bom-generate richiede che il comando pip 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 di comando per la generazione di una distinta base
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 di comando per eseguire una scansione delle vulnerabilità
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).

Controlli di sicurezza
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 di comando per l'analisi della distribuzione.
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 di comando per l'esecuzione dell'analisi Terraform
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 di comando per l'esecuzione dell'analisi delle politiche di rete
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.

DevSecOps Parametri basati su Code Risk Analyzer
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à.