Scansione di immagini on demand

L'API on Demand Scanning consente di scansionare le immagini archiviate localmente sul tuo computer, in Container Registry o in Artifact Registry. Questo ti offre un controllo granulare sui container di cui vuoi cercare le vulnerabilità. Puoi utilizzare l'analisi on demand per scansionare le immagini nella tua pipeline CI/CD prima di decidere se archiviarle in un registro.

Consulta la pagina dei prezzi per informazioni sui prezzi.

Questa pagina descrive come eseguire manualmente la scansione delle immagini container con la scansione on demand.

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 On-Demand Scanning API.

    Enable the API

  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 On-Demand Scanning API.

    Enable the API

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

    gcloud init
  12. Aggiungi il componente local-extract all'installazione di Cloud SDK

    Utilizzare il gestore dei componenti di Cloud SDK

    Il gestore dei componenti ti chiederà di installare i componenti richiesti la prima volta che esegui il comando di scansione.

    Utilizzare il gestore di pacchetti di sistema

    • Per Debian/Ubuntu:
      sudo apt install google-cloud-sdk-local-extract
          
    • Per Red Hat/Fedora/CentOS:
      sudo dnf install google-cloud-sdk-local-extract
          

      In alternativa, puoi sostituire dnf con yum nel comando precedente.

  13. Concedi il ruolo IAM Amministratore di scansione on-demand all'account utente o di servizio che utilizzerai con la scansione on-demand. Se utilizzi l'account proprietario del progetto per eseguire le scansioni, puoi saltare questo passaggio.

Scansione di un'immagine container

Per eseguire la scansione di un'immagine container, utilizza il seguente comando:

gcloud artifacts docker images scan IMAGE_URI [--remote] [--location=(us,europe,asia)] [--async]

Dove:

  • --remote è un flag facoltativo da utilizzare se la tua immagine è ospitata in remoto, su Artifact Registry o Container Registry. Per un'immagine remota, utilizza uno dei seguenti formati per IMAGE_URI:

    • HOSTNAME/PROJECT_ID/REPOSITORY_ID/IMAGE_ID@sha256:HASH
    • HOSTNAME/PROJECT_ID/REPOSITORY_ID/IMAGE_ID:HASH
    • HOSTNAME/PROJECT_ID/REPOSITORY_ID/IMAGE_ID
    • HOSTNAME/PROJECT_ID/IMAGE_ID@sha256:HASH
    • HOSTNAME/PROJECT_ID/IMAGE_ID:HASH
    • HOSTNAME/PROJECT_ID/IMAGE_ID

    Per le immagini in Artifact Registry, il IMAGE_URI deve includere il REPOSTIORY_ID.

    Per un'immagine locale, ometti il flag --remote e utilizza uno dei seguenti formati per l'elemento IMAGE_URI:

    • IMAGE_ID:TAG
    • IMAGE_ID
  • --location è un flag facoltativo per selezionare manualmente la località a più aree geografiche in cui viene eseguita la scansione. La scelta di una località con più aree geografiche in prossimità della tua posizione fisica riduce la latenza. Le località disponibili sono: us, europe e asia. La località predefinita è us.

  • --async è un flag facoltativo per eseguire il processo di scansione in modo asincrono. Se ometti questo flag, il terminale verrà bloccato finché la procedura di scansione non sarà completata.

Scansione sincrona

L'esempio seguente mostra l'output di una scansione sincrona, senza il flag --async:

$ gcloud artifacts docker images scan ubuntu:latest

✓ Scanning container image
  ✓ Locally extracting packages and versions from local container image
  ✓ Remotely initiating analysis of packages and versions
  ✓ Waiting for analysis operation to complete [projects/my-project/locations/us/operations/87d2e137-1d1c-4790-8e5e-daf6c96ae7d7]
Done.
done: true
metadata:
  '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesMetadata
  createTime: '2021-01-05T23:03:04.185261Z'
  resourceUri: ubuntu:latest
