L'API On-Demand Scanning vous permet d'analyser des images stockées localement sur votre ordinateur ou à distance dans Artifact Registry ou Container Registry. Vous pouvez utiliser l'analyse à la demande pour analyser les images de votre pipeline CI/CD à la recherche de failles système et de failles de package Go avant de décider de les stocker dans un registre. Pour en savoir plus sur la tarification, consultez la page Tarifs.
Cette page explique comment analyser manuellement les images de conteneur à la recherche de failles système et de failles de packages Go.
Avant de commencer
- 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.
-
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.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Ajouter le composant local-extract à votre installation de la Google Cloud CLI
À l'aide du Gestionnaire de composants de la Google Cloud CLI
Le gestionnaire de composants vous invite à installer les composants requis la première fois que vous exécutez la commande d'analyse.
À l'aide du gestionnaire de paquets de votre système
-
Pour Debian/Ubuntu:
sudo apt install google-cloud-sdk-local-extract
-
Pour Red Hat/Fedora/CentOS:
sudo dnf install google-cloud-sdk-local-extract
Vous pouvez également remplacer
dnf
paryum
dans la commande précédente.
-
Pour Debian/Ubuntu:
- Attribuez le rôle IAM Administrateur de l'analyse à la demande à l'utilisateur ou au compte de service que vous utiliserez avec l'analyse à la demande. Si vous utilisez le compte propriétaire du projet pour exécuter les analyses, vous pouvez ignorer cette étape.
Analyser une image de conteneur
Analyse locale:
gcloud artifacts docker images scan IMAGE_URI \ [--location=(us,europe,asia)] [--async]
Pour une image locale, utilisez l'un des formats suivants pour IMAGE_URI:
REPOSITORY:TAG
REPOSITORY
Analyse à distance:
gcloud artifacts docker images scan IMAGE_URI \ --remote [--location=(us,europe,asia)] [--async]
Pour une image distante, utilisez l'un des formats suivants pour 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
Pour les images d'Artifact Registry, le IMAGE_URI doit inclure le
REPOSITORY_ID
.
Pour les analyses locales et à distance, vous pouvez utiliser les options facultatives suivantes:
--location
est un indicateur facultatif qui permet de sélectionner manuellement la multirégion dans laquelle l'analyse a lieu. Le choix d'un emplacement multirégional plus proche de votre emplacement physique minimise la latence. Les emplacements disponibles sont les suivants:us
,europe
etasia
. L'emplacement par défaut estus
.--async
est un indicateur facultatif permettant d'exécuter le processus d'analyse de manière asynchrone. Si vous omettez cet indicateur, votre terminal sera bloqué jusqu'à la fin du processus d'analyse.
Analyse synchrone
L'exemple suivant montre la sortie d'une analyse synchrone, sans l'indicateur --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
Utilisez le nom de l'analyse pour récupérer les résultats de l'analyse des failles.
Le nom de l'analyse correspond à la valeur de scan
dans la dernière ligne du message de sortie.
Analyse asynchrone
L'exemple suivant montre le résultat d'une analyse asynchrone:
$ 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
Cela lance une opération de longue durée et renvoie son ID sans bloquer votre terminal. Utilisez l'ID d'opération, la valeur de name
dans la dernière ligne du message de sortie, pour interroger l'opération.
Interroger l'opération de longue durée
Utilisez l'ID d'opération de la sortie de la commande d'analyse asynchrone pour vérifier l'état de l'opération:
gcloud artifacts docker images get-operation LRO_ID
où LRO_ID est l'ID de l'opération de longue durée.
Poursuivant l'exemple de la section sur l'analyse asynchrone, pour vérifier l'état de l'opération:
$ 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
Si la sortie inclut la ligne done: true
, l'opération d'analyse est terminée. Utilisez le nom de l'analyse pour récupérer les résultats des failles.
Le nom correspond à la valeur de scan
dans la dernière ligne du message de sortie.
Récupérer les résultats de l'analyse
Pour récupérer les résultats de l'analyse une fois l'opération terminée, utilisez la commande suivante:
gcloud artifacts docker images list-vulnerabilities SCAN_NAME [--limit=X]
Où :
SCAN_NAME correspond au nom de l'analyse. Vous le trouverez sur la dernière ligne de la sortie lorsque vous exécutez une analyse synchrone ou que vous interrogez l'opération de longue durée, une fois l'analyse terminée.
--limit=X
est un indicateur facultatif qui limite le nombre d'occurrences affichées dans la sortie.X
est une valeur numérique.
Exemple :
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
Le résultat de cette commande est une liste d'occurrences au format Grafeas. Dans ce cas, une faille de niveau de gravité élevé a été détectée dans l'image.
L'analyse à la demande identifie deux types de failles dans les packages Go:
packageType:GO_STDLIB
. Vulnérabilités de la bibliothèque standard Go. Cela indique que la faille a été détectée dans la chaîne d'outils Go utilisée pour créer le binaire ou dans la bibliothèque standard fournie avec la chaîne d'outils. Une solution possible consiste à mettre à niveau votre chaîne d'outils de compilation.packageType:GO
: failles des packages Go. Cela indique que la faille a été détectée dans un package tiers. Une solution possible consiste à mettre à niveau vos modules dépendants.
Les résultats de l'analyse sont disponibles pendant 48 heures après la fin de l'opération d'analyse.
Étape suivante
- Utilisez l'API On-Demand Scanning dans votre pipeline Cloud Build.
- Utilisez Artifact Analysis pour analyser et mettre à jour en permanence les informations sur les failles de vos images stockées dans Artifact Registry.