IBM Cloud Docs
Asset-Erstellung und Beweissammlung in DevSecOps

Asset-Erstellung und Beweissammlung in DevSecOps

Im Bereich des DevSecOps-Prozesses sorgen die Erstellung von Assets und die Sammlung von Nachweisen dafür, dass die Sicherheit nahtlos in jede Phase des Softwareentwicklungszyklus integriert wird. Dieser Ansatz verkörpert das Konzept der "Shift-Links", wo Sicherheit kein Nachdenken, sondern ein fester Bestandteil des Entwicklungsprozesses ist. DevSecOps, mit seiner DevSecOps Continuous Integration und Continuous Delivery (CI/CD), ermöglicht es Teams, Schwachstellen in den frühesten Stadien zu identifizieren, was die Freigabe von konformer Software erleichtert.

Die Erstellung von Assets und die Erfassung von Angaben spielen eine zentrale Rolle im Onepipeline-Ökosystem. Um mit den Sicherheitsstandards konform zu bleiben, müssen Sie unbedingt die Richtlinien befolgen, die in diesem umfassenden Handbuch beschrieben sind. Dadurch können Sie sicherstellen, dass Ihr Softwareentwicklungsprozess nicht nur effizient, sondern auch von Grund auf sicher ist.

Definieren eines Assets in DevSecOps

Im Kontext von DevSecOps, ist ein Asset eine grundlegende Einheit, die strengen Tests und Scans unterzogen wird. Diese Assets umfassen verschiedene Formen wie vorhandene Git-Festschreibungen in Repositorys für Docker-Images. Ein Asset ist ein Schwerpunkt des Angabensammlung, der das Objekt darstellt, für das ein Scan oder Test durchgeführt wurde. Bemerkenswert ist, dass die Flexibilität von DevSecOps's über den traditionellen Code und die Images hinausgeht und auch abstrakte Entitäten wie Pipeline-Läufe oder COS (Cloud Object Storage) Buckets einschließt, solange dafür Beweise gesammelt werden können.

Es gibt verschiedene Arten von Vermögenswerten.

Vermögenswerttypen.
Arten von Vermögenswerten.

Für eine optimale Übersichtlichkeit müssen Assets eindeutig identifiziert werden. Hier einige Beispiele:

  • Commit-Asset: Das Repository wird zusammen mit dem Commit-Hash: https://repo.url/org/repo#
  • Image-Asset: Enthält das Docker-Image und seinen Digest: docker://registry.URL/name@sha256:
  • Pipeline Run Asset: Pipeline und Ausführungs-ID zurückweisen:

pipelinerun:// < PIPELINE-ID>/< RUN_ID>

  • Andere Assets: Erfordert eine vollständig qualifizierte URL. Beispiel für ein Commit-Asset mit einem Dateinamen:

https://repo.url/org/repo# / Artefaktasset: /artefakt.

Es ist ratsam, keine veränderlichen Bezeichnungen wie Tags, Verzweigungen oder andere Referenzen zu verwenden, da sie möglicherweise gelesen oder verschoben werden, was zu Komplikationen führen kann.

Bestand für generische Anlagen standardisieren

