GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

So indizieren Sie die Abhängigkeiten Ihres Docker-Images mit Syft

Syft ist ein CLI-Dienstprogramm, das eine Software-Stückliste (SBOM) für Container-Images generiert. Ein SBOM ist ein Katalog von Abhängigkeiten, die von Ihrem Image verwendet werden. Es gibt Ihnen Einblick in die „Materialien“, die das Dateisystem Ihres Bildes bilden.

Die Erstellung einer SBOM kann Ihnen dabei helfen, übermäßig komplexe Paketlieferketten zu identifizieren, die Sie dem Risiko von Abhängigkeitsverwirrungsangriffen aussetzen. Das Verteilen einer SBOM neben Ihrem Bild informiert die Benutzer darüber, was sich unter der Oberfläche verbirgt. Dies bietet einen nützlichen Ausgangspunkt, um die Sicherheit der Lieferkette zu erhöhen.

Syft wurde von Anchore entwickelt, das auch eine vollständige Container-Scanning-Engine anbietet. Die Syft-CLI ist in der Lage, Paketlisten aus Images mit gängigen Betriebssystemen und Programmiersprachen zu extrahieren. Sowohl Docker- als auch OCI-Images werden unterstützt.

Syft installieren

Ein Installationsskript ist verfügbar, um die neueste Syft-Binärdatei herunterzuladen und sie Ihrem Pfad hinzuzufügen:

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

Mac-Benutzer können Syft auch von Homebrew erhalten, indem sie anchore/syft hinzufügen -Repository und Installieren von syft Paket.

Sobald Sie Syft auf Ihrem System installiert haben, führen Sie syft aus in Ihrem Terminal, um die verfügbaren Befehle anzuzeigen. Sie können Vervollständigungen für Ihre Shell generieren, indem Sie syft completion ausführen .

Verwenden Sie syft version um die Version Ihrer Installation zu finden. Überprüfen Sie regelmäßig die GitHub-Tags-Seite, um neue Versionen zu finden, und verwenden Sie dann das Installationsskript erneut, um jedes Update herunterzuladen.

Scannen eines Bildes

Die Funktionalität von Syft wird derzeit durch einen einzigen Unterbefehl bereitgestellt, syft packages . Übergeben Sie ihm ein Bild-Tag, um eine SBOM zu generieren für:

syft packages alpine:latest

Syft lädt das Image herunter, scannt seinen Inhalt und erstellt einen Katalog der entdeckten Pakete. Die Ausgabe wird in Ihrem Terminal als Tabelle angezeigt. Jedes Ergebnis enthält den erkannten Paketnamen, die Version und den Typ.

Die Paketliste für dieses Image ist kurz. Da es sich um ein Alpine-Basisimage handelt, sind die installierten Pakete bewusst auf die kleinstmögliche Oberfläche gestrafft. Größere Bilder können Hunderte oder Tausende von Paketen in mehreren verschiedenen Formaten enthalten. Es kann hilfreich sein, Syft mit bestehenden Unix-Terminal-Tools wie grep zu kombinieren und awk um die gesuchten Daten zu extrahieren.

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

Unterstützte Pakettypen

Syft unterstützt viele gängige Paketformate in den führenden Betriebssystemen und Programmiersprachen. Die Liste enthält:

  • APK (Alpin), DEB (Debian) und RPM (Fedora) OS-Pakete.
  • Identifizierung von Linux-Distributionen über Alpine, CentOS, Debian und RHEL bevorzugt.
  • Go-Module
  • Java inJAR , EAR , und WAR Variationen
  • NPM- und Garnpakete
  • Python-Räder und -Eier
  • Ruby-Pakete

Obwohl nicht jede Sprache abgedeckt ist, profitieren Sie dennoch vom Scannen auf Betriebssystemebene, unabhängig vom ausgewählten Stack Ihrer Anwendung.

Ändern des Ausgabeformats

Das Standardausgabeformat heißt table . Es rendert eine spaltenbasierte Ergebnistabelle in Ihrem Terminal und erstellt eine neue Zeile für jedes erkannte Paket. Ein alternatives menschenlesbares Format ist text die eine Liste von Paketen mit Version präsentiert und Type Felder, die unter jedem Abschnitt verschachtelt sind.

