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.
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#
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:
-
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
-
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
-
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
-
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 -
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
-
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 -
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_artifactBefehl 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:
| 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:
-
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 -
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:
- 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" - 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.