Eseguire la scansione dei pacchetti del sistema operativo manualmente

L'API On-Demand Scanning consente di analizzare le immagini archiviate localmente sul computer o in remoto in Artifact Registry o Container Registry. In questo modo hai 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 dei prezzi.

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

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

    Go to project selector

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

  10. Enable the On-Demand Scanning API.

    Enable the API

  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. Aggiungi il componente local-extract all'installazione di Google Cloud CLI

    Utilizzo del gestore di componenti di Google Cloud CLI

    Component Manager ti chiederà di installare i componenti richiesti la prima volta che esegui il comando di scansione.

    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.
  16. 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 multiregione 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

    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 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 al termine 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 interroghi l'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