Analyser automatiquement les packages Java

Ce document explique comment activer l'API Container Scanning, transférer une image vers Artifact Registry et afficher la liste des failles détectées dans l'image.

Artifact Analysis stocke les informations sur les failles sous forme de notes. Une occurrence est créée pour chaque instance d'une note associée à une image. Pour en savoir plus, consultez les documents Présentation et Tarifs.

Avant de commencer

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Artifact Registry and Container Scanning APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.

  6. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  7. To initialize the gcloud CLI, run the following command:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  9. Make sure that billing is enabled for your Google Cloud project.

  10. Enable the Artifact Registry and Container Scanning APIs.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  13. To initialize the gcloud CLI, run the following command:

    gcloud init
  14. Créez un dépôt Docker dans Artifact Registry et transférez-y une image de conteneur avec votre code Java. Si vous ne connaissez pas Artifact Registry, consultez le guide de démarrage rapide pour Docker.

    Pour savoir comment utiliser Cloud Build pour compiler et conteneuriser vos applications Java, consultez Compiler, tester et conteneuriser des applications Java.
  15. Afficher les failles des images

    Artifact Analysis analyse les nouvelles images au fur et à mesure de leur importation dans Artifact Registry. Cette analyse extrait des informations sur les packages du conteneur.

    Vous pouvez afficher les occurrences de failles de vos images dans Artifact Registry à l'aide de la console Google Cloud , de Google Cloud CLI ou de l'API Container Analysis. Si une image présente des failles, vous pouvez obtenir les détails.

    Artifact Analysis ne met à jour les métadonnées que pour les images transférées ou extraites au cours des 30 derniers jours. Au bout de 30 jours, les métadonnées ne seront plus mises à jour et les résultats seront obsolètes. De plus, Artifact Analysis archive les métadonnées obsolètes depuis plus de 90 jours. Elles ne sont alors plus disponibles dans la console Google Cloud , dans gcloud ni à l'aide de l'API. Pour lancer une nouvelle analyse d'une image avec des métadonnées obsolètes ou archivées, extrayez cette image. L'actualisation des métadonnées peut prendre jusqu'à 24 heures.

    Afficher les occurrences dans la console Google Cloud

    Pour afficher les failles d'une image :

    1. Obtenez la liste des dépôts.

      Ouvrir la page "Dépôts"

    2. Dans la liste des dépôts, cliquez sur un dépôt.

    3. Dans la liste des images, cliquez sur le nom d'une image.

      Le nombre total de failles pour chaque résumé d'image est affiché dans la colonne Vulnerabilities (Failles).

      Capture d'écran d'une image avec des failles

    4. Pour afficher la liste des failles d'une image, cliquez sur le lien dans la colonne Vulnerabilities (Failles).

      La section Résultats de l'analyse affiche un récapitulatif des types de packages analysés, du nombre total de failles, des failles pour lesquelles des correctifs sont disponibles, des failles sans correctifs et de la gravité effective.

      Capture d'écran de la section "Résultats de l'analyse" avec les failles, les correctifs et le niveau de gravité effectif

      Le tableau des failles répertorie le nom CVE (Common Vulnerabilities and Exposures) de chaque faille détectée, la gravité effective, le score CVSS (Common Vulnerability Scoring System), les correctifs (le cas échéant), le nom du package contenant la faille et le type de package.

      Vous pouvez filtrer et trier ces fichiers pour vérifier un fichier, un répertoire ou un type de fichier spécifique par extension de fichier.

      La consoleGoogle Cloud affiche jusqu'à 1 200 failles dans ce tableau. Si votre image comporte plus de 1 200 failles, vous devez utiliser gcloud ou l'API pour afficher la liste complète.

    5. Pour en savoir plus sur une faille CVE spécifique, cliquez sur son nom.

    6. Pour afficher les détails d'une occurrence de faille, tels que le numéro de version et l'emplacement concerné, cliquez sur Afficher ou Afficher corrigée dans la ligne contenant le nom de la faille. Le texte du lien est Afficher pour les failles sans correctif et Afficher les correctifs pour les failles auxquelles un correctif a été appliqué.

    Afficher les occurrences à l'aide de gcloud

    Pour afficher les occurrences d'une image dans Artifact Registry, exécutez la commande suivante :

      gcloud artifacts docker images list --show-occurrences \
          LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
    

    Où :

    • LOCATION est l'emplacement régional ou multirégional du dépôt.
    • PROJECT_ID est l'ID de projet de votre console Google Cloud .
    • REPOSITORY est le nom du dépôt où l'image est stockée.
    • IMAGE_ID est le nom de l'image dans le dépôt. Vous ne pouvez pas spécifier de tag d'image avec cette commande.

      Par défaut, la commande renvoie les 10 images les plus récentes. Pour afficher un nombre différent d'images, utilisez l'option --show-occurrences-from. Par exemple, la commande suivante renvoie les 25 images les plus récentes.

      gcloud artifacts docker images list --show-occurrences-from=25 \
          us-central1-docker.pkg.dev/my-project/my-repo/my-image
      

    Pour afficher les failles d'un tag d'image ou d'une couche :

      gcloud artifacts docker images describe \
          LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID:TAG \
          --show-package-vulnerability
    

    ou

      gcloud artifacts docker images describe \
          LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID@sha256:HASH \
          --show-package-vulnerability
    

    Où :

    • LOCATION est l'emplacement régional ou multirégional du dépôt.
    • PROJECT_ID est l'ID de projet de votre console Google Cloud .
    • REPOSITORY est le nom du dépôt où l'image est stockée.
    • IMAGE_ID est le nom de l'image dans le dépôt.
    • TAG est le tag d'image sur lequel vous souhaitez obtenir des informations.
    • HASH correspond au condensé de l'image.

      Artifact Analysis renvoie des résultats incluant packageType.

    Pour filtrer les occurrences de failles :

      gcloud artifacts docker images list --show-occurrences \
          LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID \
          --occurrence-filter=FILTER_EXPRESSION
    

    Où :

    • LOCATION est l'emplacement régional ou multirégional du dépôt.
    • PROJECT_ID est l'ID de projet de votre console Google Cloud .
    • REPOSITORY est le nom du dépôt où l'image est stockée.
    • IMAGE_ID est le nom de l'image dans le dépôt.
    • FILTER_EXPRESSION est un exemple d'expression de filtre au format expliqué dans Filtrer les occurrences de failles.

    Afficher les occurrences à l'aide de l'API

    Pour obtenir la liste des occurrences dans votre projet :

     curl -X GET -H "Content-Type: application/json" -H \
        "Authorization: Bearer $(gcloud auth print-access-token)" \
        https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences
    

    Pour obtenir un résumé des failles de votre projet :

     curl -X GET -H "Content-Type: application/json" -H \
        "Authorization: Bearer $(gcloud auth print-access-token)" \
        https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences:vulnerabilitySummary
    

    Pour obtenir des informations sur une occurrence spécifique :

     curl -X GET -H "Content-Type: application/json" -H \
        "Authorization: Bearer $(gcloud auth print-access-token)" \
        https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences/OCCURRENCE_ID
    

    Afficher les failles dans Cloud Build

    Si vous utilisez Cloud Build, vous pouvez également afficher les failles des images dans le panneau latéral Informations sur la sécurité de la console Google Cloud .

    Le panneau latéral Insights sur la sécurité fournit un aperçu des informations de sécurité des compilations pour les artefacts stockés dans Artifact Registry. Pour en savoir plus sur le panneau latéral et sur la façon dont vous pouvez utiliser Cloud Build pour protéger votre chaîne d'approvisionnement logicielle, consultez Afficher les insights de sécurité des compilations.

    Filtrer les occurrences

    Vous pouvez utiliser des chaînes de filtre dans les commandes gcloud et l'API Artifact Analysis pour filtrer les occurrences avant de les afficher. Les sections ci-dessous décrivent les filtres de recherche compatibles.

    Afficher les occurrences d'un type spécifique

    Vous pouvez utiliser la valeur kind pour filtrer par type d'occurrence. Consultez les types disponibles.

    Les exemples suivants montrent comment filtrer les occurrences de déploiement d'une image :

    gcloud

    Dans gcloud CLI, exécutez la commande suivante :

    gcloud artifacts docker images list --show-occurrences \
        --occurrence-filter='kind="DEPLOYMENT"' --format=json \
        LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
    

    Où :

    • DEPLOYMENT est le genre de l'occurrence.
    • LOCATION est l'emplacement régional ou multirégional du dépôt.
    • PROJECT_ID est l'ID de projet de votre console Google Cloud .
    • REPOSITORY est le nom du dépôt où l'image est stockée.
    • IMAGE_ID est le nom de l'image dans le dépôt.

    API

    Dans votre requête API, utilisez l'expression de filtre suivante :

    kind="DEPLOYMENT" AND resourceUrl="RESOURCE_URL"

    Où :

    • DEPLOYMENT est le genre de l'occurrence.
    • RESOURCE_URL est l'URL complète de l'image au format https://LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID@sha256:HASH.

    Vous pouvez utiliser la fonction hasPrefix pour filtrer avec une portée plus large.

    Par exemple, les filtres suivants permettent de filtrer les occurrences d'un genre spécifique dans de nombreuses images :

    kind="NOTE_KIND" AND has_prefix(resourceUrl, "RESOURCE_URL_PREFIX")

    Où :

    • RESOURCE_URL_PREFIX spécifie une sous-chaîne à partir d'une URL de ressource.
      • Pour filtrer toutes les versions d'une image, omettez le résumé de l'image. Utilisez le format suivant : https://LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID@.
      • Pour filtrer toutes les images d'un projet, spécifiez uniquement l'emplacement de la ressource et le projet. Utilisez le format suivant : https://LOCATION-docker.pkg.dev/PROJECT_ID/.

    Afficher les occurrences de failles

    Pour récupérer la liste des occurrences de failles d'une image, vous pouvez filtrer par type d'occurrence VULNERABILITY.

    gcloud

    Dans gcloud CLI, exécutez la commande suivante :

    gcloud artifacts docker images list \
        --show-occurrences \
        --occurrence-filter='kind="VULNERABILITY"' \
        --format=json \
        LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
    

    Où :

    • VULNERABILITY est le genre de l'occurrence.
    • LOCATION est l'emplacement régional ou multirégional du dépôt.
    • PROJECT_ID est l'ID de projet de votre console Google Cloud .
    • REPOSITORY est le nom du dépôt où l'image est stockée.
    • IMAGE_ID est le nom de l'image dans le dépôt.

    API

    Dans votre requête API, utilisez l'expression de filtre suivante :

    GET https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences?filter=kind%3D%22VULNERABILITY%22%20AND%20resourceUrl%3D%22ENCODED_RESOURCE_URL%22

    Où :

    • ENCODED_RESOURCE_URL est le chemin d'accès encodé à votre image. Pour en savoir plus sur l'encodage, consultez Encodage d'URL.

    Pour en savoir plus sur l'utilisation de l'API, consultez projects.occurrences.get.

    Filtrer par type de package

    Pour limiter les résultats de l'analyse des failles à un seul type de package, exécutez la commande gcloud CLI suivante :

      gcloud artifacts docker images list /
          --show-occurrences /
          --occurrence-filter='kind="VULNERABILITY" AND packageType="PACKAGE_TYPE"' /
          LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
    

    Où :

    • VULNERABILITY est le genre de l'occurrence.
    • PACKAGE_TYPE correspond au type de package de langue de l'application. Les types disponibles sont les suivants : COMPOSER, GO, MAVEN, NPM, NUGET, PYTHON, RUBYGEMS et RUST.
    • LOCATION est l'emplacement régional ou multirégional du dépôt.
    • PROJECT_ID est l'ID de projet de votre console Google Cloud .
    • REPOSITORY est le nom du dépôt où l'image est stockée.
    • IMAGE_ID est le nom de l'image dans le dépôt. Vous ne pouvez pas spécifier de tag d'image avec cette commande.

    Afficher les images associées à une note spécifique

    Vous pouvez récupérer une liste de ressources associées à un ID de note spécifique. Par exemple, vous pouvez répertorier les images avec une faille CVE spécifique.

    Pour répertorier toutes les images d'un projet associées à une note particulière, utilisez l'expression de filtre suivante :

    gcloud

    gcloud artifacts docker images list /
        --show-occurrences /
        --occurrence-filter='noteProjectId="goog-vulnz" AND noteId="NOTE_ID"' /
        LOCATION-docker.pkg.dev/PROJECT_ID
    

    Où :

    • goog-vulnz est le PROVIDER_PROJECT_ID pour l'analyse des failles Artifact Analysis. Si vous utilisez Artifact Analysis dans un projet personnalisé, vous pouvez remplacer cette valeur par votre propre ID de projet de fournisseur.
    • LOCATION est l'emplacement régional ou multirégional du dépôt.
    • PROJECT_ID est l'ID de projet de votre console Google Cloud .
    • NOTE_ID est l'ID de la note. Par exemple, lorsqu'une faille est détectée dans les résultats de l'analyse Artifact Analysis, elle utilise souvent un format d'ID CVE semblable à CVE-2019-12345.

    API

    GET https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences?filter=noteProjectId%3D%22goog-vulnz%22%20AND%20resourceUrl%3D%22ENCODED_RESOURCE_URL%22%20AND%20noteId%3D%22NOTE_ID%22

    Où :

    • goog-vulnz est le PROVIDER_PROJECT_ID pour l'analyse des failles Artifact Analysis. Si vous utilisez Artifact Analysis dans un projet personnalisé, vous pouvez remplacer cette valeur par votre propre ID de projet de fournisseur.
    • ENCODED_RESOURCE_URL est le chemin d'accès encodé à votre image. Pour en savoir plus sur l'encodage, consultez Encodage d'URL.
    • NOTE_ID est l'ID de la note. Par exemple, lorsqu'une faille est détectée dans les résultats de l'analyse Artifact Analysis, elle utilise souvent un format d'ID CVE semblable à CVE-2019-12345.

    Pour consulter une image spécifique pour une note spécifique, utilisez l'expression de filtre suivante :

    gcloud

    gcloud artifacts docker images list /
        --show-occurrences /
        --occurrence-filter='noteProjectId="goog-vulnz" AND noteId="NOTE_ID"' /
        LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
    

    • LOCATION est l'emplacement régional ou multirégional du dépôt.
    • PROJECT_ID est l'ID de projet de votre console Google Cloud .
    • REPOSITORY est le nom du dépôt où l'image est stockée.
    • IMAGE_ID est le nom de l'image dans le dépôt. Vous ne pouvez pas spécifier de tag d'image avec cette commande.

    API

    Dans votre requête API, ajoutez l'expression de filtre suivante :

    resourceUrl="RESOURCE_URL" AND noteProjectId="goog-vulnz" \
    AND noteId="NOTE_ID"

    Où :

    • RESOURCE_URL est l'URL complète de l'image au format https://LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID@sha256:HASH.
    • goog-vulnz est le PROVIDER_PROJECT_ID pour l'analyse des failles Artifact Analysis. Si vous utilisez Artifact Analysis dans un projet personnalisé, vous pouvez remplacer cette valeur par votre propre ID de projet de fournisseur.
    • NOTE_ID est l'ID de la note. Les notes relatives à la sécurité sont souvent au format CVE-2019-12345.

    Étapes suivantes

    • Utilisez les notifications Pub/Sub pour recevoir des notifications sur les failles et d'autres métadonnées.

    • Créez des attestations en intégrant Artifact Analysis à l'autorisation binaire pour empêcher les images de conteneurs présentant des problèmes de sécurité connus de s'exécuter dans votre environnement de déploiement.