Eseguire la scansione automatica dei pacchetti Java

Questo documento spiega come attivare l'API Container Scanning, eseguire il push di un'immagine in Artifact Registry e visualizzare l'elenco delle vulnerabilità rilevate nell'immagine.

Artifact Analysis memorizza le informazioni sulle vulnerabilità come note. Viene creata un'occorrenza per ogni istanza di una nota associata a un'immagine. Per ulteriori informazioni, consulta la documentazione relativa alla panoramica e ai prezzi.

Prima di iniziare

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Artifact Registry and Container Scanning APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the Artifact Registry and Container Scanning APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. Crea un repository Docker in Artifact Registry ed esegui il push di un'immagine container con il tuo codice Java nel repository. Se non hai dimestichezza con Artifact Registry, consulta la guida rapida di Docker.

    Per informazioni su come utilizzare Cloud Build per creare e containerizzare le tue applicazioni Java, consulta Creare, testare e containerizzare le applicazioni Java.

Artifact Analysis non esegue automaticamente l'analisi delle immagini esistenti. Per analizzare un'immagine esistente, devi eseguirne di nuovo il push.

Visualizza le vulnerabilità dell'immagine

Artifact Analysis esegue la scansione delle nuove immagini quando vengono caricate su Artifact Registry. Questa scansione estrae informazioni sui pacchetti nel contenutore.

Puoi visualizzare le occorrenze di vulnerabilità per le tue immagini in Artifact Registry utilizzando la console Google Cloud, Google Cloud CLI o l'API Container Analysis. Se un'immagine presenta vulnerabilità, puoi ottenere i dettagli.

Artifact Analysis aggiorna solo i metadati delle immagini inviate o rimosse negli ultimi 30 giorni. Artifact Analysis archivia i metadati più vecchi di 30 giorni.Per eseguire di nuovo la scansione di un'immagine con metadati archiviati, esegui il pull dell'immagine. L'aggiornamento dei metadati può richiedere fino a 24 ore.

Visualizzare le occorrenze nella console Google Cloud

Per visualizzare le vulnerabilità in un'immagine:

  1. Recupera l'elenco dei repository.

    Apri la pagina Repositori

  2. Nell'elenco dei repository, fai clic su un repository.

  3. Nell'elenco delle immagini, fai clic sul nome di un'immagine.

    I totali delle vulnerabilità per ogni digest dell'immagine vengono visualizzati nella colonna Vulnerabilità.

    Screenshot di un'immagine con vulnerabilità

  4. Per visualizzare l'elenco delle vulnerabilità di un'immagine, fai clic sul link nella colonna Vulnerabilità.

    La sezione Risultati della scansione mostra un riepilogo dei tipi di pacchetti esaminati, delle vulnerabilità totali, delle vulnerabilità con correzioni disponibili, delle vulnerabilità senza correzioni e della gravità effettiva.

    Screenshot della sezione Risultati dell'analisi con vulnerabilità, correzioni e gravità effettiva

    La tabella delle vulnerabilità elenca il nome della vulnerabilità ed esposizioni comuni (CVE) per ogni vulnerabilità rilevata, la gravità effettiva, il punteggio del Common Vulnerability Scoring System (CVSS), le correzioni (se disponibili), il nome del pacchetto contenente la vulnerabilità e il tipo di pacchetto.

    Puoi filtrare e ordinare questi file per controllare un file, una directory o un tipo di file specifico in base all'estensione.

    La console Google Cloud mostra fino a 1200 vulnerabilità in questa tabella. Se la tua immagine presenta più di 1200 vulnerabilità, devi utilizzare gcloud o l'API per visualizzare l'elenco completo.

  5. Per informazioni dettagliate su una CVE specifica, fai clic sul nome della CVE.

  6. Per visualizzare i dettagli relativi alle occorrenze della vulnerabilità, come il numero di versione e la posizione interessata, fai clic su Visualizza o Visualizza correzione nella riga con il nome della vulnerabilità. Il testo del link è Visualizza per le vulnerabilità senza correzione e Visualizza correzione per le vulnerabilità a cui è stata applicata una correzione.

Visualizzare le occorrenze utilizzando gcloud

Per visualizzare le occorrenze di un'immagine in Artifact Registry, esegui il comando seguente:

  gcloud artifacts docker images list --show-occurrences \
      LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID

Dove:

  • LOCATION è la posizione regionale o multiregionale del repository.
  • PROJECT_ID è l'ID progetto della console Google Cloud.
  • REPOSITORY è il nome del repository in cui è archiviata l'immagine.
  • IMAGE_ID è il nome dell'immagine nel repository. Non puoi specificare un tag immagine con questo comando.

    Per impostazione predefinita, il comando restituisce le 10 immagini più recenti. Per mostrare un numero diverso di immagini, utilizza il flag --show-occurrences-from. Ad esempio, il seguente comando restituisce le 25 immagini più recenti.

    gcloud artifacts docker images list --show-occurrences-from=25 \
        us-central1-docker.pkg.dev/my-project/my-repo/my-image
    

Per visualizzare le vulnerabilità per un tag immagine o un livello:

  gcloud artifacts docker images describe \
      LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID:TAG \
      --show-package-vulnerability

