Partager via


Démarrage rapide : Mettre à jour et sécuriser les dépendances d’image conteneur avec Dependabot et Copacetic

Dans ce guide de démarrage rapide, vous allez découvrir les étapes nécessaires pour configurer Dependabot et Copacetic, ce qui vous aidera à automatiser les mises à jour des dépendances logicielles et à renforcer la sécurité des images conteneur dans un environnement de chaîne d’approvisionnement sécurisé. En utilisant ces outils, vous pouvez vous assurer que vos images conteneur sont toujours actuelles et sécurisées.

Dans ce guide de démarrage rapide, vous apprenez à :

  • Mettez à jour les dépendances d’image conteneur et la sécurité à l’aide de Dependabot.
    • Dependabot automatise le processus de mise à jour des dépendances de vos images conteneur, ce qui réduit le risque de vulnérabilités.
  • Surveillez, analysez et corrigez en continu les images conteneur à l’aide de Copacetic.
    • Copacetic fournit une surveillance et une analyse continues de vos images conteneur, ce qui garantit qu’elles sont sécurisées et corrigées contre les vulnérabilités connues.

Prérequis

  • Un abonnement Azure. Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.
  • La dernière version d’Azure CLI installée et configurée pour votre abonnement.
  • Azure Container Registry (ACR) existant dans votre abonnement.

Mettre à jour les dépendances d’image conteneur et la sécurité à l’aide de Dependabot

Dependabot est un outil qui automatise le processus de mise à jour des dépendances logicielles. Il fonctionne en analysant vos référentiels pour détecter les dépendances obsolètes et en créant des demandes de tirage pour les mettre à jour vers la dernière version. Il case activée des mises à jour de vos dépendances quotidiennement et crée des demandes de tirage pour les mettre à jour. Vous pouvez configurer Dependabot pour créer des demandes de tirage pour tous les types de dépendances, y compris les images Docker. Nous vous recommandons d’utiliser dependabot pour contourner automatiquement les dépendances dans vos fichiers Dockerfiles, les fichiers yaml Kubernetes et les valeurs de graphique Helm pour obtenir les derniers correctifs de sécurité et réduire les risques de sécurité.

Utiliser Dependabot avec GitHub

Suivez les instructions et recommandations pour gérer efficacement les demandes de tirage déclenchées par Dependabot, à l’aide de GitHub Actions pour améliorer les performances de Dependabot et résoudre les erreurs courantes de Dependabot.

  • Configurez Dependabot avec GitHub ici.

Utiliser Dependabot avec Azure DevOps

Suivez les instructions pour configurer Dependabot avec Azure DevOps, en veillant à ce que vos dépendances d’image conteneur restent à jour avec les dernières versions et améliorations de sécurité.

  1. Accorder des autorisations : créez un compte de service avec le nom YOUR-PROJECT-NAME Build Service (YOUR-ORGANIZATION-NAME) et accordez-lui les autorisations suivantes :
  • Forcer l’envoi
  • Contribuer aux demandes d’extraction
  • Créer une branche

* Recherchez les autorisations du service Build.*

Veillez à remplacer et YOUR-ORGANIZATION-NAME à utiliser YOUR-PROJECT-NAME les noms réels de votre projet et de votre organisation.

  1. Configurer Dependabot : pour configurer Dependabot, ajoutez un dependabot.yml fichier de configuration à votre référentiel. Voici un exemple de ce que votre fichier de configuration peut ressembler à ceci :

      version: 2
      updates:
        - package-ecosystem: "docker"
          directory: "/"
          assignees:
            - "dependabot"
    

