script de collecte d'informations collectées

Le collect-evidence script aide les adoptants, les utilisateurs et les contributeurs à envoyer leurs données de conformité dans le flux de données de gestion des changements de l' DevSecOps.

Le script effectue les tâches suivantes :

  • Tente de traiter les pièces jointes en tant que résultats et crée des problèmes d'incident à partir de ces résultats. Un nombre limité de formats de sortie d'outil sont pris en charge.
  • Si des problèmes sont détectés, le script évalue leurs délais de grâce (dates d'échéance) et les états d'exemption.
  • Crée un actif d'informations collectées dans le casier d'informations collectées.
  • Crée les informations collectées elles-mêmes et joint les problèmes et les pièces jointes fournies.

Pour un statut success ou failure, si aucune pièce jointe n'est transmise dans collect-evidence, les journaux de pipeline pour cette tâche particulière et l'étape sont capturés en tant que pièce jointe.

Le script collect-evidence est fourni par le pipeline. Il n'est pas nécessaire de l'installer. Le script présente les dépendances suivantes :

  • bash
  • libstdc++ bibliothèque partagée
  • libgcc bibliothèque partagée

Assurez-vous que les dépendances sont installées dans l'image de base qui utilise cet outil pour générer des informations collectées.

Architecture des commandes CLI

La fonctionnalité collect-evidence est disponible via deux interfaces :

  1. Shell Script Wrapper (collect-evidence): Interface de script bash traditionnelle qui assure la compatibilité ascendante
  2. Commande CLI directe (cocoa locker evidence collect): Interface CLI native avec accès à toutes les fonctionnalités

Basculer entre les versions

Le script shell collect-evidence prend en charge deux versions d'implémentation qui peuvent être modifiées à l'aide de la propriété d'environnement collect-evidence-version:

Version Implémentation Statut Description
v1 Existant Disponible Mise en œuvre originale basée sur bash avec compatibilité ascendante totale
v2 Basé sur l'interface utilisateur Valeur par défaut Mise en œuvre moderne qui intègre la commande CLI de cocoa locker evidence collect

Utilisation

Le script collect-evidence requiert les paramètres suivants:

  • --tool-type ID de l'outil qui fournit les données d'informations collectées. Exemple : « owasp-zap-ui », « cra »
  • --evidence-type L'identifiant du type de preuve. Exemple : com.ibm.image_vulnerability_scan, com.ibm.unit_tests
  • --asset-key Clé dans les actifs pipelinectl. Pour les commandes suivantes load_artifact <key> ou load_repo <key>
  • --asset-type Le type d'actif de pipelinectl peut être l'un des types suivants: repo, artifact
  • --status Le statut d'une preuve peut être l'un des suivants : success, pending, failure
  • --assets Spécifiez plusieurs paires actif-clé et actif-type. Par exemple, vous pouvez utiliser --assets asset-key1:asset-type1 --assets asset-key2:asset-type2. Si vous utilisez cette option, ne spécifiez pas la clé d'actif et le type d'actif séparément.

Le paramètre suivant est facultatif :

  • --attachment Fichier à traiter en tant que résultat et joint aux informations collectées. Le paramètre peut être spécifié plusieurs fois pour plusieurs fichiers. Pour la signature d'images, assurez-vous que le fichier de signature est joint à l'aide du paramètre --attachment. Le fichier de signature doit inclure les détails de la signature, tels que l'identifiant de la clé, l'algorithme et le condensé signé. Les formats courants sont JSON ou TXT.
  • --meta Métadonnées arbitraires à ajouter aux informations collectées. Le paramètre accepte les paires'key = value'et peut être spécifié plusieurs fois. Vous pouvez inclure des métadonnées relatives au processus de signature de l'image, telles que l'environnement de signature ou toute configuration spécifique utilisée lors de la signature.
  • --additional-comment Commentaire ajouté à un problème si un pipeline a échoué.

Pour obtenir de l'aide, utilisez la commande suivante :

collect-evidence --help

Valeur renvoyée

collect-evidence génère la chaîne de statut des informations collectées évaluées sur STDOUT ( success, failure ou pending). Cette valeur évaluée dépend des pièces jointes de résultat traitées, des problèmes d'incident détectés et de la résolution possible de ces problèmes, par exemple avec une date d'échéance définie ou un libellé d'exemption. Pour plus d'informations, voir Problèmes liés aux incidents.

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

Passage à v2 (implémentation basée sur le CLI)

Pour utiliser la nouvelle implémentation basée sur l'interface de programmation, définissez la propriété d'environnement dans votre pipeline :

collect-evidence-version=v2

Utilisation directe de la commande CLI

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"

Pour une référence complète de la commande CLI et tous les paramètres disponibles, voir cocoa locker evidence collect.

Exemple d'utilisation

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

Vous pouvez utiliser directement la commande cocoa locker evidence collect:

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"

Formats d'outil pris en charge

L'implémentation en cours prend actuellement en charge les outils suivants (fournis en tant que paramètre --tool-type ):

Nom de l'outil Description
cra IBM Analyseur de risques liés au code
cra-cis IBM Analyseur de risques liés au code CIS
va Vulnerability Advisor pour IBM Cloud Container Registry
gosec GoLang Scanner de sécurité
xray JFrog Xray - Analyse de vulnérabilité et sécurité des conteneurs
owasp-zap Proxy d'attaque OWASP Zed (ZAP)
owasp-zap-ui Interface utilisateur d'OWASP Zed Attack Proxy (ZAP UI)
sonarqube SonarQube scanner
peer-review Examen par les pairs
twistlock TwistLock
cims Multi-scanner d'images de conteneurs (CIMS)
mend Mend Scan
mend-sast Réparer le scan SAST
checkov Scan Checkov
cra-tf Code Risk Analyzer pour Terraform
tfsec Scanner de sécurité Terraform
fips-scanner Scanner FIPS (Federal Information Processing Standards)
detect-secrets Détection de secrets
ciso-code-signing Outil de signature du code CISO
sysdig Analyse Sysdig
cyclonedx CycloneDX format. La détection des outils pour la gestion des problèmes sera effectuée sur la base des métadonnées du site CycloneDX ici
grype Grype Scan

CycloneDX Metadata utilise la détection des outils pour la gestion des incidents.

Si le script collect-evidence est appelé avec un type d'outil non pris en charge, le script ne tente pas de traiter les pièces jointes. En outre, le traitement des problèmes est ignoré et la collecte des informations collectées n'est pas arrêtée.

Si votre script fournit une pièce jointe à partir d'un outil pris en charge, mais que la pièce jointe ne peut pas être traitée, le traitement des problèmes est ignoré et la collecte des informations collectées n'est pas arrêtée.

Type d'informations collectées

Vous pouvez définir le type d'informations collectées à l'aide du paramètre --evidence-type. Vous pouvez définir n'importe quel type, mais IBM Cloud® Compliance Manager prend en charge les types d'informations collectées suivants:

  • 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

Collecte de données probantes et cartographie des outils

Outil d'aide à la décision
ID du type de preuve Outil pris en charge par défaut Origine Propriété Actif recommandé Problèmes
com.ibm.branch_protection cocoa-branch-protection intégration continue Plateforme référentiel Questions non liées à un incident
com.ibm.unit_tests jest RP/CI Utilisateur référentiel Questions non liées à un incident
com.ibm.detect_secrets detect-secrets RP/CI/CC Plateforme référentiel Questions relatives aux incidents et aux non-incidents
com.ibm.code_vulnerability_scan cra-tf, cra, mend
Pour l'infrastructure en tant que code : tfsec, checkov
intégration continue Plateforme référentiel Questions relatives aux incidents et aux non-incidents
com.ibm.code_bom_check cra-bom, sbom-utility RP/CI/CC Plateforme référentiel Questions relatives aux incidents et aux non-incidents
com.ibm.code_cis_check cra-cis RP/CI/CC Plateforme référentiel Questions non liées à un incident
com.ibm.peer_review peer-review intégration continue Plateforme référentiel Questions non liées à un incident
com.ibm.static_scan sonarqube, gosec
Pour l'infrastructure en tant que code : terraform-fmt, terraform-validate, tflint
CI/CC Plateforme référentiel Questions relatives aux incidents et aux non-incidents
com.ibm.cloud.image_signing artifact-signing intégration continue Plateforme référentiel Questions non liées à un incident
com.ibm.acceptance_tests jest intégration continue Utilisateur artefact Questions non liées à un incident
com.ibm.dynamic_scan owasp-zap, owasp-zap-ui intégration continue Plateforme artefact Questions relatives aux incidents et aux non-incidents
com.ibm.cloud.image_vulnerability_scan va, sysdig, xray CI/CC Plateforme artefact Questions relatives aux incidents et aux non-incidents
com.ibm.prod_change_request gitlab CD Plateforme artefact Questions non liées à un incident
com.ibm.close_change_request gitlab CD Plateforme artefact Questions non liées à un incident
com.ibm.cloud.slsa tekton-chains intégration continue Plateforme artefact Questions non liées à un incident
com.ibm.cloud.verify_signature ciso-code-signing CD Plateforme artefact Questions non liées à un incident
com.ibm.pipeline_logs ND CI/CD/CC Plateforme ND ND
com.ibm.pipeline_run_data ND CI/CD/CC Plateforme ND ND
com.ibm.network_compliance intégration continue Plateforme référentiel Questions relatives aux incidents et aux non-incidents

Lorsqu'une analyse échoue ou que les pièces jointes ne peuvent pas être analysées, l'outil crée automatiquement un problème non incident pour suivre l'échec.

Exigences relatives aux actifs

Les informations collectées collectées qui sont collectées à l'aide de cet outil font partie du travail de collecte d'informations collectées V2 et des mises à jour de casier d'informations collectées associées.

Cette nouvelle méthode met l'accent sur les informations collectées basées sur des actifs, ce qui signifie que les informations collectées sont connectées à l'artefact et au référentiel via les analyses et les tests qui s'exécutent sur ces artefacts ou référentiels, et ont produit des résultats pour les informations collectées. Exemple :

  • Un référentiel avec une certaine validation devient un actif de validation, qui est analysé, créant des informations collectées pour l'actif de validation.
  • A l'aide du même référentiel et de la même validation, une image est générée. L'image devient un actif lié à l'actif source, au référentiel et à la validation.
  • L'image est analysée et des informations collectées sont créées. Tous les résultats d'analyse sont connectés via les informations collectées, son actif et les actifs associés.

Pour que tout cela fonctionne ensemble, les actifs qui sont fournis avec les paramètres --asset-type et --asset-key doivent être conformes à certaines exigences:

Actifs repo ajoutés à l'aide de la commande save_repo

Consultez la référence de commande pour obtenir des informations d'utilisation exactes.

Champs requis :

  • url Le dépôt URL.
  • commit Le SHA de validation.

Actifs artifact ajoutés à l'aide de la commande save_artifact

Consultez la référence de commande pour obtenir des informations d'utilisation exactes.

Champs requis :

  • name Nom de l'artefact. Par exemple, pour une image, il faut inclure le registre, l'espace de noms et l'image (exemple : us.icr.io/team-images/service).
  • digest Le résumé de l'artefact (exemple : sha256:a2292ed2b82c7a51d7d180c3187dbb0f7cc9ab385a68484c4f117e994acd6192).

Modifications requises dans save_artefact pour les non-images: La collecte d'informations collectées prend désormais en charge tous les types d'actif. Pour collecter des informations collectées afin de travailler sur n'importe quel type d'actif save_artifact Il convient d'enregistrer explicitement le fichier avec l' type, par exemple « zip » save_artifact artifact-1 type=zip .... Dans le script de collecte de preuves, le asset-type doit être un artefact et le type est demandé à partir de l'artefact. Pour que ce processus fonctionne, l'ajout d'actif de casier de cacao a été modifié pour ajouter un actif de n'importe quel type. Une fois sauvegardé, le script de collecte d'informations collectées peut être appelé comme suit:

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

Veuillez vous reporter à notre exemple d'application pour un exemple d'implémentation pour deployment le type https://us-south.git.cloud.ibm.com/open-toolchain/hello-compliance-app

Avec ces modifications, le script de collecte d'informations collectées traite tous les types d'artefact, y compris les artefacts d'image et non d'image.

Plusieurs actifs en collection-informations collectées

A l'aide de la fonction de collecte d'informations collectées, vous pouvez configurer la collecte simultanée d'informations collectées pour plusieurs actifs. Vous lancez la collecte d'informations collectées à l'aide de l'indicateur --assets, qui spécifie plusieurs paires actif-clé et actif-type. Par exemple, input --assets asset-key1:asset-type1 --assets asset-key2:asset-type2. Si vous choisissez cette option, n'indiquez pas la clé d'actif et le type d'actif séparément.

Gardez à l'esprit les points clés suivants concernant la collection multi-actifs:

  • status, attachment, tool-type, evidence-type et upload-logs sont constants dans tous les actifs.
  • Par défaut, lorsque vous désignez plusieurs actifs, le traitement des informations collectées suit le flux existant. Si vous spécifiez un actif unique, le traitement des informations collectées s'effectue via un flux spécifique à l'outil ou à la pièce jointe.
  • En cas d'échec, des problèmes sont créés par actif. Ces problèmes sont fermés lors de la réexécution réussie de la collecte d'informations collectées. La fermeture est en corrélation avec les actifs que vous avez spécifiés.
  • Un fichier d'informations collectées unique est généré, qui comporte un ID englobant tous les actifs combinés.