ts-scan aus einem Docker-Image betreiben: Eine Schritt-für-Schritt-Anleitung
In den letzten zwei Jahren als Leiter unseres OSPO bei einem mittelständischen Logistikunternehmen in Flandern habe ich eine Lektion auf die harte Tour gelernt: Das beste Compliance-Tooling der Welt nützt nichts, wenn Ihre Teams nicht zweimal hintereinander dieselben Scan-Ergebnisse reproduzieren können. Versionsdrift in lokalen Python-Umgebungen, ein Kollege mit einer anderen pip-Version, ein CI-Agent, der drei Minor-Releases hinterherhinkt — jedes dieser Probleme untergräbt still und leise Ihre OpenChain-ISO-5230-Konformität, noch bevor Sie überhaupt beim Audit ankommen.
Deshalb haben wir ts-scan auf einen Docker-basierten Workflow umgestellt, und ich möchte Ihnen genau zeigen, wie wir das gemacht haben.
Warum containerisierte SCA alles verändert
Lokale Toolchain-Installationen sind ein Compliance-Risiko. Ich habe es immer wieder erlebt: Ein Entwickler scannt lokal, bekommt grünes Licht, pusht in die CI — und die Pipeline meldet plötzlich ein Dutzend neuer Findings, weil die transitive Abhängigkeitsauflösung auf dem Agent anders funktioniert. Das zu debuggen kostet Zeit — und, noch wichtiger, es untergräbt das Vertrauen in den gesamten SCA-Prozess.
Ein containerisiertes ts-scan-Image löst dieses Problem an der Wurzel. Jedes Teammitglied, jeder CI-Runner, jeder abgeschottete Build-Server führt exakt dieselbe Binary mit exakt demselben Dependency-Resolver aus. Das ist Prozesskonsistenz im wörtlichsten Sinne — und deckt sich direkt mit dem, was OpenChain ISO 5230 von dokumentierten, wiederholbaren Prozessen verlangt.
Es gibt auch ein Onboarding-Argument: Wenn ein neuer Kollege in mein Team kommt, will ich keinen halben Tag mit Tool-Setup verbringen. Mit einem Container lautet die Onboarding-Anweisung buchstäblich vier Worte: Image ziehen, scannen.
Voraussetzungen
Bevor Sie starten, benötigen Sie:
- Docker Engine ≥ 20.10 auf der Zielmaschine oder dem CI-Agent
- Ein TrustSource-Konto mit aktivem API-Key (erstellbar unter Settings → API Keys in der TrustSource-Oberfläche)
- Das Package-Manifest Ihres Zielprojekts —
package.json,pom.xml,requirements.txt,go.mod, je nach Ökosystem - Netzwerkzugriff auf
registry.hub.docker.comund den TrustSource-API-Endpunkt (api.trustsource.io). In abgeschotteten Umgebungen müssen Sie das Image zunächst in Ihre interne Registry spiegeln — dazu weiter unten mehr.
Das offizielle ts-scan-Docker-Image ziehen
Zunächst einfach:
docker pull trustsource/ts-scan:latest
Für alles über einen schnellen Proof-of-Concept hinaus sollten Sie auf einen konkreten Tag pinnen. latest eignet sich zum Ausprobieren, aber in einer Produktionspipeline brauchen Sie Reproduzierbarkeit und Audit-Nachvollziehbarkeit:
docker pull trustsource/ts-scan:1.x.y
Nach dem Pull prüfen Sie, was Sie tatsächlich erhalten haben:
docker inspect trustsource/ts-scan:1.x.y --format='{{.Id}}'
Gleichen Sie diesen Digest mit den veröffentlichten Release Notes im TrustSource-GitHub-Repository ab. Das dauert dreißig Sekunden und liefert Ihnen einen konkreten Artefakt-Hash, den Sie in Ihren Compliance-Unterlagen referenzieren können.
Wenn Ihre Supply-Chain-Policy verlangt, dass alle externen Images über eine interne Registry laufen — in regulierten Logistik- und Fertigungsumgebungen zunehmend Standard —, taggen Sie um und pushen:
docker tag trustsource/ts-scan:1.x.y registry.internal.example.com/ospo/ts-scan:1.x.y
docker push registry.internal.example.com/ospo/ts-scan:1.x.y
Da ts-scan Open Source ist, lässt sich das Dockerfile selbst prüfen. Das zählt, wenn Ihr Security-Team fragt, was genau in Ihrer Build-Umgebung läuft.
Zugangsdaten sicher übergeben
Hier sehe ich die meisten Fehler. Machen Sie das niemals so:
# NICHT so — landet in der Shell-Historie
docker run -e TS_API_KEY=mysecretkey trustsource/ts-scan:latest
Verwenden Sie stattdessen eine Env-Datei, die per .gitignore ausgeschlossen ist:
# .env (niemals committen)
TS_API_KEY=your_api_key_here
TS_PROJECT=your_project_key_here
docker run --rm --env-file .env -v $(pwd):/scan trustsource/ts-scan:latest --scan /scan
Die minimal erforderlichen Variablen zur Laufzeit sind TS_API_KEY und TS_PROJECT. Der Modulname wird automatisch aus dem gescannten Artefakt abgeleitet — Sie müssen ihn nicht fest codieren.
Für Enterprise-Umgebungen gehen Sie noch einen Schritt weiter:
- GitHub Actions: Encrypted Secrets verwenden und als Umgebungsvariablen im Workflow-YAML injizieren
- GitLab CI: CI/CD-Variablen als masked und protected setzen
- HashiCorp Vault oder AWS Secrets Manager: Zugangsdaten zur Laufzeit über Ihre Orchestrierungsschicht mounten, oder ein Sidecar-Pattern in Kubernetes nutzen
Das Prinzip ist immer dasselbe: Zugangsdaten sind Laufzeitkonfiguration, niemals fest ins Build eingebacken.
Den Scan ausführen und Ergebnisse an TrustSource übergeben
Sind die Zugangsdaten geklärt, ist der eigentliche Scan unkompliziert:
docker run --rm \
--env-file .env \
-v $(pwd):/scan \
trustsource/ts-scan:latest \
--scan /scan
Was dabei im Hintergrund passiert:
- ts-scan erkennt automatisch Ihr Abhängigkeits-Ökosystem anhand der Manifest-Dateien in
/scan - Es löst transitive Abhängigkeiten auf — nicht nur die direkten, wo die interessantesten Compliance-Findings meist stecken
- Es baut die resultierende SBOM zusammen und sendet sie direkt per API an Ihr TrustSource-Projekt
Nach Abschluss des Laufs navigieren Sie zu Ihrem Projekt in der TrustSource-Oberfläche. Sie sehen dort eine neu erstellte SBOM-Version. Von dort aus können Sie neu geflaggte OSS-Komponenten prüfen, Lizenz-Findings durchsehen und kontrollieren, ob Komponenten auf der Sperrliste Ihrer Organisation stehen.
Beim ersten Lauf gegen einen unserer älteren Java-Microservices fanden wir drei transitive Abhängigkeiten mit GPL-2.0-only-Lizenzen, die zwei Jahre lang niemandem aufgefallen waren. Containerisierte SCA macht den Prozess nicht nur sauberer — sie macht Findings sichtbar, die manuelle Prozesse übersehen.
ts-scan in Ihre CI/CD-Pipeline einbetten
Der Befehl docker run lässt sich ohne zusätzliche Plugins in jede Pipeline einfügen. Hier ein minimales GitLab-CI-Beispiel:
sca-scan:
image: docker:20.10
services:
- docker:dind
script:
- docker pull registry.internal.example.com/ospo/ts-scan:1.x.y
- docker run --rm
--env TS_API_KEY=$TS_API_KEY
--env TS_PROJECT=$TS_PROJECT
-v $CI_PROJECT_DIR:/scan
registry.internal.example.com/ospo/ts-scan:1.x.y
--scan /scan
--wait-for-analysis
--exit-on-vulns CRITICAL
--exit-on-legal INCOMPATIBLE
Zwei Flags verdienen besondere Erwähnung:
--wait-for-analysis: Der Container wartet, bis TrustSource seine Policy-Bewertung abgeschlossen hat, bevor er beendet wird — so wird Ihr Pipeline-Gate aussagekräftig--exit-on-vulns CRITICALund--exit-on-legal INCOMPATIBLE: Diese brechen den Build ab, wenn kritische Schwachstellen- oder Lizenz-Schwellenwerte überschritten werden. So wird aus SCA ein echtes Qualitäts-Gate statt einer reinen Reporting-Übung.
Aus Sicht der OpenChain-Konformität liefert das Speichern des Image-Tags (1.x.y) in Ihrer Pipeline-as-Code-Datei — Ihrem Jenkinsfile, .gitlab-ci.yml oder GitHub-Actions-Workflow — Compliance-Auditoren eine direkte Rückverfolgbarkeit von jedem Build zu einer konkreten Tool-Version. Das ist ein konkreter, dokumentierbarer Konformitätsgewinn, auf den ich in unseren letzten zwei internen Audits verwiesen habe.
Kernaussagen und nächste Schritte
Containerisierte SCA mit ts-scan beseitigt zwei der größten praktischen Hürden für konsistente Open-Source-Compliance: Toolchain-Overhead und Reproduzierbarkeitslücken. Das ist kein philosophisches, sondern ein operatives Argument. Dasselbe Image, überall, jedes Mal.
Drei Dinge, die Sie heute tun sollten:
- Das Image ziehen und gegen ein reales Projekt laufen lassen, um zu sehen, was zurückkommt
- Ihren Secrets-Manager anbinden, damit Zugangsdaten niemals im Klartext oder in der Shell-Historie landen
- Die Scan-Stage mit den passenden Exit-Flags in die Pipeline Ihres Main-Branches einbauen
Von dort aus lohnt sich ein Blick auf TrustSources SBOM Management und das Compliance-Dashboard, um die Ergebnisse über Ihr gesamtes Portfolio hinweg zu operationalisieren. Wer die OpenChain-Konformität beschleunigen möchte: TrustSource bietet auch begleitete Onboarding-Sessions an — einen Blick wert, wenn Sie unter Zeitdruck von einem Kunden- oder Regulierungs-Audit stehen.
Das Tooling existiert. Der Container ist bereit zum Ziehen. Es gibt keinen guten Grund, warum Ihr nächster Pipeline-Lauf kein sauberes SCA-Gate enthalten sollte.
Zur Person
Leitet das OSPO bei einem flämischen Logistik-Unternehmen, aktiv in der OpenChain WG.
Gastbeitrag. Community-Partner aus der OpenChain Working Group. Nicht vergütet.