L'API On-Demand Scanning consente di eseguire la scansione delle immagini archiviate localmente sul computer o da remoto in Artifact Registry. In questo modo hai un controllo granulare sui container di cui vuoi eseguire la scansione alla ricerca di vulnerabilità. Puoi utilizzare On-Demand Scanning per eseguire la scansione delle 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
- Accedi al tuo Google Cloud account. Se non hai mai utilizzato Google Cloud, crea un account per valutare il rendimento 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 workload.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the On-Demand Scanning API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Installa Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init -
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the On-Demand Scanning API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Installa Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init -
Aggiungi il componente local-extract all'installazione di Google Cloud CLI
Utilizzo di Google Cloud CLI Component Manager
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
dnfconyumnel comando precedente.
-
Per Debian/Ubuntu:
- Concedi il ruolo IAM Amministratore scansione on demand all'utente o al account di servizio che utilizzerai con On-Demand Scanning. Se utilizzi l'account proprietario del progetto per eseguire le scansioni, puoi saltare questo passaggio.
Scansione di un'immagine container
Scansione locale:
gcloud artifacts docker images scan IMAGE_URI \ [--location=(us,europe,asia)] [--async]Per un'immagine locale, utilizza uno dei seguenti formati per il IMAGE_URI:
REPOSITORY:TAGREPOSITORY
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 il IMAGE_URI:
HOSTNAME/PROJECT_ID/REPOSITORY_ID/IMAGE_ID@sha256:HASHHOSTNAME/PROJECT_ID/REPOSITORY_ID/IMAGE_ID:HASHHOSTNAME/PROJECT_ID/REPOSITORY_ID/IMAGE_IDHOSTNAME/PROJECT_ID/IMAGE_ID@sha256:HASHHOSTNAME/PROJECT_ID/IMAGE_ID:HASHHOSTNAME/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 regione multiregionale in cui viene eseguita la scansione. La scelta di una regione multiregionale più vicina alla tua posizione fisica riduce al minimo la latenza. Le località disponibili sono:us,europeeasia. La località predefinita èus.--asyncè un flag per eseguire il processo di scansione in modo asincrono. Se ometti questo flag, il terminale verrà bloccato fino al completamento del processo 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 della scansione 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 dell'operazione a lunga esecuzione.
Continuando con l'esempio della sezione relativa alla 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 delle 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 di scansione, 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 esegui il polling dell'operazione a lunga esecuzione, al termine della scansione.
--limit=Xè un flag facoltativo che limita il numero di occorrenze visualizzate 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 in formato Grafeas. In questo caso, mostra una vulnerabilità di gravità media rilevata nell'immagine.
I risultati della scansione sono disponibili per 48 ore dopo il completamento dell'operazione di scansione.
Passaggi successivi
- Utilizza l'API On-Demand Scanning nella pipeline di Cloud Build.
- Utilizza Artifact Analysis per eseguire la scansione e aggiornare continuamente le informazioni sulle vulnerabilità delle immagini archiviate in Artifact Registry.