o

  gcloud artifacts docker images describe \
      LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID@sha256:HASH \
      --show-package-vulnerability

Dove:

  • LOCATION è la posizione regionale o multiregionale del repository.
  • PROJECT_ID è l'ID progetto della console Google Cloud.
  • REPOSITORY è il nome del repository in cui è archiviata l'immagine.
  • IMAGE_ID è il nome dell'immagine nel repository.
  • TAG è il tag immagine di cui vuoi ottenere informazioni.
  • HASH è il digest dell'immagine.

    Artifact Analysis restituisce risultati che includono packageType.

Per filtrare le occorrenze di vulnerabilità:

  gcloud artifacts docker images list --show-occurrences \
      LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID \
      --occurrence-filter=FILTER_EXPRESSION

Dove:

  • LOCATION è la posizione regionale o multiregionale del repository.
  • PROJECT_ID è l'ID progetto della console Google Cloud.
  • REPOSITORY è il nome del repository in cui è archiviata l'immagine.
  • IMAGE_ID è il nome dell'immagine nel repository.
  • FILTER_EXPRESSION è un'espressione di filtro di esempio nel formato spiegato in Filtrare le occorrenze di vulnerabilità.

Visualizzare le occorrenze utilizzando l'API

Per visualizzare un elenco di occorrenze nel progetto:

 curl -X GET -H "Content-Type: application/json" -H \
    "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences

Per visualizzare un riepilogo delle vulnerabilità nel tuo progetto:

 curl -X GET -H "Content-Type: application/json" -H \
    "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences:vulnerabilitySummary

Per visualizzare i dettagli di una occorrenza specifica:

 curl -X GET -H "Content-Type: application/json" -H \
    "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences/OCCURRENCE_ID

Visualizzare le vulnerabilità in Cloud Build

Se utilizzi Cloud Build, puoi anche visualizzare le vulnerabilità delle immagini nel riquadro laterale Approfondimenti sulla sicurezza della console Google Cloud.

Il riquadro laterale Approfondimenti sulla sicurezza fornisce una panoramica generale delle informazioni sulla sicurezza della compilazione per gli elementi archiviati in Artifact Registry. Per scoprire di più sul riquadro laterale e su come utilizzare Cloud Build per contribuire a proteggere la tua catena di fornitura del software, consulta Visualizzare gli insight sulla sicurezza della build.

Filtra le occorrenze

Puoi utilizzare stringhe di filtro nei comandi gcloud e nell'API Artifact Analysis per filtrare le occorrenze prima di visualizzarle. Le sezioni seguenti descrivono i filtri di ricerca supportati.

Visualizzare le occorrenze di un tipo specifico

Puoi utilizzare il valore kind per filtrare in base al tipo di occorrenza. Consulta i tipi disponibili.

Gli esempi seguenti mostrano come filtrare in base alle occorrenze di deployment per un'immagine:

gcloud

In gcloud CLI, esegui quanto segue:

gcloud artifacts docker images list --show-occurrences \
    --occurrence-filter='kind="DEPLOYMENT"' --format=json \
    LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID

Dove:

  • DEPLOYMENT è il tipo di occorrenza.
  • LOCATION è la posizione regionale o multiregionale del repository.
  • PROJECT_ID è l'ID progetto della console Google Cloud.
  • REPOSITORY è il nome del repository in cui è archiviata l'immagine.
  • IMAGE_ID è il nome dell'immagine nel repository.

API

Nella query dell'API, utilizza la seguente espressione di filtro:

kind="DEPLOYMENT" AND resourceUrl="RESOURCE_URL"

Dove:

  • DEPLOYMENT è il tipo di occorrenza.
  • RESOURCE_URL è l'URL completo dell'immagine nel formato https://LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID@sha256:HASH.

Puoi utilizzare la funzione hasPrefix per filtrare con un ambito più ampio.

Ad esempio, i seguenti filtri per le occorrenze di un tipo specifico in molte immagini:

kind="NOTE_KIND" AND has_prefix(resourceUrl, "RESOURCE_URL_PREFIX")

Dove:

  • RESOURCE_URL_PREFIX specifica una sottostringa di un URL della risorsa.
    • Per filtrare per tutte le versioni di un'immagine, ometti il digest dell'immagine. Utilizza il formato: https://LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID@
    • Per filtrare per tutte le immagini di un progetto, specifica solo la posizione della risorsa e il progetto. Utilizza il formato: https://LOCATION-docker.pkg.dev/PROJECT_ID/

Visualizzare le occorrenze di vulnerabilità

Per recuperare un elenco di occorrenze di vulnerabilità per un'immagine, puoi filtrare in base al tipo di occorrenza VULNERABILITY.

gcloud

In gcloud CLI, esegui quanto segue:

gcloud artifacts docker images list \
    --show-occurrences \
    --occurrence-filter='kind="VULNERABILITY"' \
    --format=json \
    LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID

Dove:

  • VULNERABILITY è il tipo di occorrenza.
  • LOCATION è la posizione regionale o multiregionale del repository.
  • PROJECT_ID è l'ID progetto della console Google Cloud.
  • REPOSITORY è il nome del repository in cui è archiviata l'immagine.
  • IMAGE_ID è il nome dell'immagine nel repository.

