GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Comment indexer les dépendances de votre image Docker avec Syft

Syft est un utilitaire CLI qui génère une nomenclature logicielle (SBOM) pour les images de conteneurs. Un SBOM est un catalogue de dépendances utilisées par votre image. Il vous donne une visibilité sur les "matériaux" qui forment le système de fichiers de votre image.

La production d'un SBOM peut vous aider à identifier les chaînes d'approvisionnement de colis trop complexes qui vous exposent au risque d'attaques de confusion de dépendance. La distribution d'un SBOM à côté de votre image informe les utilisateurs de ce qui se cache sous la surface. Cela fournit un point de départ utile pour renforcer la sécurité de la chaîne d'approvisionnement.

Syft est développé par Anchore qui propose également un moteur complet d'analyse de conteneurs. La CLI Syft est capable d'extraire des listes de packages à partir d'images à l'aide de systèmes d'exploitation et de langages de programmation courants. Les images Docker et OCI sont prises en charge.

Installer Syft

Un script d'installation est disponible pour télécharger le dernier binaire Syft et l'ajouter à votre chemin :

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

Les utilisateurs de Mac peuvent également obtenir Syft depuis Homebrew en ajoutant le anchore/syft dépôt et installation du syft paquet.

Une fois que vous avez Syft sur votre système, exécutez syft dans votre terminal pour afficher les commandes disponibles. Vous pouvez générer des complétions pour votre shell en exécutant syft completion .

Utiliser la syft version pour trouver la version de votre installation. Consultez régulièrement la page des balises GitHub pour trouver de nouvelles versions, puis réutilisez le script d'installation pour télécharger chaque mise à jour.

Numériser une image

La fonctionnalité de Syft est actuellement exposée par une seule sous-commande, syft packages . Passez-lui une balise d'image pour générer un SBOM pour :

syft packages alpine:latest

Syft téléchargera l'image, analysera son contenu et produira un catalogue des packages découverts. La sortie sera affichée sous forme de tableau dans votre terminal. Chaque résultat inclut le nom, la version et le type du package détecté.

La liste des paquets pour cette image est courte. Comme il s'agit d'une image de base Alpine, les packages installés sont intentionnellement simplifiés pour fournir la plus petite surface possible. Les images plus grandes peuvent contenir des centaines ou des milliers de packages dans plusieurs formats différents. Il peut être utile de combiner Syft avec des outils de terminal Unix existants comme grep et awk pour extraire les données que vous recherchez.

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

Types de packages pris en charge

Syft prend en charge de nombreux formats de packages populaires sur les principaux systèmes d'exploitation et langages de programmation. La liste comprend :

  • APK (Alpin), DEB (Debian) et RPM (Fedora) Paquets de système d'exploitation.
  • Identification des distributions Linux parmi les faveurs d'Alpine, CentOS, Debian et RHEL.
  • Modules Go
  • Java en JAR , EAR , et WAR variantes
  • Packages NPM et Yarn
  • Roues et œufs Python
  • Packs Rubis

Bien que toutes les langues ne soient pas couvertes, vous bénéficierez toujours de l'analyse au niveau du système d'exploitation, quelle que soit la pile choisie pour votre application.

Modifier le format de sortie

Le format de sortie par défaut est appelé table . Il affiche un tableau de résultats en colonnes dans votre terminal, créant une nouvelle ligne pour chaque paquet détecté. Un autre format lisible par l'homme est text qui présente une liste de packages avec Version et Type champs imbriqués sous chaque section.

Syft prend également en charge plusieurs formats programmatiques :

  • json – Enregistrer les données du package dans une structure JSON.
  • cyclonedx – Un rapport CycloneDX au format XML.
  • spdx et spdx-json – Rapports compatibles SPDX au format tag-value ou JSON.

L'utilisation de l'un de ces rapports vous permet d'archiver les résultats dans un fichier pour référence ultérieure :

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

Les formats CycloneDX et SPDX standardisés peuvent aider à intégrer les analyses Syft dans vos pipelines CI/CD. Les données sont accessibles à d'autres outils de l'écosystème qui fonctionnent avec des listes de packages et des résultats SBOM.

Syft s'intègre également à Grype, le détecteur de vulnérabilités du système de fichiers de conteneur autonome d'Anchore. Les données de Syft peuvent être introduites directement dans Grype si vous utilisez le format de sortie JSON.

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

Grype comparera la liste des packages à son index des vulnérabilités connues. Il mettra en évidence les packages qui contiennent des problèmes, vous donnant un point de départ immédiat pour améliorer votre posture de sécurité.

Utilisation d'autres sources d'images

Syft peut utiliser des images provenant d'autres sources que les registres Docker publics. Vous pouvez référencer n'importe quelle image compatible OCI, soit via une balise de registre, soit en tant que tar d'image enregistrée. Les chemins vers les archives d'images peuvent être transmis directement à Syft :

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

Syft fonctionne également avec les registres Docker privés. Il utilise vos identifiants existants dans votre ~/.docker/config.json fichier :

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

Bien que Syft se concentre sur les analyses d'images de conteneurs, il peut également créer un SBOM pour des chemins de système de fichiers arbitraires. Vous pouvez utiliser Syft pour indexer les packages de votre hôte en analysant les répertoires qui contiennent généralement des fichiers binaires et des bibliothèques de logiciels :

syft packages dir:/usr/bin

Vous devez explicitement ajouter le dir: schéma si vous faites référence à un chemin en dehors de votre répertoire de travail. Sinon, Syft essaiera de l'interpréter comme une référence de balise d'image.

Conclusion

Syft extrait les listes de packages de vos images de conteneur. Les données générées agissent comme un SBOM pour votre image, augmentant votre prise de conscience de la longueur de votre chaîne d'approvisionnement.

Syft est distribué sous la forme d'un binaire unique qui produit des rapports dans plusieurs formats différents. Il peut être facilement intégré dans les systèmes CI/CD pour télécharger un artefact SBOM dans le cadre de votre pipeline de création d'image. Cela augmente la responsabilité et facilite les pistes d'audit en enregistrant la liste complète des logiciels de chaque image au moment de sa production.

L'ajout de numérisations Syft à votre flux de travail vous permet de rester informé des packages que vous utilisez. Une fois que vous avez ces informations, vous pouvez commencer à évaluer chaque paquet pour déterminer s'il est vraiment nécessaire. Si vous trouvez de nombreux packages qui ne sont pas utilisés par votre charge de travail, envisagez de passer à une image de base minimale et de superposer uniquement les logiciels essentiels.


Docker
  1. Comment installer Jenkins avec Docker

  2. Comment déployer des microservices avec Docker

  3. Comment déployer des applications avec Rancher

  4. Comment installer Nextcloud avec Docker sur votre serveur Linux

  5. Comment valider les modifications apportées à une image Docker

Comment remplacer Docker par Podman sur un Mac

Comment héberger votre propre plate-forme en tant que service (PaaS) avec Dokku

Comment créer une image Windows Docker avec la balise Docker Build

Comment copier des fichiers avec Docker cp dans votre conteneur Docker

Gardez vos images Docker gérables avec Docker Image Prune

Comment créer une image Docker personnalisée avec Dockerfile