Scansione automatica dei pacchi

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

Artifact Analysis archivia le informazioni sulle vulnerabilità come note. Viene creata un'occorrenza per ogni istanza di una nota associata a un'immagine. Per saperne di più, consulta i documenti relativi 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.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Artifact Registry and Container Scanning APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. Install the Google Cloud CLI.

  6. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  7. To initialize the gcloud CLI, run the following command:

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Artifact Registry and Container Scanning APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  13. To initialize the gcloud CLI, run the following command:

    gcloud init
  14. Crea un repository in Artifact Registry ed esegui il push di un pacchetto con il codice dell'applicazione nel repository. Se non hai familiarità con la gestione dei pacchetti in Artifact Registry, consulta i seguenti argomenti:
    1. Archivia i pacchetti Java in Artifact Registry
    2. Archivia i pacchetti Node.js in Artifact Registry
    3. Archiviare pacchetti Python in Artifact Registry

L'abilitazione di questa API attiva anche la scansione dei pacchetti di lingua in Artifact Registry. Consulta i tipi di pacchetti supportati.

Visualizza le vulnerabilità del pacchetto

Artifact Analysis esegue la scansione dei nuovi pacchetti quando vengono caricati in Artifact Registry. Questa scansione estrae informazioni sul pacchetto e sulle relative dipendenze.

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 continua a eseguire la scansione di immagini e pacchetti purché siano stati estratti negli ultimi 30 giorni. Dopo 30 giorni, i metadati delle immagini e dei pacchetti scansionati non verranno più aggiornati e i risultati saranno obsoleti.

Artifact Analysis archivia i metadati che sono rimasti inattivi per più di 90 giorni. Questi metadati archiviati possono essere valutati solo utilizzando l'API. Puoi eseguire di nuovo la scansione di un'immagine con metadati obsoleti o archiviati eseguendo il pull dell'immagine. L'aggiornamento dei metadati può richiedere fino a 24 ore. I pacchetti con metadati obsoleti o archiviati non possono essere analizzati di nuovo.

Visualizzare le occorrenze nella console Google Cloud

Per visualizzare le vulnerabilità in un pacchetto:

  1. Recupera l'elenco dei repository.

    Apri la pagina Repository

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

  3. Nell'elenco dei pacchetti, fai clic sul nome di un pacchetto.

    I totali delle vulnerabilità per ogni pacchetto vengono visualizzati nella colonna Vulnerabilità.

    Un pacchetto scansionato con vulnerabilità

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

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

    La pagina dei risultati dell'analisi che elenca vulnerabilità, correzioni e gravità effettiva

    La tabella delle vulnerabilità elenca il nome delle 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 che contiene 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 del file.La console Google Cloud mostra fino a 1200 vulnerabilità per pagina in questa tabella.

  5. Per i dettagli di una CVE specifica, fai clic sul nome della CVE.

  6. Per visualizzare i dettagli dell'occorrenza 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.

Visualizza le occorrenze utilizzando gcloud

Per visualizzare le occorrenze per i pacchetti in Artifact Registry, esegui il comando gcloud artifacts versions describe:

gcloud artifacts versions describe VERSION \
    --location=LOCATION --repository=REPOSITORY --package=PACKAGE --show-package-vulnerability

Dove:

  • VERSION è la versione del pacchetto per cui stai visualizzando le occorrenze.
  • LOCATION è la posizione regionale o multiregionale del repository.
  • REPOSITORY è il nome del repository in cui è archiviato il pacchetto.
  • PACKAGE è il nome del pacchetto nel repository. Non puoi specificare un tag del pacchetto con questo comando.

Visualizzare le occorrenze utilizzando l'API

Per ottenere un elenco delle occorrenze 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

Per ottenere 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 un evento specifico:

 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

Filtra occorrenze

Puoi utilizzare le 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. Vedi i tipi disponibili.

Gli esempi seguenti mostrano come filtrare le occorrenze di vulnerabilità dei pacchetti:

