Création d'actifs et collecte de preuves dans DevSecOps
In the realm of DevSecOps process, asset creation and Evidence collection ensures that security seamlessly integrates with every phase of the software development lifecycle. Cette approche incarne le concept de "gauche du changement", où la sécurité n'est pas une pensée secondaire, mais une partie inhérente du processus de développement. DevSecOps, avec son DevSecOps intégration continue et Continuous Delivery (CI/CD), permet aux équipes d'identifier les vulnérabilités dès les premiers stades, facilitant ainsi la mise à disposition de logiciels conformes.
La création d'actifs et la collecte de preuves jouent un rôle central dans l'écosystème Onepipeline. Pour rester en conformité avec les normes de sécurité, il est impératif de suivre les lignes directrices décrites dans ce guide complet. Ce faisant, vous pouvez vous assurer que votre processus de développement de logiciels est non seulement efficace, mais également sécurisé à partir de zéro.
Définition d'un actif dans DevSecOps
Dans le contexte du DevSecOps, un actif est une entité fondamentale qui fait l'objet de tests et d'analyses rigoureux. Ces actifs englobent diverses formes telles que les validations Git existantes dans les référentiels des images Docker. Un actif est un point focal du processus de collecte d'informations collectées, représentant l'objet sur lequel une analyse ou un test a été effectué. Remarquablement, la flexibilité de DevSecOps's s'étend au-delà du code et des images traditionnels, y compris des entités abstraites telles que les exécutions de pipeline ou les buckets COS (Cloud Object Storage), pour autant que des preuves puissent être rassemblées à leur sujet.
Il existe différents types d'actifs.
Pour une clarté optimale, les actifs doivent être clairement identifiés. Voici quelques exemples :
- Actif de validation: composant le référentiel et hachage de validation: https://repo.url/org/repo#
- Actif d'image: englobant l'image Docker et son résumé: docker://registry.URL/name@sha256:
- Actif d'exécution de pipeline: Dénotant le pipeline et l'ID d'exécution:
pipelinerun:// < ID_PIPELIN> / < ID_RUN>
- Autres actifs: exiger une URL qualifiée complète. Par exemple, un actif de validation avec un nom de fichier:
https://repo.url/org/repo#
Il est conseillé de ne pas utiliser des étiquettes mutables comme des étiquettes, des branches ou d'autres références, car elles peuvent être réadressées ou déplacées, entraînant des complications potentielles.
Normalisation du stock pour les actifs génériques
Pour assurer une gestion des stocks cohérente et efficace, il est essentiel de valider des zones spécifiques lors de l'utilisation des commandes d'ajout save_artifact et cocoa inventory. Le respect des lignes directrices
suivantes garantira des actions appropriées en fonction des informations fournies:
-
Type: mots clés réservés pour indiquer le type de l'artefact: Pour tout autre type d'artefact, vous pouvez choisir un type qui est une chaîne qui indique de façon appropriée le type inhérent à l'exemple. déploiement pour les fichiers de déploiement, tar pour les fichiers tar
-
Nom: Gérez un nom d'artefact statique tout au long de l'exécution du pipeline. Evitez d'incorporer des éléments dynamiques tels que des hachages de validation dans le nom pour garantir l'exactitude des problèmes de fermeture automatique. Exemple : o us.icr.io/my-registry/ my-app:20230828074614-master-commit-1@sha256:sha256-1 o my-app-202304211845444721_IKS_deployment
-
Provenance: indiquez une URL de domaine complet pour établir l'origine de l'artefact. Exemple : 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
-
Résumé: Suivez le modèle d'expression régulière défini: commencez par'sha256,'suivi d'un signe deux-points (:), puis le hachage SHA256 réel (sha256:
). Exemple : o sha256:sha256-1 -
Signature: si l'artefact est signé, incluez les informations de signature appropriées. Le respect de ces lignes directrices normalisées améliore le processus de gestion des stocks, en assurant un suivi et une récupération précis des actifs.
Procédure de stockage des informations sur les actifs
-
Utilisez la commande save_repo:
Utilisez le format suivant pour enregistrer les informations sur les actifs d'un commit dans le référentiel, ce qui est nécessaire pour associer l'actif de construction au commit.
Exemples :
save_repo app-repo \ url=https://github.ibm.com/org/my-app \ path=my-app \ commit=commit1 \ branch=master \ buildnumber=1 -
Utilisez la commande Save_artifact pour stocker des informations sur différents types d'actifs, tels que les images et les déploiements, en utilisant la commande
save_artifact
Exemples :
Utilisation de la commande save_artifact pour les images :
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
Utilisation de la commande save_artifact pour une ressource qui n'est pas une image :
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
Procédure de création d'une entrée de stock à partir des informations d'actif
Utilisez l'ajout d'inventaire de cacao:
| Argument | Description | Obligatoire / Facultatif | Utilisé dans le code / les remarques |
|---|---|---|---|
| artefact | Nom de l'artefact. | [chaîne de caractères] [requise] | Cette zone est utilisée pour le sujet dans la gestion des problèmes |
| version | Version de l'application donnée | [chaîne de caractères] [requise] | Version de l'artefact |
| url-référentiel | Le référentiel de l'application | [chaîne de caractères] [requise] | URL du référentiel dans lequel cet actif est généré |
| ID-EXÉCUTION-PIPELINE | ID de l'exécution du pipeline | [chaîne de caractères] [requise] | Utilisé pour définir la portée des informations collectées dans CD et CC |
| Commit-sha | Validation exacte de la version d'application | [chaîne de caractères] [requise] | validation de l'URL de référentiel dans laquelle cet actif est généré |
| nom | Le nom de l'application | [chaîne de caractères] [requise] | Nom de fichier ou, fondamentalement, entrée de stock pour l'actif |
| numéro-génération | Le numéro de build du build | [chaîne de caractères] [requise] | Numéro de version de l'actif créé, utilisé pour la mise à jour des connaissances |
| type | Type d'artefact : un parmi | ||
| image de conteneur, image virtuelle, fichier, paquet | [chaîne de caractères] [requise] | Type du bien, qui doit être du même type que celui enregistré à l'aide de la commande save_artifact avant l'appel à la collecte d'éléments de preuve. |
|
| artefacts d'application | Pour obtenir les informations supplémentaires de l'actif | [chaîne de caractères] [optionnelle] | |
| sha256 | Hachage sha256 de l'artefact | [chaîne de caractères] [requise] | utilisé pour définir le chemin de l'actif dans le casier |
| provenance | URL complète où l'artefact est stocké | [chaîne de caractères] [requise] | |
| signature | Signature des artefacts | [chaîne de caractères] [requise] | Sera utilisé pour vérifier la signature de l'actif, besoin de plus de précisions |
| environnement | Nom de l'environnement dans lequel l'entrée doit être ajoutée | [chaîne de caractères] [optionnelle] | la branche de stock dans laquelle l'entrée serait ajoutée, qui est par défaut la branche maître |
Exemples :
-
Ajout d'inventaire de cacao pour un actif d'image:
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 -
Ajout d'inventaire de cacao pour un actif autre qu'une image:
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
Définir une preuve dans DevSecOps
Une preuve est une entrée qui prouve qu'une vérification ou un test d'examen d'un type et d'un outil spécifiques a été effectué ou est sur le point d'être effectué. Les informations collectées contiennent des pointeurs vers des problèmes, des actifs, des portées et des pièces jointes, mais des données minimales.
Procédure de collecte d'informations collectées à l'aide des informations de l'actif
Utilisez collect-evidence pour la collecte de preuves sur les informations d'actif précédentes
Exemples :
- Collection d'informations collectées pour un actif d'artefact:
collect-evidence \ --tool-type "jest" \ --status "success" \ --evidence-type "com.ibm.unit_tests" \ --asset-type "artifact" \ --asset-key "artifact-1" - Collecte d'informations collectées pour un actif de référentiel:
collect-evidence \ --tool-type "jest" \ --status "success" \ --evidence-type "com.ibm.unit_tests" \ --asset-type "repo" \ --asset-key "repo-1"
Dans le pipeline CD, le déploiement doit faire référence à une zone de provenance au lieu d'un artefact pour télécharger l'artefact