Eseguire la scansione dei pacchetti del sistema operativo manualmente

L'API On-Demand Scanning consente di eseguire la scansione delle immagini archiviate localmente sul computer o in remoto in Artifact Registry. In questo modo avrai un controllo granulare sui container di cui vuoi eseguire la scansione per rilevare le vulnerabilità. Puoi utilizzare la scansione on demand per analizzare le immagini nella pipeline CI/CD prima di decidere se archiviarle in un registro. Per informazioni sui prezzi, consulta la pagina relativa ai prezzi.

Questa pagina descrive come eseguire manualmente la scansione delle immagini container con On-Demand Scanning.

Prima di iniziare

  1. Accedi al tuo account Google Cloud . Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei carichi di lavoro.
  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 On-Demand Scanning API.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  5. Installa Google Cloud CLI.

  6. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  7. Per inizializzare gcloud CLI, esegui questo comando:

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

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  11. Installa Google Cloud CLI.

  12. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  13. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  14. Aggiungi il componente local-extract all'installazione di Google Cloud CLI

    Utilizzo di Component Manager di Google Cloud CLI

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

    Utilizzo del 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.

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

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per visualizzare i risultati della scansione dei pacchetti, chiedi all'amministratore di concederti i seguenti ruoli IAM sul progetto:

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Scansione di un'immagine container

  • Ricerca locale:

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

    Per un'immagine locale, utilizza uno dei seguenti formati per IMAGE_URI:

    • REPOSITORY:TAG
    • REPOSITORY
  • Scansione remota:

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

    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, IMAGE_URI deve includere REPOSITORY_ID.

Per le scansioni locali e remote, puoi utilizzare i seguenti flag facoltativi:

  • --location è un flag per selezionare manualmente la multi-regione in cui viene eseguita la scansione. La scelta di una regione multipla più vicina alla tua posizione fisica riduce al minimo la latenza. Le località disponibili sono: us, europe e asia. La posizione predefinita è us.

  • --async è un flag per eseguire il processo di scansione in modo asincrono. Se ometti questo flag, il terminale si bloccherà fino al completamento della procedura di scansione.

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 dell'analisi per recuperare i risultati delle vulnerabilità. Il nome della scansione è il valore di scan nell'ultima riga del messaggio di output.

Scansione asincrona

L'esempio seguente 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 viene restituito il relativo ID senza bloccare il terminale. Utilizza l'ID operazione, il valore di name nell'ultima riga del messaggio di output, per eseguire il polling dell'operazione.

Polling dell'operazione a lunga esecuzione

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

gcloud artifacts docker images get-operation LRO_ID

Dove LRO_ID è l'ID operazione a lunga esecuzione.

Continuando con l'esempio della sezione di 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 è stata 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.

Recuperare i 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 in fondo all'output quando esegui il polling dell'operazione a lunga esecuzione, al termine della scansione.
  • --limit=X è un flag facoltativo che limita il numero di occorrenze mostrate nell'output. X è un valore numerico.

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
  cvssv3:
    attackComplexity: ATTACK_COMPLEXITY_LOW
    attackVector: ATTACK_VECTOR_NETWORK
    availabilityImpact: IMPACT_HIGH
    baseScore: 7.2
    confidentialityImpact: IMPACT_HIGH
    exploitabilityScore: 1.2
    impactScore: 5.9
    integrityImpact: IMPACT_HIGH
    privilegesRequired: PRIVILEGES_REQUIRED_HIGH
    scope: SCOPE_UNCHANGED
    userInteraction: USER_INTERACTION_NONE
  effectiveSeverity: MEDIUM

L'output di questo comando è un elenco di occorrenze nel formato Grafeas. In questo caso, viene mostrata una vulnerabilità di gravità media trovata nell'immagine.

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

Passaggi successivi