gcloud

Il filtro delle occorrenze non è supportato in Google Cloud CLI per la scansione basata su pacchetti.

API

Nella query API, utilizza la seguente espressione di filtro:

kind="PACKAGE_VULNERABILITY" AND resourceUrl="RESOURCE_URL"

Dove:

  • PACKAGE_VULNERABILITY è il tipo di occorrenza.
  • RESOURCE_URL è l'URL completo del pacchetto nel formato projects/PROJECT_ID/locations/LOCATION/repositories/REPOSITORY_ID/packages/PACKAGE_ID/PACKAGE_TYPE/VERSION_ID:
    • PROJECT_ID è l'ID progetto della console Google Cloud .
    • LOCATION è la posizione regionale o multiregionale del repository.
    • REPOSITORY è il nome del repository in cui è archiviata l'immagine.
    • PACKAGE_ID è il nome del pacchetto in cui è archiviata l'immagine.
    • PACKAGE_TYPE è il tipo di pacchetto della lingua dell'applicazione. I tipi disponibili sono: pythonPackages, mavenArtifacts e npmPackages.
    • VERSION è il numero di versione del pacchetto.

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 più versioni dello stesso pacchetto:

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

Dove:

  • RESOURCE_URL_PREFIX specifica una sottostringa di un URL risorsa.
    • Per filtrare tutte le versioni di un pacchetto, ometti la versione. Utilizza il formato:projects/PROJECT_ID/locations/LOCATION/repositories/REPOSITORY_ID
    • Per filtrare tutti i pacchetti in un progetto, specifica solo la località e il progetto della risorsa. Utilizza il formato: projects/PROJECT_ID/locations/LOCATION

Visualizzare le occorrenze di vulnerabilità

Puoi visualizzare gli elenchi delle occorrenze di vulnerabilità utilizzando gcloud CLI o l'API Artifact Analysis.

gcloud

Per recuperare un elenco di occorrenze di vulnerabilità per un pacchetto, utilizza il flag --show-package-vulnerability:

gcloud artifacts versions describe VERSION_ID --repository=REPOSITORY_ID
  --package=GROUP_ID:ARTIFACT_ID --show-package-vulnerability

Dove:

  • VERSION è il numero di versione del pacchetto.
  • REPOSITORY è il nome del repository in cui è archiviato il pacchetto.
  • GROUP_ID è l'identificatore del gruppo del tuo pacchetto.
  • ARTIFACT_ID è l'identificatore dell'artefatto del pacchetto.

API

Nella query 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 scoprire di più sulla codifica, vedi Codifica dell'URL.

Per saperne di più sull'utilizzo dell'API, consulta projects.occurrences.get.

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

Il filtro delle occorrenze non è supportato in Google Cloud CLI per la scansione basata su pacchetti.

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 scoprire di più sulla codifica, vedi Codifica dell'URL.
  • NOTE_ID è l'ID della nota. Ad esempio, quando vedi una vulnerabilità nei risultati della scansione di Artifact Analysis, spesso utilizza la formattazione dell'ID CVE simile a CVE-2019-12345.

Per controllare un'immagine specifica per una nota specifica, utilizza la seguente espressione di filtro:

gcloud

Il filtro delle occorrenze non è supportato in Google Cloud CLI per la scansione basata su pacchetti.

API

Nella query API, aggiungi la seguente espressione di filtro:

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

Dove:

  • RESOURCE_URL è l'URL completo del pacchetto nel formato projects/PROJECT_ID/locations/LOCATION/repositories/REPOSITORY_ID/packages/PACKAGE_ID/PACKAGE_TYPE/VERSION_ID.
  • goog-vulnz è il PROVIDER_PROJECT_ID per l'analisi delle vulnerabilità di Artifact Analysis.
  • NOTE_ID è l'ID della nota. Le note relative alla sicurezza sono spesso formattate come CVE-2019-12345.

Passaggi successivi