Um ein konsistentes und effektives Bestandsmanagement zu gewährleisten, ist es wichtig, bestimmte Felder zu validieren, wenn die Befehle save_artifact und cocoa inventory add verwendet werden. Durch die Einhaltung der folgenden Richtlinien werden auf der Basis der bereitgestellten Informationen ordnungsgemäße Aktionen sichergestellt:

  1. Typ: Reservierte Schlüsselwörter zur Angabe des Artefakttyps: o commit for commit assets o image for image assets o generic for pipeline-run assets Für jeden anderen Artefakttyp können Sie einen Typ auswählen, der eine Zeichenfolge ist, die den inhärenten Typ für z. B. Implementierung für Bereitstellungsdateien, TAR für die TAR-Dateien

  2. Name: Verwalten eines statischen Artefaktnamens während der gesamten Pipelineausführung. Vermeiden Sie es, dynamische Elemente wie Commit-Hashes in den Namen zu integrieren, um die Richtigkeit der Probleme beim automatischen Schließen sicherzustellen. Beispiel: o us.icr.io/my-registry/ my-app:20230828074614-master-commit-1@sha256:sha256-1 o my-app-202304211845444721_IKS_deployment

  3. Herkunft: Geben Sie eine vollständig qualifizierte Domänen-URL an, um den Ursprung des Artefakts festzulegen. Beispiel: o us.icr.io/my-registry/my-app:20230828074614-master-commit-1@sha256:sha256-1 o https://raw.github.ibm.com/org/my-app/commit-1/deployment_iks.yml

  4. Digest: Folgen Sie dem definierten regulären Ausdruck: Beginnen Sie mit 'sha256,' gefolgt von einem Doppelpunkt (:) und dann dem tatsächlichen SHA256-Hashwert (sha256: ). Beispiel: o sha256:sha256-1

  5. Signatur: Wenn das Artefakt signiert ist, schließen Sie die relevanten Signaturinformationen ein. Durch die Einhaltung dieser standardisierten Richtlinien wird der Bestandsmanagementprozess verbessert und die genaue Verfolgung und Abfrage von Assets sichergestellt.

Schritte zum Speichern der Assetinformationen

  1. Befehl 'save_repo' verwenden:

    Verwenden Sie das folgende Format, um die Asset-Informationen für eine Übergabe im Repository zu speichern, die für die Zuordnung des Build-Assets zur Übergabe erforderlich sind.

    Beispiele:

    save_repo app-repo \
    url=https://github.ibm.com/org/my-app \
    path=my-app \
    commit=commit1 \
    branch=master \
    buildnumber=1
    
  2. Verwenden Sie den Befehl Save_artifact, um Informationen für verschiedene Asset-Typen zu speichern, wie z.B. Image und Deployment, indem Sie den save_artifact Befehl verwenden

Beispiele:

Verwendung des Befehls save_artifact für Bild-Asset:

save_artifact app-image \
name=us.icr.io/my-registry/my-app:20230828074614-master-commit-1@sha256:sha2561 \
type=image \
digest=sha256:sha2561 \
tags=mytag1 \
source=https://github.ibm.com/org/my-app/commit-1 \
signature=sign-1 \
provenance=us.icr.io/my-registry/my-app:20230828074614-master-commit-1@sha256:sha2561

Verwendung des Befehls save_artifact für Nicht-Bild-Assets:

save_artifact artifact-1 \
name=my-app_IKS_deployment \
type=deployment \
signature=sign2 \
deployment_type=IKS \
provenance=https://raw.github.ibm.com/org/my-app/commit-1/deployment_iks.yml

Schritte zum Erstellen eines Bestandseintrags aus den Assetinformationen

Verwenden Sie cacao inventory add:

Argumentinformationen
Argument Beschreibung Erforderlich/Optional Verwendet in Code/Bemerkungen
Artefakt Artefaktname. [string] [erforderlich] Dieses Feld wird für das Thema im Problemmanagement verwendet.
Version Die Version der angegebenen Anwendung [string] [erforderlich] Version des Artefakts
repository-url Das Repository der Anwendung [string] [erforderlich] URL des Repositorys, in dem dieses Asset erstellt wird
PIPELINEAUSFÜHRUNGS-ID Die ID der Pipelineausführung [string] [erforderlich] Wird zum Eingrenzen der Angaben in CD und CC verwendet
Commit-sha Genaue Festschreibung der Anwendungsversion [string] [erforderlich] Festschreibung der Repository-URL, unter der dieses Asset erstellt wird.
Name Der Name der Anwendung [string] [erforderlich] Dateiname oder im Wesentlichen der Bestandseintrag für das Asset
Buildnummer Die Build-Nummer des Builds [string] [erforderlich] Buildnummer des erstellten Assets, die für die Insights-Aktualisierung verwendet wird.
Typ Art des Artefakts: eines von
container-Image, virtuelles, Image, Datei, Paket [string] [erforderlich] Der Typ des Assets muss derselbe sein, der mit dem Befehl save_artifact vor dem Aufruf von collect evidence gespeichert wurde.
app-artefakte Zusätzliche Informationen zum Asset [zeichenkette] [optional]
sha256 sha256-Hashwert des Artefakts [string] [erforderlich] Wird verwendet, um den Pfad der Anlage im Schließfach zu definieren
Herkunft Die vollständig qualifizierte URL, unter der das Artefakt gespeichert wird. [string] [erforderlich]
Signatur Artefaktsignatur [string] [erforderlich] Wird verwendet, um die Signatur der Anlage zu verifizieren, weitere Klärung erforderlich
Umgebung Der Name der Umgebung, in der der Eintrag hinzugefügt wird [zeichenkette] [optional] Die Bestandsverzweigung, in der der Eintrag hinzugefügt wird. Dies ist standardmäßig der Mastereintrag.

