L'API On-Demand Scanning consente di analizzare le immagini archiviate localmente sul computer o in remoto in Artifact Registry o Container Registry. Puoi utilizzare la scansione on demand per analizzare le immagini nella pipeline CI/CD per rilevare vulnerabilità di sistema e vulnerabilità dei pacchetti Go prima di decidere se archiviarle in un registro. Per informazioni sui prezzi, consulta la pagina relativa ai prezzi.
Questa pagina descrive come analizzare manualmente le immagini container per rilevare vulnerabilità del sistema e dei pacchetti Go.
Prima di iniziare
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the On-Demand Scanning API.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the On-Demand Scanning API.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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
conyum
nel comando precedente.
-
Per Debian/Ubuntu:
- 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.
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
.--location
è un flag facoltativo per selezionare manualmente la regione multipla 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
easia
. La posizione predefinita èus
.--async
è un flag facoltativo per eseguire il processo di scansione in modo asincrono. Se ometti questo flag, il terminale si bloccherà fino al completamento della procedura di scansione.SCAN_NAME è il nome della scansione. Puoi trovarlo nell'ultima riga dell'output quando esegui una scansione sincrona o interroghi l'operazione di lunga durata, al termine della scansione.
--limit=X
è un flag facoltativo che limita il numero di occorrenze mostrate nell'output.X
è un valore numerico.packageType:GO_STDLIB
. Vai alle vulnerabilità della libreria standard. Ciò indica che la vulnerabilità è stata rilevata nella toolchain Go utilizzata per creare il file binario o nella libreria standard inclusa nella toolchain. Una possibile soluzione è aggiornare la toolchain di build.packageType:GO
. Vulnerabilità dei pacchetti Go. Ciò indica che la vulnerabilità è stata trovata in un pacchetto di terze parti. Una possibile soluzione è aggiornare i moduli dipendenti.- 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.
Scansionare un'immagine container
Per le scansioni locali e remote, puoi utilizzare i seguenti flag facoltativi:
Scansione sincrona
L'esempio seguente mostra l'output di una scansione sincrona, senza il
flag --async
:
$ gcloud artifacts docker images scan golang:1.17.6-alpine ✓ 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: '2022-01-11T16:58:11.711487Z' resourceUri: golang:1.16.13-alpine 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 golang:1.17.6-alpine --async ✓ Scanning container image ✓ Locally extracting packages and versions from local container image ✓ Remotely initiating analysis of packages and versions Done. Check operation [projects/my-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16] for status. metadata: '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesMetadata createTime: '2022-01-11T16:58:11.711487Z' resourceUri: golang:1.16.13-alpine 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.
Esegui il polling dell'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 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/my-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16 done: true metadata: '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesMetadata createTime: '2022-01-11T16:58:11.711487Z' resourceUri: golang:1.16.13-alpine 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, utilizza il seguente comando:
gcloud artifacts docker images list-vulnerabilities SCAN_NAME [--limit=X]
Dove:
Ad esempio:
createTime: '2022-01-11T16:58:11.972043Z' kind: VULNERABILITY name: projects/my-project/locations/us/occurrences/0c607d9b-aff4-4cde-86b7-e2c0a865aadd noteName: projects/goog-vulnz/notes/CVE-2021-38297 resourceUri: golang:1.16.13-alpine updateTime: '2022-01-11T16:58:11.972043Z' vulnerability: cvssScore: 7.5 effectiveSeverity: CRITICAL longDescription: Go before 1.16.9 and 1.17.x before 1.17.2 has a Buffer Overflow via large arguments in a function invocation from a WASM module, when GOARCH=wasm GOOS=js is used. packageIssue: - affectedCpeUri: cpe:/o:alpine:alpine_linux:3.15 affectedPackage: go affectedVersion: fullName: 1.16.13 kind: NORMAL name: 1.16.13 effectiveSeverity: CRITICAL fixedCpeUri: cpe:/o:alpine:alpine_linux:3.15 fixedPackage: go fixedVersion: fullName: 1.17.2 kind: NORMAL name: 1.17.2 packageType: GO_STDLIB relatedUrls: - label: More Info url: https://security-tracker.debian.org/tracker/CVE-2021-38297 - label: More Info url: https://access.redhat.com/security/cve/CVE-2021-38297 - label: More Info url: https://nvd.nist.gov/vuln/detail/CVE-2021-38297 severity: HIGH shortDescription: CVE-2021-38297
L'output di questo comando è un elenco di occorrenze nel formato Grafeas. In questo caso, viene mostrata una vulnerabilità di gravità elevata trovata nell'immagine.
La scansione on demand identifica due tipi di vulnerabilità dei pacchetti Go:
I risultati della scansione sono disponibili per 48 ore dopo il completamento dell'operazione di scansione.