Analyser des images à la demande

L'API d'analyse à la demande vous permet d'analyser des images stockées localement sur votre ordinateur, dans Container Registry ou dans Artifact Registry. Cela vous permet de contrôler avec précision les conteneurs que vous souhaitez rechercher pour détecter les failles. Vous pouvez utiliser l'analyse à la demande pour analyser des images dans votre pipeline CI/CD avant de décider de les stocker dans un registre.

Consultez la page Tarifs pour en savoir plus.

Cette page explique comment analyser manuellement les images de conteneurs avec l'analyse à la demande.

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 gratuits pour exécuter, tester et déployer des charges de travail.
  2. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  4. Activez l'API On-Demand Scanning

    Activer l'API

  5. Installez Google Cloud CLI.
  6. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init
  7. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  8. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  9. Activez l'API On-Demand Scanning

    Activer l'API

  10. Installez Google Cloud CLI.
  11. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init
  12. Ajoutez le composant local-extract à votre installation du SDK Cloud.

    Utiliser le gestionnaire de composants du SDK Cloud

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

    Utiliser votre gestionnaire de packages 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.

  13. Accordez le rôle IAM Administrateur à la demande au compte utilisateur ou 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.

Analyser une image de conteneur

Pour analyser une image de conteneur, exécutez la commande suivante:

gcloud artifacts docker images scan IMAGE_URI [--remote] [--location=(us,europe,asia)] [--async]

Où :

  • --remote est un indicateur facultatif à utiliser si votre image est hébergée à distance, sur Artifact Registry ou Container Registry. 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 fichier IMAGE_URI doit inclure le paramètre REPOSTIORY_ID.

    Pour une image locale, omettez l'indicateur --remote et utilisez l'un des formats suivants pour IMAGE_URI:

    • IMAGE_ID:TAG
    • IMAGE_ID
  • --location est une option facultative permettant de sélectionner manuellement l'emplacement multirégional dans lequel l'analyse a été effectuée. Choisir une zone multirégionale plus proche de votre emplacement physique réduit la latence. Les emplacements disponibles sont les suivants: us, europe et asia. L'emplacement par défaut est us.

  • --async est une option facultative permettant d'exécuter le processus d'analyse de manière asynchrone. Si vous omettez cette option, 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'option --async:

$ gcloud artifacts docker images scan ubuntu:latest

✓ 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: ubuntu:latest
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 failles. Le nom est la valeur de scan dans la dernière ligne du message de sortie.

Analyse asynchrone

L'exemple suivant montre le résultat de l'exécution d'une analyse asynchrone:

$ gcloud artifacts docker images scan ubuntu:latest --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: ubuntu:latest
name: projects/my-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16

Elle 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, obtenu à partir du résultat de sa commande d'analyse asynchrone, pour vérifier l'état de l'opération.

gcloud artifacts docker images get-operation LRO_ID

LRO_ID correspond à l'ID d'opération de longue durée.

Poursuivez avec l'exemple de la section d'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: ubuntu:latest
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 de failles. Le nom est 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 d'analyse une fois l'opération d'analyse terminée, utilisez la commande suivante:

gcloud artifacts docker images list-vulnerabilities SCAN_NAME [--limit=X]

Où :

  • SCAN_NAME est le nom de l'analyse. Pour le trouver au bas du résultat, vous devez interroger l'opération de longue durée une fois l'analyse terminée.
  • --limit=X est une option facultative qui limite le nombre d'occurrences affichées dans le résultat.

Exemple :

gcloud artifacts docker images list-vulnerabilities \
projects/my-project/locations/us/scans/2fe2bfb8-f0c5-4dd6-a8c8-38961869767a

createTime: '2021-01-05T23:05:42.956227Z'
kind: VULNERABILITY
name: projects/my-project/locations/us/occurrences/f82a1efd-a261-4973-acbd-f9854d8b8135
noteName: projects/goog-vulnz/notes/CVE-2018-1000654
resourceUri: ubuntu:latest
updateTime: '2021-01-05T23:05:42.956227Z'
vulnerability:
  cvssScore: 7.1
  effectiveSeverity: LOW
  packageIssue:
  - affectedCpeUri: cpe:/o:canonical:ubuntu_linux:20.04
    affectedPackage: libtasn1-6
    affectedVersion:
      kind: NORMAL
      name: 4.16.0
      revision: '2'
    fixedCpeUri: cpe:/o:canonical:ubuntu_linux:20.04
    fixedPackage: libtasn1-6
    fixedVersion:
      kind: MAXIMUM
  severity: HIGH

Le résultat de cette commande est une liste d'occurrences au format Grafeas. Dans ce cas, une faille élevée a été détectée dans l'image.

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

Étape suivante