API

Nella query dell'API, utilizza la seguente espressione di filtro:

GET https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences?filter=kind%3D%22VULNERABILITY%22%20AND%20resourceUrl%3D%22ENCODED_RESOURCE_URL%22

Dove:

  • ENCODED_RESOURCE_URL è il percorso codificato dell'immagine. Per informazioni sulla codifica, consulta la sezione Codifica dell'URL.

Per ulteriori informazioni sull'utilizzo dell'API, consulta projects.occurrences.get.

Filtra per tipo di pacchetto

Per limitare i risultati analisi delle vulnerabilità a un tipo di pacchetto, esegui il seguente comando gcloud CLI:

  gcloud artifacts docker images list /
      --show-occurrences /
      --occurrence-filter='kind="VULNERABILITY" AND packageType="PACKAGE_TYPE"' /
      LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID

Dove:

  • VULNERABILITY è il tipo di occorrenza.
  • PACKAGE_TYPE è il tipo di pacchetto della lingua dell'applicazione. I tipi disponibili sono: COMPOSER, GO, MAVEN, NPM, NUGET, PYTHON, RUBYGEMS e RUST.
  • LOCATION è la posizione regionale o multiregionale del repository.
  • PROJECT_ID è l'ID progetto della console Google Cloud.
  • REPOSITORY è il nome del repository in cui è archiviata l'immagine.
  • IMAGE_ID è il nome dell'immagine nel repository. Non puoi specificare un tag immagine con questo comando.

Visualizzare le immagini associate a una nota specifica

Puoi recuperare un elenco di risorse associate a un ID nota specifico. Ad esempio, puoi elencare le immagini con una vulnerabilità CVE specifica.

Per elencare tutte le immagini all'interno di un progetto associate a una determinata nota, utilizza la seguente espressione di filtro:

gcloud

gcloud artifacts docker images list /
    --show-occurrences /
    --occurrence-filter='noteProjectId="goog-vulnz" AND noteId="NOTE_ID"' /
    LOCATION-docker.pkg.dev/PROJECT_ID

Dove:

  • goog-vulnz è il PROVIDER_PROJECT_ID per l'analisi delle vulnerabilità di Artifact Analysis. Se utilizzi l'Artifact Analysis in un progetto personalizzato, puoi sostituire questo valore con l'ID progetto del tuo provider.
  • LOCATION è la posizione regionale o multiregionale del repository.
  • PROJECT_ID è l'ID progetto della console Google Cloud.
  • NOTE_ID è l'ID della nota. Ad esempio, quando viene visualizzata una vulnerabilità nei risultati della scansione di Artifact Analysis, spesso viene utilizzata la formattazione dell'ID CVE simile a CVE-2019-12345.

API

GET https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences?filter=noteProjectId%3D%22goog-vulnz%22%20AND%20resourceUrl%3D%22ENCODED_RESOURCE_URL%22%20AND%20noteId%3D%22NOTE_ID%22

Dove:

  • goog-vulnz è il PROVIDER_PROJECT_ID per l'analisi delle vulnerabilità di Artifact Analysis. Se utilizzi l'Artifact Analysis in un progetto personalizzato, puoi sostituire questo valore con l'ID progetto del tuo provider.
  • ENCODED_RESOURCE_URL è il percorso codificato dell'immagine. Per informazioni sulla codifica, consulta la sezione Codifica dell'URL.
  • NOTE_ID è l'ID della nota. Ad esempio, quando viene visualizzata una vulnerabilità nei risultati della scansione di Artifact Analysis, spesso viene utilizzata la formattazione dell'ID CVE simile a CVE-2019-12345.

Per controllare se in un'immagine specifica è presente una nota specifica, utilizza la seguente expression di filtro:

gcloud

gcloud artifacts docker images list /
    --show-occurrences /
    --occurrence-filter='noteProjectId="goog-vulnz" AND noteId="NOTE_ID"' /
    LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID

Dove

  • LOCATION è la posizione regionale o multiregionale del repository.
  • PROJECT_ID è l'ID progetto della console Google Cloud.
  • REPOSITORY è il nome del repository in cui è archiviata l'immagine.
  • IMAGE_ID è il nome dell'immagine nel repository. Non puoi specificare un tag immagine con questo comando.

API

Nella query dell'API, aggiungi la seguente espressione di filtro:

resourceUrl="RESOURCE_URL" AND noteProjectId="goog-vulnz" \
AND noteId="NOTE_ID"

Dove:

  • RESOURCE_URL è l'URL completo dell'immagine nel formato https://LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID@sha256:HASH.
  • goog-vulnz è il PROVIDER_PROJECT_ID per l'analisi delle vulnerabilità di Artifact Analysis. Se utilizzi l'Artifact Analysis in un progetto personalizzato, puoi sostituire questo valore con l'ID progetto del tuo provider.
  • NOTE_ID è l'ID della nota. Le note relative alla sicurezza sono spesso formattate come CVE-2019-12345.

Passaggi successivi