Script "collect-evidence"

Das collect-evidence Skript hilft Anwendern, Nutzern und Mitwirkenden dabei, ihre Compliance-Daten an den Datenfluss „ DevSecOps “ (Änderungsmanagement) zu senden.

Durch das Script werden die folgenden Tasks ausgeführt:

  • Versucht, Anhänge als Ergebnisse zu verarbeiten, und erstellt Vorfallprobleme aus diesen Ergebnissen. Es wird eine begrenzte Anzahl von Toolausgabeformaten unterstützt.
  • Wenn Probleme gefunden werden, wertet das Script ihre Karenzzeiten (Fälligkeitsdaten) und Freistellungsstatus aus.
  • Erstellt ein Angabenasset im Angabenfach.
  • Erstellt die Angaben selbst und hängt die Probleme und bereitgestellten Anhänge an.

Wenn für den Status success oder failure keine Anhänge in collect-evidence übergeben werden, werden die Pipelineprotokolle für diese bestimmte Task und die Phase als Anhang erfasst.

Das Script collect-evidence wird von der Pipeline bereitgestellt. Es muss nicht installiert werden. Das Skript weist folgende Abhängigkeiten auf:

  • bash
  • libstdc++ Gemeinsam genutzte Bibliothek
  • libgcc Gemeinsam genutzte Bibliothek

Stellen Sie sicher, dass die Abhängigkeiten im Basisimage installiert sind, das dieses Tool für die Berichterstellung von Angaben verwendet.

CLI-Befehlsarchitektur

Die Funktionalität von collect-evidence ist über zwei Schnittstellen verfügbar:

  1. Shell Script Wrapper (collect-evidence): Traditionelle Bash-Skript-Schnittstelle, die Abwärtskompatibilität bietet
  2. Direkte CLI-Befehle (cocoa locker evidence collect): Native CLI-Schnittstelle mit vollem Funktionszugang

Version umschalten

Das Shell-Skript collect-evidence unterstützt zwei Implementierungsversionen, die über die Umgebungseigenschaft collect-evidence-version umgeschaltet werden können:

Version Bereitstellung Status Beschreibung
v1 Traditionell Verfügbar Ursprüngliche bash-basierte Implementierung mit voller Abwärtskompatibilität
v2 CLI-basiert Standard Moderne Implementierung, die den cocoa locker evidence collect CLI-Befehl umschließt

Verwendung

Das Script collect-evidence erfordert die folgenden Parameter:

  • --tool-type Die ID des Tools, das Angabendaten bereitstellt. Zum Beispiel: „owasp-zap-ui“, „cra“
  • --evidence-type Die ID des Beweis-Typs. Zum Beispiel: com.ibm.image_vulnerability_scan, com.ibm.unit_tests
  • --asset-key Der Schlüssel in pipelinectl Assets. Für die folgenden Befehle load_artifact <key> oder load_repo <key>
  • --asset-type Der Anlagentyp aus pipelinectl. Folgende Typen sind möglich: repo, artifact
  • --status Der Status der Beweismittel kann einer der folgenden sein: success, pending, failure
  • --assets Geben Sie mehrere Assetschlüssel-und Assettyppaare an. Sie können beispielsweise --assets asset-key1:asset-type1 --assets asset-key2:asset-type2 verwenden. Wenn Sie diese Option verwenden, geben Sie den Assetschlüssel und den Assettyp nicht separat an.

Der folgende Parameter ist optional:

  • --attachment Die Datei, die als Ergebnis verarbeitet und an die Angaben angehängt werden soll. Der Parameter kann für mehrere Dateien mehrfach angegeben werden. Stellen Sie beim Signieren von Bildern sicher, dass die Signaturdatei mit dem Parameter --attachment angehängt wird. Die Signaturdatei muss die Signaturdetails wie Schlüssel-ID, Algorithmus und signierten Digest enthalten. Gängige Formate sind beispielsweise JSON oder TXT.
  • --meta Beliebige Metadaten, die den Angaben hinzugefügt werden sollen Der Parameter akzeptiert 'key = value' -Paare und kann mehrmals angegeben werden. Sie können für den Image-Signaturvorgang relevante Metadaten einschließen, z. B. die Signaturumgebung oder bestimmte während der Signierung verwendete Konfigurationen.
  • --additional-comment Der Kommentar, der zu einem Problem hinzugefügt wird, wenn eine Pipeline fehlgeschlagen ist.

Verwenden Sie den folgenden Befehl, um Hilfe zu erhalten:

collect-evidence --help

Rückgabewert