name: projects/my-project/locations/us/operations/87d2e137-1d1c-4790-8e5e-daf6c96ae7d7
response:
  '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesResponse
  scan: projects/my-project/locations/us/scans/2fe2bfb8-f0c5-4dd6-a8c8-38961869767a

Utilizza il nome della scansione per recuperare i risultati della vulnerabilità. Il nome è il valore di scan nell'ultima riga del messaggio di output.

Scansione asincrona

Il seguente esempio mostra l'output dell'esecuzione di una scansione asincrona:

$ gcloud artifacts docker images scan ubuntu:latest --async

✓ Scanning container image
  ✓ Locally extracting packages and versions from local container image
  ✓ Remotely initiating analysis of packages and versions
Done.
Check operation [projects/cloud-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16] for status.
metadata:
  '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesMetadata
  createTime: '2021-01-05T23:04:54.393510Z'
  resourceUri: ubuntu:latest
name: projects/my-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16

Viene avviata un'operazione a lunga esecuzione e restituisce il relativo ID senza bloccare il terminale. Utilizza l'ID operazione, il valore di name nell'ultima riga del messaggio di output, per eseguire l'operazione.

Sondaggio sull'operazione a lunga esecuzione

Utilizza l'ID operazione, dall'output del comando di scansione asincrona, per verificare lo stato dell'operazione.

gcloud artifacts docker images get-operation LRO_ID

Dove LRO_ID è l'ID operazione di lunga durata.

Continuando con l'esempio della sezione scansione asincrona, per controllare lo stato dell'operazione:

$ gcloud artifacts docker images get-operation \
  projects/cloud-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16

done: true
metadata:
  '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesMetadata
  createTime: '2021-01-05T23:04:54.393510Z'
  resourceUri: ubuntu:latest
name: projects/my-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16
response:
  '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesResponse
  scan: projects/my-project/locations/us/scans/2fe2bfb8-f0c5-4dd6-a8c8-38961869767a

Se l'output include la riga done: true, l'operazione di scansione è completata. Utilizza il nome della scansione per recuperare i risultati della vulnerabilità. Il nome è il valore di scan nell'ultima riga del messaggio di output

Recupero dei risultati della scansione

Per recuperare i risultati della scansione dopo il completamento dell'operazione, utilizza il seguente comando:

gcloud artifacts docker images list-vulnerabilities SCAN_NAME [--limit=X]

Dove:

  • SCAN_NAME è il nome della scansione. Puoi trovarlo nella parte inferiore dell'output quando poni un'operazione a lunga esecuzione al termine della scansione.
  • --limit=X è un flag facoltativo che limita il numero di occorrenze visualizzate nell'output.

Ad esempio:

gcloud artifacts docker images list-vulnerabilities \
projects/my-project/locations/us/scans/2fe2bfb8-f0c5-4dd6-a8c8-38961869767a

createTime: '2021-01-05T23:05:42.956227Z'
kind: VULNERABILITY
name: projects/my-project/locations/us/occurrences/f82a1efd-a261-4973-acbd-f9854d8b8135
noteName: projects/goog-vulnz/notes/CVE-2018-1000654
resourceUri: ubuntu:latest
updateTime: '2021-01-05T23:05:42.956227Z'
vulnerability:
  cvssScore: 7.1
  effectiveSeverity: LOW
  packageIssue:
  - affectedCpeUri: cpe:/o:canonical:ubuntu_linux:20.04
    affectedPackage: libtasn1-6
    affectedVersion:
      kind: NORMAL
      name: 4.16.0
      revision: '2'
    fixedCpeUri: cpe:/o:canonical:ubuntu_linux:20.04
    fixedPackage: libtasn1-6
    fixedVersion:
      kind: MAXIMUM
  severity: HIGH

L'output di questo comando è un elenco di occorrenze nel formato Grafeas. In questo caso, mostra una vulnerabilità di elevata gravità rilevata nell'immagine.

I risultati della scansione sono disponibili per 48 ore dopo il completamento dell'operazione di scansione.

Passaggi successivi