Cette configuration configure Dependabot pour un projet qui utilise Docker, en spécifiant que le répertoire racine (« / ») est l’emplacement des fichiers Docker et l’affectation de Dependabot pour gérer les mises à jour. Vous pouvez personnaliser la configuration en fonction des besoins de votre projet.

  1. Créez un pipeline Azure DevOps : Pour créer un pipeline Azure DevOps, ajoutez un azure-pipeline.yml fichier à votre référentiel avec le contenu suivant :

     schedules:
       - cron: '0 14 * * *'
         displayName: 'Every day at 7am PST'
         branches:
           include: [main]
         always: true
    
     trigger: none
    
     jobs:
       - job:
         steps:
         - script: |
             git clone https://github.com/dependabot/dependabot-core.git
             cd dependabot-core
    
             DOCKER_BUILDKIT=1 docker build \
               --build-arg "USER_UID=$(id -u)" \
               --build-arg "USER_GID=$(id -g)" \
               -t "dependabot/dependabot-core" .
             cd ..
           displayName: build dependabot-core Docker image
    
         - script: |
             git clone https://github.com/dependabot/dependabot-script.git
             cd dependabot-script
    
             docker run -v "$(pwd):/home/dependabot/dependabot-script" -w /home/dependabot/dependabot-script dependabot/dependabot-core bundle install -j 3 --path vendor
           displayName: install dependencies
    
         - script: |
             #!/bin/bash
             SYSTEM_COLLECTIONURI_TRIM=`echo "${SYSTEM_COLLECTIONURI:22}"`
             PROJECT_PATH="$SYSTEM_COLLECTIONURI_TRIM$SYSTEM_TEAMPROJECT/_git/$BUILD_REPOSITORY_NAME"
             echo "path: $PROJECT_PATH"
    
             docker run  -v "$(pwd)/dependabot-script:/home/dependabot/dependabot-script" \
                         -w '/home/dependabot/dependabot-script' \
                         -e AZURE_ACCESS_TOKEN=$(System.AccessToken) \
                         -e PACKAGE_MANAGER=docker \
                         -e PROJECT_PATH=$PROJECT_PATH \
                         -e DIRECTORY_PATH=/ \
                         -e OPTIONS="$OPTIONS" \
                         dependabot/dependabot-core bundle exec ruby ./generic-update-script.rb
           displayName: "run dependabot"
           env:
             OPTIONS: |
               { "kubernetes_updates": true }
    

  2. Exécutez le pipeline : créez et vérifiez le nouveau pipeline ADO à partir du fichier ci-dessus azure-pipelines.yaml .

Dependabot peut mettre à jour les dépendances d’image conteneur dans différents scénarios, tels que :

  • Dockerfile
  • Kubernetes YAML
  • Helm values.yaml

Remarque

La syntaxe permet à Dependabot d’identifier et de mettre à jour les dépendances d’image conteneur au sein de vos fichiers de configuration, ce qui vous permet de rester à jour avec les dernières versions et correctifs de sécurité.

Lorsque vous spécifiez des images dans vos fichiers de configuration, utilisez la syntaxe suivante :


# Dockerfile
foo:
  image:
    repository: sql/sql
    tag: 1.2.3
    registry: docker.io

# Helm values.yaml
foo:
  image:
    repository: sql/sql
    tag: 1.2.3
    registry: docker.io

Helm values.yamlVous pouvez également utiliser le version champ pour spécifier la version de l’image :

foo:
  image:
    repository: sql/sql
    version: 1.2.3

Surveiller, analyser et corriger en continu des images conteneur à l’aide de Copacetic

Copacetic (copa) est un projet open source CNCF soutenu par Microsoft qui corrige directement les vulnérabilités du package de système d’exploitation Linux dans les images conteneur en fonction des résultats de l’analyse des vulnérabilités provenant des outils de scanneurs populaires. Copacetic permet de corriger rapidement les conteneurs sans passer amont pour une reconstruction complète. Cela aidera les images conteneur à redéployer rapidement en production. Copacetic est uniquement destiné aux vulnérabilités du système d’exploitation Linux. Pour les vulnérabilités au niveau de l’application, les correctifs doivent être effectués avant la génération de l’image.

Utiliser copacétique

  1. Suivez le guide de démarrage rapide pour Copacetic fournit des instructions pour corriger les images conteneur en utilisant les résultats de l’analyse des vulnérabilités.

  2. Passez en revue l’exemple de pipeline ADO pour obtenir un exemple de fichier de configuration de pipeline Azure DevOps pour utiliser Copacetic. Le pipeline est conçu pour intégrer Copacetic dans votre flux de travail CI/CD, ce qui permet de surveiller, d’analyser et de corriger en continu les images conteneur pour les vulnérabilités.

  3. La copacétique peut également être intégrée aux workflows Github Actions pour corriger les vulnérabilités d’image à l’aide de l’action copacétique. Cette action met à jour un ensemble d’images désignées pour un référentiel à l’aide de leurs rapports de vulnérabilité associés.

Étapes suivantes