collect-evidence gibt die ausgewertete Angabenstatuszeichenfolge in STDOUT aus (entweder success, failure oder pending). Dieser bewertete Wert hängt von den verarbeiteten Ergebnisanhängen, den gefundenen Vorfallsproblemen und der möglichen Behebung dieser Probleme ab, z. B. der Festlegung eines Fälligkeitsdatums oder der Kennzeichnung mit einer Ausnahmegenehmigung. Weitere Informationen finden Sie unter Vorfallprobleme.

# example on how to read the output into a variable in bash
read -r status < <(collect-evidence "${evidence_params[@]}")
echo $status # success

Umstellung auf v2 (CLI-basierte Implementierung)

Um die neue CLI-basierte Implementierung zu verwenden, legen Sie die Umgebungseigenschaft in Ihrer Pipeline fest:

collect-evidence-version=v2

Direkte Verwendung des CLI-Befehls

cocoa locker evidence collect \
  --tool-type "sonarqube" \
  --evidence-type "com.ibm.static_scan" \
  --assets "app-repo:repo" \
  --status "success" \
  --attachment ./sonarqube-result.json \
  --pipeline-run-id "${PIPELINE_RUN_ID}" \
  --pipeline-namespace "ci" \
  --incident-org "my-org" \
  --incident-repo "compliance-issues"
cocoa locker evidence collect \
  --tool-type "detect-secrets" \
  --evidence-type "com.ibm.detect_secrets" \
  --assets "app-repo:repo" \
  --status "success" \
  --pipeline-run-id "${PIPELINE_RUN_ID}" \
  --pipeline-namespace "ci" \
  --incident-org "my-org" \
  --incident-repo "compliance-issues"
cocoa locker evidence collect \
  --tool-type "va" \
  --evidence-type "com.ibm.cloud.image_vulnerability_scan" \
  --assets "image-0:artifact" \
  --status "success" \
  --pipeline-run-id "${PIPELINE_RUN_ID}" \
  --attachment image-0_va-report.json \
  --pipeline-namespace "ci" \
  --incident-org "my-org" \
  --incident-repo "compliance-issues"

Eine vollständige CLI-Befehlsreferenz und alle verfügbaren Parameter finden Sie unter cocoa locker evidence collect.

Beispielverwendung

collect-evidence \
  --tool-type "sonarqube" \
  --evidence-type "com.ibm.static_scan" \
  --asset-type "repo" \
  --asset-key "app-repo" \
  --status "success" \
  --attachment ./sonarqube-result-1.json \
  --attachment ./sonarqube-result-2.json \
  --meta environment=staging
collect-evidence \
  --tool-type "ciso-code-signing" \
  --evidence-type "com.ibm.cloud.image_signing" \
  --asset-type "artifact" \
  --asset-key "signed-image" \
  --status "success" \
  --attachment ./signature.json \   # The signature details in JSON format
  --attachment "./${artifact}.fingerprint" \ #  The fingerprint is a hash value generated from the artifact, ensuring integrity and authenticity.
  --meta environment=production

Sie können den Befehl cocoa locker evidence collect direkt verwenden:

cocoa locker evidence collect \
  --tool-type "sonarqube" \
  --evidence-type "com.ibm.static_scan" \
  --assets "app-repo:repo" \
  --status "success" \
  --attachment ./sonarqube-result.json \
  --pipeline-run-id "${PIPELINE_RUN_ID}" \
  --pipeline-namespace "ci" \
  --incident-org "my-org" \
  --incident-repo "compliance-issues"

Unterstützte Toolformate

Die aktuelle Implementierung unterstützt derzeit die folgenden Tools (bereitgestellt als Parameter --tool-type ):

Toolname Beschreibung
cra IBM Code-Risiko-Analysator
cra-cis IBM Code-Risiko-Analysator CIS
va Vulnerability Advisor für IBM Cloud Container Registry
gosec GoLang Sicherheits-Scanner
xray JFrog Xray - Schwachstellen-Scanning & Container-Sicherheit
owasp-zap OWASP Zed Attack Proxy (ZAP)
owasp-zap-ui OWASP Zed Attack Proxy-Benutzeroberfläche (ZAP UI)
sonarqube SonarQube scannen
peer-review Peer-Review-Scan
twistlock TwistLock
cims Container-Image-Multi-Scanner (CIMS)
mend Scan ausbessern
mend-sast SAST-Scan reparieren
checkov Checkov-Scan
cra-tf Code Risk Analyzer für Terraform
tfsec Terraform Sicherheits-Scanner
fips-scanner FIPS-Scanner (Federal Information Processing Standards)
detect-secrets Geheime Schlüssel erkennen
ciso-code-signing CISO-Tool zur Codesignierung
sysdig Sysdig-Scan
cyclonedx CycloneDX Format. Die Werkzeugerkennung für das Problemmanagement erfolgt auf der Grundlage der Metadaten von CycloneDX hier
grype Grype-Scan

