L'utilisation de l'analyse à la demande dans le cadre de votre pipeline Cloud Build vous permet de bloquer les compilations si l'image du conteneur présente des failles dont le niveau de gravité correspond à un niveau prédéfini.
Ce tutoriel explique comment utiliser Cloud Build pour créer votre image de conteneur à partir du code source, l'analyser pour détecter les failles, vérifier les niveaux de gravité des failles et transférer l'image vers Artifact Registry s'il n'y a pas de failles d'un niveau de gravité spécifique.
Nous vous recommandons de créer un projet Google Cloud pour ce tutoriel et de suivre les étapes dans un environnement isolé.
Objectifs
- Créez une image avec Cloud Build.
- Analysez l'image créée à l'aide de l'analyse à la demande.
- Évaluez les niveaux de failles acceptables.
- Stockez l'image dans Artifact Registry.
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Une fois que vous avez terminé les tâches décrites dans ce document, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.
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, Cloud Build, and Artifact Registry APIs.
- 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, Cloud Build, and Artifact Registry APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
Rôles requis
Le compte de service que vous utilisez avec Cloud Build nécessite les rôles suivants:
Administrateur On-Demand Scanning (
roles/ondemandscanning.admin
)Rédacteur Artifact Registry (
roles/artifactregistry.writer
)
Le compte de service Cloud Build par défaut dispose des autorisations requises pour les dépôts Artifact Registry du même projet. Si vos dépôts se trouvent dans le même projet que celui que vous utilisez pour Cloud Build, il vous suffit d'accorder le rôle Administrateur de l'analyse à la demande.
Si vous utilisez un compte de service fourni par l'utilisateur pour Cloud Build, vous devez accorder les deux rôles.
Préparer votre fichier source
Pour ce tutoriel, vous allez créer une image à partir d'un Dockerfile. Un fichier Dockerfile est un fichier source qui contient des instructions permettant à Docker de créer une image.
Ouvrez un terminal, créez un répertoire nommé
ods-tutorial
et accédez-y:mkdir ods-tutorial && cd ods-tutorial
Créez un fichier nommé
Dockerfile
avec le contenu suivant :# Debian10 image FROM gcr.io/google-appengine/debian10:latest # Ensures that the built image is always unique RUN apt-get update && apt-get -y install uuid-runtime && uuidgen > /IAMUNIQUE
Créer un dépôt Artifact Registry
Définissez l'ID de projet sur celui dans lequel vous avez activé les API:
gcloud config set project PROJECT_ID
Créez un dépôt Docker nommé
ods-build-repo
à l'emplacementus-central1
:gcloud artifacts repositories create ods-build-repo --repository-format=docker \ --location=us-central1 --description="Repository for scan and build"
Vérifiez que votre dépôt a bien été créé:
gcloud artifacts repositories list
Compiler et analyser
Dans cette section, vous allez exécuter votre pipeline de compilation à l'aide d'un fichier de configuration de compilation. Un fichier de configuration de compilation indique à Cloud Build comment effectuer plusieurs tâches en fonction de vos spécifications.
Dans le dossier
ods-tutorial/
, créez le fichiercloudbuild.yaml
avec le contenu suivant:steps: - id: build name: gcr.io/cloud-builders/docker entrypoint: /bin/bash args: - -c - | docker build -t us-central1-docker.pkg.dev/$_PROJECT_ID/ods-build-repo/ods-test:latest -f ./Dockerfile . && docker image inspect us-central1-docker.pkg.dev/$_PROJECT_ID/ods-build-repo/ods-test:latest --format \ '{{index .RepoTags 0}}@{{.Id}}' > /workspace/image-digest.txt && cat image-digest.txt - id: scan name: gcr.io/google.com/cloudsdktool/cloud-sdk entrypoint: /bin/bash args: - -c - | gcloud artifacts docker images scan us-central1-docker.pkg.dev/$_PROJECT_ID/ods-build-repo/ods-test:latest \ --format='value(response.scan)' > /workspace/scan_id.txt - id: severity check name: gcr.io/google.com/cloudsdktool/cloud-sdk entrypoint: /bin/bash args: - -c - | gcloud artifacts docker images list-vulnerabilities $(cat /workspace/scan_id.txt) \ --format='value(vulnerability.effectiveSeverity)' | if grep -Exq $_SEVERITY; \ then echo 'Failed vulnerability check' && exit 1; else exit 0; fi - id: push name: gcr.io/cloud-builders/docker entrypoint: /bin/bash args: - -c - | docker push us-central1-docker.pkg.dev/$_PROJECT_ID/ods-build-repo/ods-test:latest images: ['us-central1-docker.pkg.dev/$_PROJECT_ID/ods-build-repo/ods-test:latest']
Ce fichier inclut l'emplacement et le dépôt précédemment créés dans Artifact Registry. Si vous décidez d'utiliser des valeurs différentes, modifiez le fichier
cloudbuild.yaml
en conséquence. Les valeurs dePROJECT_ID
etSEVERITY
sont transmises au script dans la commande de compilation.Spécifiez les niveaux
SEVERITY
de faille que vous souhaitez bloquer et lancez votre compilation.Vous pouvez utiliser les valeurs suivantes pour
SEVERITY
:CRITICAL
HIGH
MEDIUM
LOW
Vous pouvez spécifier plusieurs niveaux de gravité à l'aide d'une expression régulière.
Dans l'exemple suivant, vous spécifiez les valeurs de gravité
CRITICAL
etHIGH
. Cette commande demande à Cloud Build de rechercher les failles classées au niveau de gravitéHIGH
ou supérieur.gcloud builds submit --substitutions=_PROJECT_ID=PROJECT_ID,_SEVERITY='"CRITICAL|HIGH"' \ --config cloudbuild.yaml
Où
- PROJECT_ID est l'ID de votre projet.
- SEVERITY vous permet de définir les niveaux de gravité que vous souhaitez bloquer. Si l'analyse à la demande détecte des failles correspondant à l'un des niveaux de gravité spécifiés, la compilation échoue.
Interpréter vos résultats
Lorsque vous définissez la valeur SEVERITY
sur CRITICAL|HIGH
, l'analyse à la demande recherche des failles au niveau HIGH
et au niveau CRITICAL
, qui est plus grave. Si aucune faille correspondante n'est détectée dans votre image, la compilation aboutit et Cloud Build transfère votre image vers Artifact Registry.
Le résultat ressemble à ce qui suit :
DONE
--------------------------------------------------------------------------------------------------------------------------------------------
ID CREATE_TIME DURATION SOURCE IMAGES STATUS
abb3ce73-6ae8-41d1-9080-7d74a7ecd7bc 2021-03-15T06:50:32+00:00 1M48S gs://ods-tests_cloudbuild/source/1615791031.906807-a648d10faf4a46d695c163186a6208d5.tgz us-central1-docker.pkg.dev/ods-tests/ods-build-repo/ods-test (+1 more) SUCCESS
Si l'analyse à la demande détecte des failles HIGH
ou CRITICAL
dans votre image, l'étape de compilation scan
échoue, les étapes de compilation suivantes ne démarrent pas et Cloud Build ne transfère pas d'image vers Artifact Registry.
Le résultat ressemble à ce qui suit :
Step #2 - "severity check": Failed vulnerability check
Finished Step #2 - "severity check"
ERROR
ERROR: build step 2 "gcr.io/cloud-builders/gcloud" failed: step exited with non-zero status: 1
Dans ce tutoriel, vos résultats peuvent varier, car l'exemple de code source est une distribution Linux accessible au public, debian10:latest
. Les distributions Linux et les données de failles associées sont mises à jour en continu.
Pour en savoir plus sur les outils et les bonnes pratiques Google Cloud supplémentaires qui vous aideront à protéger votre chaîne d'approvisionnement logicielle, consultez Sécurité de la chaîne d'approvisionnement logicielle.
Pour en savoir plus sur les bonnes pratiques de gestion des failles Linux, vous pouvez suivre une formation en ligne gratuite proposée par The Linux Foundation. Consultez Développer des logiciels sécurisés.
Effectuer un nettoyage
Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.
Supprimer le projet
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Supprimer des ressources individuelles
Avant de supprimer le dépôt, assurez-vous que toutes les images que vous souhaitez conserver sont disponibles à un autre emplacement.
Pour supprimer le dépôt :
Console
Ouvrez la page Dépôts de la console Google Cloud.
Dans la liste des dépôts, sélectionnez le dépôts
ods-build-repo
.Cliquez sur Supprimer.
gcloud
Pour supprimer le dépôt ods-build-repo
, exécutez la commande suivante:
gcloud artifacts repositories delete ods-build-repo --location=us-central1