Analyser manuellement les packages Java

L'API On-Demand Scanning vous permet d'analyser les images stockées en local sur votre ordinateur ou à distance dans Artifact Registry. Vous pouvez utiliser On-Demand Scanning pour analyser les images de votre pipeline CI/CD, afin de détecter les failles du système et les failles des packages Java (Maven) avant de décider de les stocker ou non dans un registre. Pour en savoir plus sur les tarifs, consultez la page Tarifs.

Cette page explique comment analyser manuellement les images de conteneurs pour détecter les failles du système et des packages Maven.

Avant de commencer

  1. Connectez-vous à votre compte Google Cloud . Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits sans frais pour exécuter, tester et déployer des charges de travail.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the On-Demand Scanning API, if it is not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  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.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the On-Demand Scanning API, if it is not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  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. Ajoutez le composant local-extract à votre installation Google Cloud CLI.

    Utiliser le gestionnaire de composants de la Google Cloud CLI

    Le gestionnaire de composants vous invitera à installer les composants requis la première fois que vous exécuterez la commande d'analyse.

    Utiliser votre gestionnaire de paquets 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 par yum dans la commande précédente.

  15. Attribuez le rôle IAM Administrateur de l'analyse à la demande à l'utilisateur ou au compte de service que vous allez utiliser avec l'analyse à la demande. Si vous utilisez le compte propriétaire du projet pour exécuter les analyses, vous pouvez ignorer cette étape.

Rôles requis

Pour obtenir les autorisations nécessaires pour afficher les résultats de l'analyse des packages, demandez à votre administrateur de vous accorder les rôles IAM suivants sur le projet :

Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.

Analyser une image de conteneur

  • Recherche 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 dans Artifact Registry, IMAGE_URI doit inclure REPOSITORY_ID.

Pour les analyses locales et distantes, vous pouvez utiliser les options facultatives suivantes :

  • --location est une option facultative permettant de sélectionner manuellement l'emplacement multirégional où l'analyse a lieu. Choisir un emplacement multirégional plus proche de votre emplacement physique réduit la latence. Les emplacements disponibles sont les suivants : us, europe et asia. La position par défaut est us.

  • --async est un flag 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 le résultat d'une analyse synchrone, sans l'indicateur --async :

$ gcloud artifacts docker images scan jenkins:2.60.3-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: '2021-01-05T23:03:04.185261Z'
  resourceUri: jenkins:2.60.3-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 des failles. Dans l'exemple, le nom de l'analyse correspond à la valeur de scan dans la dernière ligne du message de résultat.

Analyse asynchrone

L'exemple suivant montre le résultat d'une analyse asynchrone :

$ gcloud artifacts docker images scan jenkins:2.60.3-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/cloud-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16] for status.
metadata:
  '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesMetadata
  createTime: '2021-01-05T23:04:54.393510Z'
  resourceUri: jenkins:2.60.3-alpine
name: projects/my-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16

Cette commande 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 issu du résultat 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.

En reprenant 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/cloud-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16

done: true
metadata:
  '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesMetadata
  createTime: '2021-01-05T23:04:54.393510Z'
  resourceUri: jenkins:2.60.3-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 le résultat 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 de l'analyse correspond à la valeur de scan dans la dernière ligne du message de résultat.

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ù :

Exemple :

createTime: '2021-06-29T17:01:18.819477Z'
kind: VULNERABILITY
name: projects/my-project/locations/us/occurrences/06305977-f557-4772-8586-4260684291d3
noteName: projects/my-project/notes/CVE-2014-0114
resourceUri: jenkins:2.60.3-alpine
updateTime: '2021-06-29T17:01:18.819477Z'
vulnerability:
  cvssScore: 4.3
  effectiveSeverity: MEDIUM
  longDescription: http/conn/ssl/SSLConnectionSocketFactory.java in ...
  packageIssue:
  - affectedCpeUri: cpe:/o:alpine:alpine_linux:3.13
    affectedPackage: org.apache.httpcomponents:httpclient
    affectedVersion:
      fullName: 4.0.2
      kind: NORMAL
      name: 4.0.2
    effectiveSeverity: MEDIUM
    fixedCpeUri: cpe:/o:alpine:alpine_linux:3.13
    fixedPackage: org.apache.httpcomponents:httpclient
    fixedVersion:
      fullName: 4.3.6
      kind: NORMAL
      name: 4.3.6
    packageType: MAVEN
  relatedUrls:
  - label: More Info
    url: https://security-tracker.debian.org/tracker/CVE-2015-5262
  severity: MEDIUM
  shortDescription: CVE-2015-5262

Le résultat de cette commande est une liste d'occurrences au format Grafeas. Dans ce cas, une faille de gravité moyenne a été détectée dans l'image. Les failles des packages Maven contiennent le champ packageType:MAVEN.

Les résultats de l'analyse sont disponibles pendant 48 heures après la fin de l'opération d'analyse.

Étapes suivantes