Beispiele:

  1. Hinzufügen eines Kakaobestands für ein Bildasset:

    cocoa inventory add \
    --artifact=us.icr.io/my-registry/my-app:20230828074614-master-commit-1@sha256:sha2561 \
    --name=my-app \
    --app-artifacts='{ "app": "my-app", "tags": "20230828074614-master-commit1" }' \
    --signature=sign1 \
    --provenance=us.icr.io/my-registry/my-app:20230828074614-master-commit-1@sha256:sha2561\
    --sha256=sha256:sha2561 \
    --type=image \
    --repository-url=https://github.ibm.com/org/my-app \
    --commit-sha=commit1 \
    --version=commit1 \
    --build-number=1 \
    --pipeline-run-id=pipeline-run-1\
    --org=Org\
    --repo=my-inventory-20230421184544472 \
    --git-provider=github \
    --git-token-path=./inventory-token \
    --git-api-url=https://github.ibm.com/api/v3
    
  2. Hinzufügen eines Kakaobestands für ein Nicht-Image-Asset:

    cocoa inventory add \
    --artifact=my-app_IKS_deployment \
    --name=my-app_IKS_deployment \
    --app-artifacts='{ "app": "my-app", "tags": "20230828074614-master-commit1" }' \
    --signature=sign2 \
    --provenance=https://raw.github.ibm.com/org/my-app/commit-1/deployment_iks.yml \
    --sha256=sha256:sha2562 \
    --type=deployment \
    --repository-url=https://github.ibm.com/org/my-app \
    --commit-sha=commit1 \
    --version=commit1 \
    --build-number=1 \
    --pipeline-run-id=pipeline-run-1\
    --org=Org\
    --repo=my-inventory-20230421184544472 \
    --git-provider=github \
    --git-token-path=./inventory-token \
    --git-api-url=https://github.ibm.com/api/v3
    

Definition eines Nachweises in DevSecOps

Angaben sind ein Eintrag, der beweist, dass eine Scanprüfung oder ein Test eines bestimmten Typs und eines bestimmten Tools ausgeführt wurde oder ausgeführt werden soll. Die Angaben enthalten Verweise auf Probleme, Assets, Bereiche und Anhänge, aber minimale Daten.

Schritte zum Erfassen von Angaben mithilfe der Informationen des Assets

Verwenden Sie collect-evidence für die Angabensammlung zu den vorherigen Assetinformationen.

Beispiele:

  1. Angabensammlung für ein Artefaktasset
      	collect-evidence \
            --tool-type "jest" \
            --status "success" \
            --evidence-type "com.ibm.unit_tests" \
            --asset-type "artifact" \
            --asset-key "artifact-1"
    
  2. Angabensammlung für ein Repository-Asset:
    collect-evidence \
        --tool-type "jest" \
        --status "success" \
        --evidence-type "com.ibm.unit_tests" \
        --asset-type "repo" \
        --asset-key "repo-1"
    

In der CD-Pipeline sollte die Bereitstellung auf ein Provenienzfeld anstatt auf ein Artefakt verweisen, um das Artefakt herunterzuladen.