Analyser manuellement les packages de système d'exploitation

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 ainsi contrôler précisément les conteneurs que vous souhaitez analyser pour détecter les failles. 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. Pour en savoir plus sur la tarification, consultez la page Tarifs.

Cette page explique comment analyser manuellement des images de conteneurs avec On-Demand Scanning.

Avant de commencer

  1. Connectez-vous à votre Google Cloud compte. Si vous n'avez jamais utilisé Google Cloud, créez un compte pour évaluer les performances de nos produits dans des scénarios réels. 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.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. Installez la Google Cloud CLI.

  6. Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  7. Pour initialiser la gcloud CLI, exécutez la commande suivante :

    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.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  11. Installez la Google Cloud CLI.

  12. Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  13. Pour initialiser la gcloud CLI, exécutez la commande suivante :

    gcloud init
  14. Ajoutez le composant local-extract à votre installation de la Google Cloud CLI.

    Utiliser le gestionnaire de composants de la Google Cloud CLI

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

    Utiliser le gestionnaire de packages de votre 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 On-Demand Scanning au compte utilisateur ou au compte de service que vous allez utiliser avec On-Demand Scanning. Si vous utilisez le compte propriétaire du projet pour exécuter les analyses, vous pouvez ignorer cette étape.

Analyser une image de conteneur

  • Analyse locale :

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

    Pour une image locale, utilisez l'un des formats suivants pour le IMAGE_URI :

    • REPOSITORY:TAG
    • REPOSITORY
  • Analyse à distance :

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

    Pour une image à distance, utilisez l'un des formats suivants pour le 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, le IMAGE_URI doit inclure le REPOSITORY_ID.

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

  • --location est une option permettant de sélectionner manuellement l'emplacement multirégional où l'analyse a lieu. Le choix d'un emplacement multirégional 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 permettant d'exécuter le processus d'analyse de manière asynchrone. Si vous omettez cette option, votre terminal se bloque 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 l'analyse des failles. 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 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

Cela 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 résultat, 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

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: 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 l'analyse des failles. Le nom 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 d'analyse terminée, utilisez la commande suivante :

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

Où :

  • SCAN_NAME correspond au nom de l'analyse. Vous le trouverez en bas du résultat lorsque vous interrogez 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. X est une valeur numérique.

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
  cvssv3:
    attackComplexity: ATTACK_COMPLEXITY_LOW
    attackVector: ATTACK_VECTOR_NETWORK
    availabilityImpact: IMPACT_HIGH
    baseScore: 7.2
    confidentialityImpact: IMPACT_HIGH
    exploitabilityScore: 1.2
    impactScore: 5.9
    integrityImpact: IMPACT_HIGH
    privilegesRequired: PRIVILEGES_REQUIRED_HIGH
    scope: SCOPE_UNCHANGED
    userInteraction: USER_INTERACTION_NONE
  effectiveSeverity: MEDIUM

Le résultat de cette commande est une liste d'occurrences au format Grafeas. Dans ce cas, il indique une faille de gravité moyenne 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