GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Come indicizzare le dipendenze dell'immagine Docker con Syft

Syft è un'utilità CLI che genera una distinta base del software (SBOM) per le immagini del contenitore. Un SBOM è un catalogo di dipendenze utilizzate dalla tua immagine. Ti dà visibilità sui "materiali" che formano il filesystem della tua immagine.

La produzione di un SBOM può aiutarti a identificare catene di approvvigionamento di pacchetti eccessivamente complesse che ti mettono a rischio di attacchi di confusione delle dipendenze. La distribuzione di una SBOM accanto alla tua immagine informa gli utenti di ciò che si trova sotto la superficie. Ciò fornisce un utile punto di partenza per rafforzare la sicurezza della catena di approvvigionamento.

Syft è sviluppato da Anchore che offre anche un motore di scansione di container completo. Syft CLI è in grado di estrarre elenchi di pacchetti dalle immagini utilizzando i più diffusi sistemi operativi e linguaggi di programmazione. Sono supportate sia le immagini Docker che OCI.

Installazione di Syft

È disponibile uno script di installazione per scaricare l'ultimo binario Syft e aggiungerlo al tuo percorso:

curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin

Gli utenti Mac possono anche ottenere Syft da Homebrew aggiungendo anchore/syft repository e l'installazione di syft pacchetto.

Una volta che hai Syft sul tuo sistema, esegui syft nel tuo terminale per visualizzare i comandi disponibili. Puoi generare completamenti per la tua shell eseguendo syft completion .

Usa syft version per trovare la versione della tua installazione. Controlla periodicamente la pagina dei tag GitHub per trovare nuove versioni, quindi riutilizza lo script di installazione per scaricare ogni aggiornamento.

Scansione di un'immagine

La funzionalità di Syft è attualmente esposta da un singolo sottocomando, syft packages . Passagli un tag immagine per generare una SBOM per:

syft packages alpine:latest

Syft scaricherà l'immagine, ne scansionerà il contenuto e produrrà un catalogo di pacchetti scoperti. L'output verrà mostrato come una tabella nel tuo terminale. Ciascun risultato include il nome, la versione e il tipo del pacchetto rilevato.

L'elenco dei pacchetti per questa immagine è breve. Poiché si tratta di un'immagine di base Alpine, i pacchetti installati sono intenzionalmente ottimizzati per fornire la superficie più piccola possibile. Immagini più grandi potrebbero contenere centinaia o migliaia di pacchetti in diversi formati. Può essere utile combinare Syft con gli strumenti del terminale Unix esistenti come grep e awk per estrarre i dati che stai cercando.

syft packages example-image:latest | grep example-package-to-find

Tipi di pacchetto supportati

Syft supporta molti formati di pacchetti popolari nei principali sistemi operativi e linguaggi di programmazione. L'elenco include:

  • APK (Alpino), DEB (Debian) e RPM (Fedora) Pacchetti OS.
  • Identificazione delle distribuzioni Linux tra Alpine, CentOS, Debian e RHEL Favors.
  • Moduli Vai
  • Java inJAR , EAR e WAR variazioni
  • Pacchetti NPM e Filati
  • Ruote e uova di Python
  • Pacchetti di rubini

Sebbene non tutte le lingue siano coperte, trarrai comunque vantaggio dalla scansione a livello di sistema operativo indipendentemente dallo stack scelto dalla tua applicazione.

Modifica del formato di output

Il formato di output predefinito è chiamato table . Rende una tabella di risultati basata su colonne nel tuo terminale, creando una nuova riga per ogni pacchetto rilevato. Un formato leggibile alternativo è text che presenta un elenco di pacchetti con Version e Type campi nidificati sotto ogni sezione.

Syft supporta anche diversi formati programmatici:

  • json – Salva i dati del pacchetto in una struttura JSON.
  • cyclonedx – Un report CycloneDX in formato XML.
  • spdx e spdx-json – Rapporti compatibili con SPDX in formato tag-value o JSON.

L'utilizzo di uno di questi rapporti consente di archiviare i risultati in un file per riferimenti futuri:

syft packages alpine:latest -o json > alpine-packages.json

I formati standardizzati CycloneDX e SPDX possono aiutare a integrare le scansioni Syft nelle pipeline CI/CD. I dati sono accessibili ad altri strumenti dell'ecosistema che funzionano con elenchi di pacchetti e risultati SBOM.

Syft si integra anche con Grype, il rilevatore di vulnerabilità del filesystem container standalone di Anchore. I dati di Syft possono essere inseriti direttamente in Grype se utilizzi il formato di output JSON.

syft packages example-image:latest -o json > sbom.json
grype sbom:./sbom.json

Grype confronterà l'elenco dei pacchetti con il suo indice di vulnerabilità note. Evidenzierà i pacchetti che contengono problemi, offrendoti un punto di partenza immediato per migliorare la tua posizione di sicurezza.

Utilizzo di altre sorgenti di immagini

Syft può utilizzare immagini da altre fonti oltre ai registri Docker pubblici. Puoi fare riferimento a qualsiasi immagine conforme a OCI, tramite un tag di registro o come tar di immagine salvata. I percorsi degli archivi di immagini possono essere consegnati direttamente a Syft:

docker image save my-image:latest > my-image.tar
syft packages ./my-image.tar

Syft funziona anche con i registri Docker privati. Utilizza le tue credenziali esistenti nel tuo ~/.docker/config.json file:

{
    "auths": {
        "registry.example.com": {
            "username": "",
            "password": ""
        }
    }
}

Sebbene Syft si concentri sulle scansioni di immagini del contenitore, può anche creare un SBOM per percorsi di filesystem arbitrari. Puoi utilizzare Syft per indicizzare i pacchetti del tuo host scansionando le directory che contengono comunemente file binari e librerie software:

syft packages dir:/usr/bin

Devi aggiungere esplicitamente la dir: schema se stai facendo riferimento a un percorso al di fuori della tua directory di lavoro. Altrimenti Syft cercherà di interpretarlo come un riferimento a un tag immagine.

Conclusione

Syft estrae gli elenchi di pacchetti dalle immagini del contenitore. I dati generati fungono da SBOM per la tua immagine, aumentando la consapevolezza della lunghezza della tua catena di approvvigionamento.

Syft è distribuito come un unico binario che produce report in diversi formati. Può essere facilmente integrato nei sistemi CI/CD per caricare un artefatto SBOM come parte della pipeline di creazione dell'immagine. Ciò aumenta la responsabilità e facilita gli audit trail registrando l'elenco completo del software di ciascuna immagine nel momento in cui viene prodotta.

L'aggiunta di scansioni Syft al tuo flusso di lavoro ti tiene informato sui pacchetti che stai utilizzando. Una volta ottenute queste informazioni, puoi iniziare a valutare ogni pacchetto per determinare se è davvero necessario. Se trovi molti pacchetti che non vengono utilizzati dal tuo carico di lavoro, considera di passare a un'immagine di base minima e di sovrapporre solo il software essenziale.


Docker
  1. Come installare Jenkins con Docker

  2. Come distribuire microservizi con Docker

  3. Come imballare e trasferire immagini Docker da un server all'altro

  4. Come condividere le immagini Docker con altri

  5. Come modificare le immagini Docker

Come sostituire Docker con Podman su un Mac

Come ospitare la tua piattaforma come servizio (PaaS) con Dokku

Come creare un'immagine di Windows Docker con il tag di build Docker

Come copiare file con Docker cp nel tuo Docker Container

Mantieni gestibili le tue immagini Docker con Docker Image Prune

Come creare un'immagine Docker personalizzata con Dockerfile