CycloneDX Metadata nutzt die Tool-Erkennung für das Problemmanagement.

Wenn das Script collect-evidence mit einem nicht unterstützten Tooltyp aufgerufen wird, versucht das Script nicht, die Anhänge zu verarbeiten. Außerdem wird die Problembehandlung übersprungen und die Angabensammlung wird nicht gestoppt.

Wenn Ihr Script einen Anhang aus einem unterstützten Tool bereitstellt, der Anhang jedoch nicht verarbeitet werden kann, wird die Problembehandlung übersprungen und die Angabensammlung nicht gestoppt.

Angabentyp

Sie können den Angabentyp mit dem Parameter --evidence-type festlegen. Sie können jeden Typ festlegen, aber IBM Cloud® Compliance Manager unterstützt die folgenden Angabentypen:

  • com.ibm.unit_tests
  • com.ibm.detect_secrets
  • com.ibm.branch_protection
  • com.ibm.static_scan
  • com.ibm.code_vulnerability_scan
  • com.ibm.code_bom_check
  • com.ibm.code_cis_check
  • com.ibm.cloud.image_vulnerability_scan
  • com.ibm.cloud.image_signing
  • com.ibm.dynamic_scan
  • com.ibm.cloud.image_signing
  • com.ibm.acceptance_tests
  • com.ibm.prod_change_request
  • com.ibm.close_change_reques

Sammlung von Belegen und Zuordnung von Instrumenten

Unterstütztes Werkzeug für Beweise
Nachweisart ID Standardmäßig unterstütztes Werkzeug Ursprung Eigentumsrecht Empfohlener Vermögenswert Probleme
com.ibm.branch_protection cocoa-branch-protection CI Plattform Repo Nicht-vorfallbezogene Themen
com.ibm.unit_tests jest PR/CI Benutzer Repo Nicht-vorfallbezogene Themen
com.ibm.detect_secrets detect-secrets PR/CI/CC Plattform Repo Fragen zu Vorfällen/Nichtvorfällen
com.ibm.code_vulnerability_scan cra-tf, cra, mend
Für Infrastruktur als Code: tfsec, checkov
CI Plattform Repo Fragen zu Vorfällen/Nichtvorfällen
com.ibm.code_bom_check cra-bom, sbom-utility PR/CI/CC Plattform Repo Fragen zu Vorfällen/Nichtvorfällen
com.ibm.code_cis_check cra-cis PR/CI/CC Plattform Repo Nicht-vorfallbezogene Themen
com.ibm.peer_review peer-review CI Plattform Repo Nicht-vorfallbezogene Themen
com.ibm.static_scan sonarqube, gosec
Für Infrastruktur als Code: terraform-fmt, terraform-validate, tflint
CI/CC Plattform Repo Fragen zu Vorfällen/Nichtvorfällen
com.ibm.cloud.image_signing artifact-signing CI Plattform Repo Nicht-vorfallbezogene Themen
com.ibm.acceptance_tests jest CI Benutzer Artefakt Nicht-vorfallbezogene Themen
com.ibm.dynamic_scan owasp-zap, owasp-zap-ui CI Plattform Artefakt Fragen zu Vorfällen/Nichtvorfällen
com.ibm.cloud.image_vulnerability_scan va, sysdig, xray CI/CC Plattform Artefakt Fragen zu Vorfällen/Nichtvorfällen
com.ibm.prod_change_request gitlab CD Plattform Artefakt Nicht-vorfallbezogene Themen
com.ibm.close_change_request gitlab CD Plattform Artefakt Nicht-vorfallbezogene Themen
com.ibm.cloud.slsa tekton-chains CI Plattform Artefakt Nicht-vorfallbezogene Themen
com.ibm.cloud.verify_signature ciso-code-signing CD Plattform Artefakt Nicht-vorfallbezogene Themen
com.ibm.pipeline_logs Nicht zutreffend CI/CD/CC Plattform Nicht zutreffend Nicht zutreffend
com.ibm.pipeline_run_data Nicht zutreffend CI/CD/CC Plattform Nicht zutreffend Nicht zutreffend
com.ibm.network_compliance CI Plattform Repo Fragen zu Vorfällen/Nichtvorfällen

Wenn ein Scan fehlschlägt oder Anhänge nicht geparst werden können, erstellt das Tool automatisch ein nicht-vorfallbezogenes Problem, um den Fehler zu verfolgen.

