Condividi tramite


Guida introduttiva: Restare aggiornati con gli aggiornamenti e la sicurezza delle dipendenze delle immagini del contenitore con Dependabot e Copacetic

In questa guida introduttiva verrà illustrato il processo per configurare e usare Dependabot e Copacetic per semplificare, gestire e rimanere aggiornati con gli aggiornamenti delle dipendenze software e migliorare la sicurezza delle immagini dei contenitori nella supply chain sicura dei contenitori.

Questi strumenti automatizzano il processo, assicurandosi che le immagini del contenitore siano sempre aggiornate e sicure.

In questa guida introduttiva si apprende come:

Aggiornare le dipendenze dell'immagine del contenitore e la sicurezza usando Dependabot. Monitorare, analizzare e applicare patch in modo continuo alle immagini del contenitore usando Copa.

Prerequisiti

  • Una sottoscrizione di Azure. Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
  • Versione più recente dell'interfaccia della riga di comando di Azure installata e configurata per la sottoscrizione.
  • Un Registro Azure Container esistente nella sottoscrizione.

Aggiornare le dipendenze dell'immagine del contenitore e la sicurezza usando Dependabot

Dependabot è uno strumento che automatizza il processo di mantenimento aggiornato delle dipendenze software. Funziona analizzando il repository per individuare le dipendenze obsolete e creando richieste pull per aggiornarle alla versione più recente. Verifica la disponibilità di aggiornamenti delle dipendenze su base giornaliera e crea richieste pull per aggiornarle. È possibile configurare Dependabot per creare richieste pull per tutti i tipi di dipendenze, incluse le immagini Docker. È consigliabile usare dependabot per aumentare automaticamente le dipendenze nei Dockerfile, nei file yaml di Kubernetes e nei file yaml dei valori del grafico Helm per ottenere le patch di sicurezza più recenti e ridurre i rischi per la sicurezza.

Usare Dependabot con GitHub

  • Seguire le istruzioni per configurare Dependabot con GitHub qui

Usare Dependabot con Azure DevOps

  • Seguire le istruzioni per configurare Dependabot con Azure DevOps:
  1. Concedere le autorizzazioni creando un account del servizio con nome YOUR-PROJECT-NAME Build Service (YOUR-ORGANIZATION-NAME) con le autorizzazioni seguenti:

    -Force Push -Contribute to pull requests -Create branch

Autorizzazioni del servizio di compilazione

  1. Configurare Dependabot aggiungendo un dependabot file di configurazione simile a questo esempio:

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

  2. Creare una pipeline di Azure DevOps aggiungendo un azure-pipeline.yaml file con il contenuto seguente:

     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 }
    

  3. Eseguire la pipeline Creare e verificare la nuova pipeline ADO dal file precedente azure-pipelines.yaml .

Dependabot supporta attualmente l'aggiornamento delle dipendenze dell'immagine del contenitore in vari scenari, tra cui Dockerfile, Kubernetes YAML e valori Helm.yaml. Quando si specificano immagini nei file di configurazione, è possibile seguire questa sintassi:

-Dockerfile -Kubernetes YAML -Helm values.yaml

Nota

La sintassi consente a Dependabot di identificare e aggiornare le dipendenze dell'immagine del contenitore all'interno dei file di configurazione, assicurandosi di rimanere aggiornati con le versioni più recenti e le patch di sicurezza.


# 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

In alternativa, per Helm values.yamlè possibile usare il version campo per specificare la versione dell'immagine:

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

Monitorare in modo continuo, analizzare e applicare patch alle immagini del contenitore usando Copacetic

Copacetic (copa) è un progetto open source open source supportato da Microsoft che applica direttamente patch alle vulnerabilità del pacchetto del sistema operativo Linux nelle immagini del contenitore, in base ai risultati dell'analisi delle vulnerabilità provenienti da strumenti scanner più diffusi. Copacetic consente di applicare rapidamente patch ai contenitori senza andare a monte per una ricompilazione completa. Ciò consentirà alle immagini del contenitore di ridistribuire rapidamente nell'ambiente di produzione. La copacetica è solo per le vulnerabilità del sistema operativo Linux. Per le vulnerabilità a livello di app, è necessario eseguire patch prima della compilazione dell'immagine.

Usare Copacetic

  1. Seguire la guida introduttiva per iniziare a usare Copa.

  2. Pipeline ADO di esempio:

    -È possibile trovare una pipeline di Azure DevOps di esempio per l'uso di Copa qui.

Copa può anche essere integrato nei flussi di lavoro di Github Actions per applicare patch alle vulnerabilità delle immagini usando l'azione copacetica. Questa azione applica patch a un set di immagini designate per un repository usando i report sulle vulnerabilità associati.

Passaggi successivi