IBM Cloud Docs
Création d'actifs et collecte de preuves dans DevSecOps

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.

Types d'actifs
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# / un actif d'artefact: /artefact.

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:

  1. 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

  2. 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

  3. 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

  4. 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

  5. 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

  1. 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
    
  2. 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:

Informations sur les arguments
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 :

  1. 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
    
  2. 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 :

  1. 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"
    
  2. 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