Guida introduttiva: Aggiornare e proteggere le dipendenze dell'immagine del contenitore con Dependabot e Copacetic
In questa guida introduttiva verranno illustrati i passaggi necessari per configurare Dependabot e Copacetic, che consentono di automatizzare gli aggiornamenti delle dipendenze software e di rafforzare la sicurezza delle immagini dei contenitori in un ambiente di supply chain sicuro. Usando questi strumenti, è possibile assicurarsi 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.
- Dependabot automatizza il processo di mantenimento aggiornato delle dipendenze delle immagini del contenitore, riducendo il rischio di vulnerabilità.
- Monitorare, analizzare e applicare patch in modo continuo alle immagini del contenitore usando Copacetic.
- Copacetic fornisce il monitoraggio e l'analisi continuative delle immagini del contenitore, assicurandosi che siano sicure e applicate patch a vulnerabilità note.
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 indicazioni e i consigli per gestire efficacemente le richieste pull generate da Dependabot, usando GitHub Actions per migliorare le prestazioni di Dependabot e risolvere gli errori dependabot comuni.
- Configurare Dependabot con GitHub qui.
Usare Dependabot con Azure DevOps
Seguire le istruzioni per configurare Dependabot con Azure DevOps, assicurandosi che le dipendenze dell'immagine del contenitore rimangano aggiornate con le versioni più recenti e i miglioramenti della sicurezza.
- Concedere le autorizzazioni: creare un account del servizio con il nome
YOUR-PROJECT-NAME Build Service (YOUR-ORGANIZATION-NAME)
e concedergli le autorizzazioni seguenti:
- Forza push
- Collaborazione per le richieste pull
- Crea ramo
Assicurarsi di sostituire YOUR-PROJECT-NAME
e YOUR-ORGANIZATION-NAME
con i nomi effettivi del progetto e dell'organizzazione.
Configurare Dependabot: per configurare Dependabot, aggiungere un
dependabot.yml
file di configurazione al repository. Di seguito è riportato un esempio dell'aspetto del file di configurazione:version: 2 updates: - package-ecosystem: "docker" directory: "/" assignees: - "dependabot"
Questa configurazione configura Dependabot per un progetto che usa Docker, specificando che la directory radice ("/") è la posizione in cui si trovano i file Docker e assegnando Dependabot per gestire gli aggiornamenti. È possibile personalizzare la configurazione in base alle esigenze del progetto.
Creare una pipeline di Azure DevOps: per creare una pipeline di Azure DevOps, aggiungere un
azure-pipeline.yml
file al repository 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 }
Eseguire la pipeline: creare e verificare la nuova pipeline ADO dal file precedente
azure-pipelines.yaml
.
Dependabot può aggiornare le dipendenze dell'immagine del contenitore in vari scenari, ad esempio:
- Dockerfile
- Kubernetes YAML
- Valori Helm.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.
Quando si specificano immagini nei file di configurazione, usare la sintassi seguente:
# 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
Seguire la guida introduttiva per Copacetic fornisce istruzioni per applicare patch alle immagini del contenitore usando i risultati dell'analisi delle vulnerabilità.
Esaminare la pipeline ADO di esempio per un file di configurazione della pipeline di Azure DevOps di esempio per l'uso di Copacetic. La pipeline è progettata per integrare Copacetic nel flusso di lavoro CI/CD, consentendo il monitoraggio continuo, l'analisi e l'applicazione di patch alle immagini del contenitore per individuare le vulnerabilità.
Copacetic 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.