Assetanforderungen

Angaben, die mit diesem Tool erfasst werden, sind Teil der V2-Angabensammlung und der zugehörigen Angabenlockaktualisierungen.

Diese neue Methode konzentriert sich auf assetbasierte Angaben, d. h., dass Angaben über die Scans und Tests, die für diese Artefakte oder Repositorys ausgeführt werden, mit dem Artefakt und dem Repository verbunden sind und Ergebnisse für Angaben liefern. Zum Beispiel:

  • Ein Repository mit einer bestimmten Festschreibung wird zu einem Festschreibungsasset, das gescannt wird und Angaben für das Festschreibungsasset erstellt.
  • Mit demselben Repository und derselben Festschreibung wird ein Image erstellt. Das Bild wird zu einem Asset, das sich auf das Quellenasset, das Repository und das Commit bezieht.
  • Das Bild wird gescannt und die Angaben werden erstellt. Alle Scanergebnisse werden über die Angaben, das zugehörige Asset und die zugehörigen Assets verbunden.

Damit dies funktioniert, müssen die Assets, die mit den Parametern --asset-type und --asset-key bereitgestellt werden, einige Anforderungen erfüllen:

repo-Assets, die mit dem Befehl save_repo hinzugefügt wurden

Überprüfen Sie die Befehlsreferenz auf genaue Syntaxinformationen.

Erforderliche Felder:

  • url Das Repository URL.
  • commit Der Commit-SHA.

artifact-Assets, die mit dem Befehl save_artifact hinzugefügt wurden

Überprüfen Sie die Befehlsreferenz auf genaue Syntaxinformationen.

Erforderliche Felder:

  • name Der Artefaktname. Für ein Bild zum Beispiel: Registry, Namespace und Image (Beispiel: us.icr.io/team-images/service).
  • digest Die Zusammenfassung des Artefakts (Beispiel: sha256:a2292ed2b82c7a51d7d180c3187dbb0f7cc9ab385a68484c4f117e994acd6192).

In 'save_artifact' erforderliche Änderungen für Nicht-Images: Die Erfassung von Angaben unterstützt jetzt alle Assettypen. Für die Erfassung von Angaben zum Arbeiten mit einem beliebigen Assettyp save_artifact Sie sollten die Datei ausdrücklich mit „ type “ speichern, zum Beispiel „zip save_artifact artifact-1 type=zip ... “. Im Skript "Beweise sammeln" sollte asset-type ein Artefakt sein und der Typ wird aus dem Artefakt abgefragt. Damit dieser Prozess funktioniert, wurde das Hinzufügen von Kakao-Schließfachanlagen geändert, um Anlagen beliebigen Typs hinzuzufügen. Nach dem Speichern kann das Script zum Erfassen von Angaben wie folgt aufgerufen werden:

collect-evidence --tool-type toolType --evidence-type artifact --asset-key artifact-1 ...

Bitte beachten Sie unsere Beispielanwendung für eine Beispielimplementierung für deployment den Typ https://us-south.git.cloud.ibm.com/open-toolchain/hello-compliance-app

Mit diesen Änderungen verarbeitet das Script "collect-evidence" alle Artefakttypen, einschließlich Image-und Nicht-Image-Artefakte.

Mehrere Assets in collect-evidence

Durch die Verwendung der Erfassung von Angaben können Sie die gleichzeitige Erfassung von Angaben für mehrere Assets konfigurieren. Sie leiten die Angabensammlung mithilfe des Flags --assets ein, das mehrere Assetschlüssel/Assettyp-Paare angibt. Beispiel: input --assets asset-key1:asset-type1 --assets asset-key2:asset-type2. Wenn Sie diese Option auswählen, geben Sie Assetschlüssel und Assettyp nicht separat an.

Denken Sie an die folgenden wichtigen Punkte zur Sammlung mit mehreren Assets:

  • status, attachment, tool-type, evidence-type und upload-logs sind über alle Assets hinweg konstant.
  • Wenn Sie mehrere Assets festlegen, folgt die Angabenverarbeitung standardmäßig dem traditionellen Ablauf. Wenn Sie ein einzelnes Asset angeben, erfolgt die Angabenverarbeitung über einen Ablauf, der für das Tool oder den Anhang spezifisch ist.
  • Im Fehlerfall werden Probleme pro Asset erstellt. Diese Probleme werden nach einer erfolgreichen erneuten Ausführung der Angabensammlung geschlossen. Der Abschluss entspricht den Anlagen, die Sie angegeben haben.
  • Es wird eine einzelne Angabendatei generiert, die eine ID enthält, die alle kombinierten Assets umfasst.