Syft unterstützt auch mehrere programmatische Formate:

  • json – Paketdaten in einer JSON-Struktur speichern.
  • cyclonedx – Ein CycloneDX-Bericht im XML-Format.
  • spdx und spdx-json – SPDX-kompatible Berichte im Tag-Wert- oder JSON-Format.

Mit einem dieser Berichte können Sie Ergebnisse zur späteren Bezugnahme in einer Datei archivieren:

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

Die standardisierten CycloneDX- und SPDX-Formate können dabei helfen, Syft-Scans in Ihre CI/CD-Pipelines zu integrieren. Die Daten sind für andere Ökosystem-Tools zugänglich, die mit Paketlisten und SBOM-Ergebnissen arbeiten.

Syft lässt sich auch in Grype, den eigenständigen Container-Dateisystem-Schwachstellenfinder von Anchore, integrieren. Daten aus Syft können direkt in Grype eingespeist werden, wenn Sie das JSON-Ausgabeformat verwenden.

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

Grype vergleicht die Paketliste mit seinem Index bekannter Schwachstellen. Es hebt die Pakete hervor, die Probleme enthalten, und gibt Ihnen einen sofortigen Ausgangspunkt, um Ihre Sicherheitslage zu verbessern.

Verwendung anderer Bildquellen

Syft kann neben öffentlichen Docker-Registrierungen auch Images aus anderen Quellen verwenden. Sie können auf jedes OCI-kompatible Image verweisen, entweder über ein Registrierungs-Tag oder als gespeichertes Image-Tar. Pfade zu Bildarchiven können direkt an Syft übergeben werden:

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

Syft arbeitet auch mit privaten Docker-Registries. Es verwendet Ihre vorhandenen Anmeldeinformationen in Ihrem ~/.docker/config.json Datei:

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

Obwohl sich Syft auf Container-Image-Scans konzentriert, kann es auch ein SBOM für beliebige Dateisystempfade erstellen. Sie können Syft verwenden, um die Pakete Ihres Hosts zu indizieren, indem Sie Verzeichnisse scannen, die häufig Software-Binärdateien und -Bibliotheken enthalten:

syft packages dir:/usr/bin

Sie müssen das dir: ausdrücklich hinzufügen Schema, wenn Sie auf einen Pfad außerhalb Ihres Arbeitsverzeichnisses verweisen. Andernfalls wird Syft versuchen, es als Bild-Tag-Referenz zu interpretieren.

Schlussfolgerung

Syft extrahiert Paketlisten aus Ihren Container-Images. Die generierten Daten dienen als SBOM für Ihr Image und steigern Ihr Bewusstsein für die Länge Ihrer Lieferkette.

Syft wird als einzelne Binärdatei verteilt, die Berichte in mehreren verschiedenen Formaten erstellt. Es kann problemlos in CI/CD-Systeme integriert werden, um ein SBOM-Artefakt als Teil Ihrer Image-Build-Pipeline hochzuladen. Dies erhöht die Nachvollziehbarkeit und unterstützt Audit-Trails, indem die vollständige Softwareliste jedes Images zum Zeitpunkt seiner Erstellung aufgezeichnet wird.

Durch das Hinzufügen von Syft-Scans zu Ihrem Workflow bleiben Sie über die von Ihnen verwendeten Pakete auf dem Laufenden. Sobald Sie diese Informationen haben, können Sie damit beginnen, jedes Paket zu bewerten, um festzustellen, ob es wirklich benötigt wird. Wenn Sie viele Pakete finden, die von Ihrer Workload nicht verwendet werden, ziehen Sie in Betracht, zu einem minimalen Basis-Image zu wechseln und nur wichtige Software darüber zu legen.


Docker
  1. So stellen Sie Microservices mit Docker bereit

  2. So stellen Sie Apps mit Rancher bereit

  3. So verwenden Sie ein Dockerfile zum Erstellen eines Docker-Images

  4. So teilen Sie Docker-Images mit anderen

  5. So ändern Sie Docker-Images

So ersetzen Sie Docker durch Podman auf einem Mac

So hosten Sie Ihre eigene Platform-as-a-Service (PaaS) mit Dokku

So erstellen Sie ein Docker-Windows-Image mit Docker-Build-Tag

So kopieren Sie Dateien mit Docker cp in Ihren Docker-Container

Halten Sie Ihre Docker-Images mit Docker Image Prune überschaubar

So erstellen Sie ein benutzerdefiniertes Docker-Image mit Dockerfile