GSP1184

Présentation
Les failles logicielles sont des points faibles qui peuvent entraîner une défaillance accidentelle du système ou permettre à des personnes malintentionnées de compromettre votre logiciel. Artifact Analysis propose deux types d'analyse de l'OS pour détecter les failles dans les conteneurs :
- L'API On-Demand Scanning vous permet d'analyser manuellement les images de conteneurs pour détecter les failles de l'OS, en local sur votre ordinateur ou à distance dans Artifact Registry. Vous pouvez ainsi contrôler précisément les conteneurs que vous souhaitez analyser pour détecter les failles.
- L'API Container Scanning vous permet d'automatiser la détection des failles de l'OS en analysant chaque image que vous transférez vers Artifact Registry. Vous pouvez utiliser On-Demand Scanning pour analyser les images de votre pipeline CI/CD avant de décider de les stocker ou non dans un registre. L'activation de cette API active également les analyses des packages de langage pour les failles Go et Java.
Dans cet atelier, vous allez apprendre à créer des images de conteneurs stockées dans Artifact Registry et à rechercher les failles qu'elles contiennent avec Cloud Build.
Points abordés
Dans cet atelier, vous allez apprendre à réaliser les opérations suivantes :
- Créer des images avec Cloud Build
- Utiliser Artifact Registry pour les conteneurs
- Utiliser l'analyse automatique des failles
- Configurer On-Demand Scanning
- Ajouter l'analyse des images de votre pipeline CI/CD dans Cloud Build
Prérequis
Avant de cliquer sur le bouton "Démarrer l'atelier"
Lisez ces instructions. Les ateliers sont minutés, et vous ne pouvez pas les mettre en pause. Le minuteur, qui démarre lorsque vous cliquez sur Démarrer l'atelier, indique combien de temps les ressources Google Cloud resteront accessibles.
Cet atelier pratique vous permet de suivre vous-même les activités dans un véritable environnement cloud, et non dans un environnement de simulation ou de démonstration. Nous vous fournissons des identifiants temporaires pour vous connecter à Google Cloud le temps de l'atelier.
Pour réaliser cet atelier :
- Vous devez avoir accès à un navigateur Internet standard (nous vous recommandons d'utiliser Chrome).
Remarque : Ouvrez une fenêtre de navigateur en mode navigation privée pour effectuer cet atelier. Vous éviterez ainsi les conflits entre votre compte personnel et le compte temporaire de participant, qui pourraient entraîner des frais supplémentaires facturés sur votre compte personnel.
- Vous disposez d'un temps limité. N'oubliez pas qu'une fois l'atelier commencé, vous ne pouvez pas le mettre en pause.
Remarque : Si vous possédez déjà votre propre compte ou projet Google Cloud, veillez à ne pas l'utiliser pour réaliser cet atelier afin d'éviter que des frais supplémentaires ne vous soient facturés.
Démarrer l'atelier et se connecter à la console Google Cloud
-
Cliquez sur le bouton Démarrer l'atelier. Si l'atelier est payant, un pop-up s'affiche pour vous permettre de sélectionner un mode de paiement.
Sur la gauche, vous trouverez le panneau Détails concernant l'atelier, qui contient les éléments suivants :
- Le bouton Ouvrir la console Google Cloud
- Le temps restant
- Les identifiants temporaires que vous devez utiliser pour cet atelier
- Des informations complémentaires vous permettant d'effectuer l'atelier
-
Cliquez sur Ouvrir la console Google Cloud (ou effectuez un clic droit et sélectionnez Ouvrir le lien dans la fenêtre de navigation privée si vous utilisez le navigateur Chrome).
L'atelier lance les ressources, puis ouvre la page Se connecter dans un nouvel onglet.
Conseil : Réorganisez les onglets dans des fenêtres distinctes, placées côte à côte.
Remarque : Si la boîte de dialogue Sélectionner un compte s'affiche, cliquez sur Utiliser un autre compte.
-
Si nécessaire, copiez le nom d'utilisateur ci-dessous et collez-le dans la boîte de dialogue Se connecter.
{{{user_0.username | "Username"}}}
Vous trouverez également le nom d'utilisateur dans le panneau Détails concernant l'atelier.
-
Cliquez sur Suivant.
-
Copiez le mot de passe ci-dessous et collez-le dans la boîte de dialogue Bienvenue.
{{{user_0.password | "Password"}}}
Vous trouverez également le mot de passe dans le panneau Détails concernant l'atelier.
-
Cliquez sur Suivant.
Important : Vous devez utiliser les identifiants fournis pour l'atelier. N'utilisez pas les identifiants de votre compte Google Cloud.
Remarque : Si vous utilisez votre propre compte Google Cloud pour cet atelier, des frais supplémentaires peuvent vous être facturés.
-
Procédez tel qu'indiqué ci-dessous sur les pages suivantes :
- Acceptez les conditions d'utilisation.
- N'ajoutez pas d'options de récupération ni d'authentification à deux facteurs (ce compte est temporaire).
- Ne vous inscrivez pas à des essais sans frais.
Après quelques instants, la console Cloud s'ouvre dans cet onglet.
Remarque : Pour afficher un menu contenant la liste des produits et services Google Cloud, cliquez sur le menu de navigation en haut à gauche.
Activer Cloud Shell
Cloud Shell est une machine virtuelle qui contient de nombreux outils pour les développeurs. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud. Cloud Shell vous permet d'accéder via une ligne de commande à vos ressources Google Cloud.
- Cliquez sur Activer Cloud Shell
en haut de la console Google Cloud.
Une fois connecté, vous êtes en principe authentifié et le projet est défini sur votre ID_PROJET : . Le résultat contient une ligne qui déclare l'ID_PROJET pour cette session :
Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}
gcloud est l'outil de ligne de commande pour Google Cloud. Il est préinstallé sur Cloud Shell et permet la complétion par tabulation.
- (Facultatif) Vous pouvez lister les noms des comptes actifs à l'aide de cette commande :
gcloud auth list
- Cliquez sur Autoriser.
Résultat :
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- (Facultatif) Vous pouvez lister les ID de projet à l'aide de cette commande :
gcloud config list project
Résultat :
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
Remarque : Pour consulter la documentation complète sur gcloud, dans Google Cloud, accédez au guide de présentation de la gcloud CLI.
Configuration de l'environnement
- Dans Cloud Shell, définissez l'ID et le numéro de votre projet. Enregistrez-les en tant que variables
PROJECT_ID et PROJECT_NUMBER :
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
--format='value(projectNumber)')
- Activez tous les services nécessaires :
gcloud services enable \
cloudkms.googleapis.com \
cloudbuild.googleapis.com \
container.googleapis.com \
containerregistry.googleapis.com \
artifactregistry.googleapis.com \
containerscanning.googleapis.com \
ondemandscanning.googleapis.com \
binaryauthorization.googleapis.com
Cliquez sur Vérifier ma progression pour valider l'objectif.
Activer les API requises
Tâche 1 : Créer des images avec Cloud Build
Dans cette section, vous allez créer un pipeline de compilation automatisé pour compiler votre image de conteneur, l'analyser, puis évaluer les résultats. Si aucune faille CRITICAL n'est détectée, l'image est transférée vers le dépôt. Si des failles CRITICAL sont détectées, la compilation échoue et se ferme.
- Accordez l'accès pour le compte de service Cloud Build :
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" \
--role="roles/iam.serviceAccountUser"
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" \
--role="roles/ondemandscanning.admin"
Cloud Build aura besoin d'autorisations pour accéder à l'API On-Demand Scanning. Accordez l'accès à l'aide des commandes suivantes.
- Créez un répertoire et faites-en un répertoire de travail :
mkdir vuln-scan && cd vuln-scan
- Définissez un exemple d'image :
Créez un fichier nommé Dockerfile avec le contenu suivant :
cat > ./Dockerfile << EOF
FROM gcr.io/google-appengine/debian11
# System
RUN apt update && apt install python3-pip -y
# App
WORKDIR /app
COPY . ./
RUN pip3 install Flask==1.1.4
RUN pip3 install gunicorn==20.1.0
CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app
EOF
- Créez un fichier nommé main.py avec le contenu suivant :
cat > ./main.py << EOF
import os
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
name = os.environ.get("NAME", "Worlds")
return "Hello {}!".format(name)
if __name__ == "__main__":
app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
EOF
Créer le pipeline Cloud Build
Vous allez créer un fichier cloudbuild.yaml dans votre répertoire, qui sera utilisé pour le processus automatisé. Pour cet atelier, les étapes sont limitées au processus de compilation du conteneur. En pratique, vous incluez des instructions et des tests spécifiques à l'application en plus des étapes du conteneur.
- Créez le fichier à l'aide de la commande suivante :
cat > ./cloudbuild.yaml << EOF
steps:
# build
- id: "build"
name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', '{{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image', '.']
waitFor: ['-']
EOF
- Exécutez le pipeline CI :
Envoyez la compilation pour traitement :
gcloud builds submit
- Une fois le processus de compilation lancé, ouvrez le tableau de bord Cloud Build dans la console Cloud pour afficher le contenu.
Cliquez sur Vérifier ma progression pour valider l'objectif.
Créer les images avec Cloud Build
Tâche 2 : Utiliser Artifact Registry pour les conteneurs
Créer un dépôt Artifact Registry
Vous utiliserez Artifact Registry pour stocker et analyser vos images.
- Créez le dépôt à l'aide de la commande suivante :
gcloud artifacts repositories create artifact-scanning-repo \
--repository-format=docker \
--location={{{ project_0.default_region | "REGION" }}} \
--description="Docker repository"
- Configurez Docker pour qu'il utilise vos identifiants gcloud lorsque vous accédez à Artifact Registry :
gcloud auth configure-docker {{{ project_0.default_region | "REGION" }}}-docker.pkg.dev
- Modifiez le pipeline Cloud Build pour transférer l'image obtenue vers Artifact Registry :
cat > ./cloudbuild.yaml << EOF
steps:
# build
- id: "build"
name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', '{{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image', '.']
waitFor: ['-']
# push to artifact registry
- id: "push"
name: 'gcr.io/cloud-builders/docker'
args: ['push', '{{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image']
images:
- {{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image
EOF
- Exécutez le pipeline CI :
gcloud builds submit
Cliquez sur Vérifier ma progression pour valider l'objectif.
Créer un dépôt Artifact Registry
Tâche 3 : Analyse automatique des failles
L'analyse se déclenche automatiquement chaque fois que vous transférez une nouvelle image vers Artifact Registry. Les informations sur les failles sont mises à jour en continu lorsque de nouvelles failles sont découvertes.
Dans cette section, vous allez examiner l'image que vous venez de créer et de transférer vers Artifact Registry, et explorer les résultats de l'analyse des failles.
Examiner les détails de l'image
Une fois le processus de compilation terminé, examinez les résultats de l'image et des failles dans le tableau de bord Artifact Registry.
- Dans la console Cloud, ouvrez Artifact Registry.
- Cliquez sur artifact-scanning-repo pour afficher le contenu.
- Cliquez sur les détails de l'image.
- Cliquez sur le dernier condensé de votre image.
- Une fois l'analyse terminée, cliquez sur l'onglet Failles correspondant à l'image.
Dans l'onglet "Failles", vous verrez les résultats de l'analyse automatique de l'image que vous venez de créer.
L'analyse automatique est activée par défaut. Explorez les paramètres d'Artifact Registry pour découvrir comment activer ou désactiver l'analyse automatique.
Tâche 4 : On-Demand Scanning
Dans différents scénarios, vous devrez peut-être effectuer une analyse avant de transférer l'image vers un dépôt. Par exemple, un développeur de conteneurs peut vouloir analyser une image et corriger les problèmes qu'il trouve avant de transférer le code vers le contrôle de source.
Dans l'exemple ci-dessous, vous allez créer et analyser l'image localement avant d'agir en fonction des résultats.
- Utilisez Docker en local pour créer l'image dans votre cache local :
docker build -t {{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image .
- Une fois l'image créée, demandez son analyse :
gcloud artifacts docker images scan \
{{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image \
--format="value(response.scan)" > scan_id.txt
Les résultats de l'analyse sont stockés dans un serveur de métadonnées. La tâche se termine en indiquant l'emplacement des résultats dans le serveur de métadonnées.
- Examinez le résultat stocké dans le fichier
scan_id.txt :
cat scan_id.txt
Notez l'emplacement du rapport des résultats de l'analyse dans le serveur de métadonnées.
- Pour afficher les résultats réels de l'analyse, utilisez la commande
list-vulnerabilities à l'emplacement du rapport indiqué dans le fichier de sortie :
gcloud artifacts docker images list-vulnerabilities $(cat scan_id.txt)
La sortie contient une quantité importante de données sur toutes les failles de l'image. Les humains utilisent rarement les données stockées directement dans le rapport. Les résultats sont généralement utilisés par un processus automatisé.
- Utilisez les commandes ci-dessous pour lire les détails du rapport et consigner les éventuelles failles CRITICAL détectées :
export SEVERITY=CRITICAL
gcloud artifacts docker images list-vulnerabilities $(cat scan_id.txt) --format="value(vulnerability.effectiveSeverity)" | if grep -Fxq ${SEVERITY}; then echo "Failed vulnerability check for ${SEVERITY} level"; else echo "No ${SEVERITY} Vulnerabilities found"; fi
Le résultat de cette commande sera :
Failed vulnerability check for CRITICAL level
Cliquez sur Vérifier ma progression pour valider l'objectif.
Analyser les images à l'aide d'On-Demand Scanning.
Tâche 5 : Utiliser l'analyse des artefacts du pipeline CI/CD dans Cloud Build
Tout d'abord, vous allez accorder à Cloud Build les droits d'accès à l'API On-Demand Scanning.
- Utilisez les commandes suivantes :
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" \
--role="roles/iam.serviceAccountUser"
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" \
--role="roles/ondemandscanning.admin"
- Mettez à jour le pipeline Cloud Build avec la commande suivante. Elle crée un fichier
cloudbuild.yaml qui sera utilisé pour le processus automatisé :
cat > ./cloudbuild.yaml << EOF
steps:
# build
- id: "build"
name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', '{{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image', '.']
waitFor: ['-']
#Run a vulnerability scan at _SECURITY level
- id: scan
name: 'gcr.io/cloud-builders/gcloud'
entrypoint: 'bash'
args:
- '-c'
- |
(gcloud artifacts docker images scan \
{{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image \
--location us \
--format="value(response.scan)") > /workspace/scan_id.txt
#Analyze the result of the scan
- id: severity check
name: 'gcr.io/cloud-builders/gcloud'
entrypoint: 'bash'
args:
- '-c'
- |
gcloud artifacts docker images list-vulnerabilities \$(cat /workspace/scan_id.txt) \
--format="value(vulnerability.effectiveSeverity)" | if grep -Fxq CRITICAL; \
then echo "Failed vulnerability check for CRITICAL level" && exit 1; else echo "No CRITICAL vulnerability found, congrats !" && exit 0; fi
#Retag
- id: "retag"
name: 'gcr.io/cloud-builders/docker'
args: ['tag', '{{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image', '{{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image:good']
#pushing to artifact registry
- id: "push"
name: 'gcr.io/cloud-builders/docker'
args: ['push', '{{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image:good']
images:
- {{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image
EOF
Pour cet exemple, les étapes sont limitées au processus de compilation du conteneur. En pratique, vous incluez des instructions et des tests spécifiques à l'application en plus des étapes du conteneur.
- Envoyez la compilation pour traitement afin de vérifier qu'elle échoue lorsqu'une faille de gravité CRITICAL est détectée.
gcloud builds submit
- Examinez l'échec de la compilation sur la page Historique Cloud Build.
Cliquez sur Vérifier ma progression pour valider l'objectif.
Vérifiez que la compilation échoue lorsqu'une faille de gravité CRITICAL est détectée.
Corriger la faille
Mettez à jour le fichier Dockerfile de façon à utiliser une image de base qui ne contient pas de failles CRITICAL.
- Écrasez le fichier Dockerfile de façon à utiliser l'image Debian 10 avec la commande suivante :
cat > ./Dockerfile << EOF
FROM python:3.8-alpine
# App
WORKDIR /app
COPY . ./
RUN pip3 install Flask==2.1.0
RUN pip3 install gunicorn==20.1.0
RUN pip3 install Werkzeug==2.2.2
CMD exec gunicorn --bind :\$PORT --workers 1 --threads 8 main:app
EOF
- Envoyez la compilation pour traitement afin de vérifier qu'elle réussira si aucune faille de gravité CRITICAL n'est détectée :
gcloud builds submit
- Dans la console Cloud, accédez à Cloud Build > Historique Cloud Build pour vérifier que la compilation a réussi.
Cliquez sur Vérifier ma progression pour valider l'objectif.
Corriger la faille
Examiner les résultats de l'analyse
Vérifiez l'image correcte dans Artifact Registry.
- Ouvrez Artifact Registry dans la console Cloud.
- Cliquez sur artifact-scanning-repo pour afficher le contenu.
- Cliquez sur les détails de l'image.
- Cliquez sur le dernier condensé de votre image.
- Cliquez sur l'onglet Failles correspondant à l'image.
Félicitations !
Vous avez appris à créer une image avec Cloud Build et à la stocker dans Artifact Registry. Vous avez également vu comment l'analyse d'artefacts se déclenche automatiquement. Vous savez également comment analyser les images "à la demande", avant qu'elles ne soient transférées au contrôle du code source.
Étapes suivantes et informations supplémentaires
Formations et certifications Google Cloud
Les formations et certifications Google Cloud vous aident à tirer pleinement parti des technologies Google Cloud. Nos cours portent sur les compétences techniques et les bonnes pratiques à suivre pour être rapidement opérationnel et poursuivre votre apprentissage. Nous proposons des formations pour tous les niveaux, à la demande, en salle et à distance, pour nous adapter aux emplois du temps de chacun. Les certifications vous permettent de valider et de démontrer vos compétences et votre expérience en matière de technologies Google Cloud.
Dernière modification du manuel : 23 juillet 2025
Dernier test de l'atelier : 23 juillet 2025
Copyright 2024 Google LLC Tous droits réservés. Google et le logo Google sont des marques de Google LLC. Tous les autres noms de société et de produit peuvent être des marques des sociétés auxquelles ils sont associés.