Plug-in Code Risk Analyzer pour IBM Cloud

Code Risk Analyzer ne sera plus disponible dans toutes les régions le 12 février 2027. Toutefois, si une région n'utilise pas activement l'analyseur de risque de code, le service peut être interrompu plus tôt dans cette région. En savoir plus

L'interface de ligne de commande (CLI) d' IBM Cloud® fournit des commandes pour l'analyse des risques liés au code. Vous pouvez utiliser l'interface CLI IBM Cloud pour analyser votre code afin de détecter les vulnérabilités et la conformité à certaines règles. Code Risk Analyzer est disponible dans toutes les régions IBM Cloud dans lesquelles les chaînes d'outils sont prises en charge.

Utilisez le CLI pour effectuer les tâches suivantes :

  • Générer une nomenclature qui répertorie les dépendances et les informations de licence disponibles pour tous les paquets de systèmes d'exploitation et d'applications tiers. Vous pouvez également générer cette sortie au format CycloneDX-specific.
  • Découvrir les vulnérabilités des paquets figurant dans la nomenclature. Vous pouvez également consulter le rapport généré au format CycloneDX-specific ou utiliser la correction automatique des vulnérabilités pour les applications Node.js, Maven ou Gradle (Groovy).
  • Analyser des fichiers Kubernetes pour le respect de certaines règles.

À partir de janvier 2024, Code Risk Analyzer utilisera les données de vulnérabilité fournies par le projet open source Clair au lieu des données fournies par la société commerciale Snyk Limited. Aucune action spécifique n'est requise de votre part à la suite de ce changement. Cependant, vous pouvez observer quelques différences dans les particularités des CVE signalés par Code Risk Analyzer.

Contenu pris en charge

Code Risk Analyzer prend en charge les langages Java™, Node.js, Python et Go. Le tableau suivant répertorie et décrit le contenu pris en charge par Code Risk Analyzer.

Contenu pris en charge
de contenu Description
Java Le repo nécessite Maven ou Gradle pour l'automatisation de la construction. Maven utilise le fichier pom.xml pour calculer les dépendances, et Gradle utilise le fichier build.gradle(.kts). Code Risk Analyzer peut automatiser la remédiation pour Maven et Gradle (Groovy).
Node.js package-lock.json calcule les dépendances. Pour Node.js, l'analyseur de risque de code peut également automatiser la remédiation. Assurez-vous que la version de npm installée correspond à la version de npm du projet.
Python Les dépendances sont calculées à l'aide des fichiers requirements.txt et pyproject.toml.
Golang Prend en charge la gestion des dépendances go mod et go dep. Pour go mod, le fichier go.sum doit se trouver dans le référentiel. Pour go dep, le fichier Gopkg.lock doit se trouver dans le référentiel.
Dockerfiles Les fichiers du référentiel avec le modèle Dockerfile sont pris en compte. Pour les images de conteneurs, les distributions Debian, Red Hat Enterprise Linux®, Alpine, et Ubuntu Linux sont prises en charge.
Kubernetes Les fichiers avec les suffixes .yaml et .yml sont pris en compte. La valeur kind doit être définie sur Pod, ReplicaSet, ReplicationController, Deployment, Daemonset, Statefulset, Job, CronJob, NetworkPolicy, ou Ingress.
Calico Les fichiers avec les suffixes .yaml et .yml sont pris en compte. La valeur kind doit être réglée sur NetworkPolicy, GlobalNetworkPolicy, Profile, NetworkSet, GlobalNetworkSet, ou HostEndpoint.
Terraform Le fichier de plan Terraform doit être généré à l'aide de IBM Cloud en tant que fournisseur Terraform.

Code Risk Analyzer examine le code source et les dépendances d'images dans vos dépôts pour détecter les vulnérabilités. Le tableau suivant montre les sources d'information sur les vulnérabilités que Code Risk Analyzer consulte pour différents types de dépendances.

Dépendances prises en charge pour lesquelles Code Risk Analyzer recherche des vulnérabilités
Dépendance Versions prises en charge Source des avis de sécurité
Alpine image Toutes les versions stables avec le support de sécurité de l'éditeur. Alpine SecDB base de données.
Debian image Toutes les versions stables avec le support de sécurité de l'éditeur.

Les CVE sur les paquets binaires qui sont associés au paquet source Debian linux, tels que linux-libc-dev, ne sont pas signalés. La plupart de ces paquets binaires sont des modules de noyau et de noyau, qui ne sont pas exécutés dans des images de conteneur.

Debian Suivi des bogues de sécurité.
GoogleContainerTools image sans distorsion Toutes les versions stables avec le support de sécurité de l'éditeur. GoogleContainerTools sans distorsion
Red Hat® Enterprise Linux® (RHEL) image RHEL 6, RHEL/UBI 7, RHEL/UBI 8 et RHEL/UBI 9 Red Hat API de données de sécurité.
Ubuntu image Toutes les versions stables avec le support de sécurité de l'éditeur. Ubuntu Suivi CVE.
Go, npm ( JavaScript ), Maven ( Java ), PyPI ( Python ), RubyGems ( Ruby ), et Packagist (PHP) Toutes les versions stables avec le support de sécurité de l'éditeur. Base de données Open Source sur les vulnérabilités.

Problèmes connus de Code Risk Analyzer

Code Risk Analyzer ne peut pas reconnaître les vulnérabilités des packages d'application qui n'utilisent pas un schéma de gestion des versions, tel que major.minor.patch. Par exemple, les versions préliminaires ou les versions contenant des métadonnées de génération ne sont pas prises en charge.

Prérequis

  • Installez l'interface de ligne de commande IBM Cloud. Pour plus d'informations, voir Download IBM Cloud CLI.

  • Installez le plug-in de l'interface de ligne de commande Code Risk Analyzer en exécutant la commande suivante :

ibmcloud plugin install cra
  • Vérifiez que vous pouvez accéder à une chaîne d'outils dans l'une des régions prises en charge. La chaîne d'outils n'est pas obligée d'avoir des outils. Pour plus d'informations sur les chaînes d'outils, voir Création d'une chaîne d'outils à partir d'une application.

  • Indiquez l'ID de la chaîne d'outils en définissant la variable d'environnement TOOLCHAIN_ID :

export TOOLCHAIN_ID=e22195a5-11e3-44ba-9533-e7c18a3a61a7
  • Connectez-vous à une région spécifique de IBM Cloud en exécutant la commande suivante, où [region] correspond à la région où la chaîne d'outils a été créée.
ibmcloud login -r [region]
  • En option, pour améliorer le contrôle et la sécurité de vos données lors de l'utilisation de CLI, vous avez la possibilité d'utiliser des itinéraires privés vers les points d'extrémité IBM Cloud. Vous devez d'abord activer le routage et le transfert virtuels dans votre compte, puis vous pouvez activer l'utilisation des noeuds finaux de service privés IBM Cloud. Pour plus d'informations sur la configuration de votre compte pour prendre en charge l'option de connectivité privée, voir Activation de VRF et de noeuds finaux de service.

Utilisez la commande suivante pour vous connecter à un point d'extrémité privé où [region] est la région où la chaîne d'outils a été créée.

ibmcloud login -a private.cloud.ibm.com -r [region]

Commandes liées à l'utilisation de l'interface de ligne de commande

Vous recevez des notifications sur la ligne de commande lorsque des mises à jour de l'interface de ligne de commande et des plug-ins IBM Cloud sont disponibles. Veillez à maintenir votre interface de ligne de commande à jour afin de pouvoir utiliser les dernières commandes. Vous pouvez afficher la version en cours de tous les plug-ins installés en exécutant la commande ibmcloud plugin list.

Aide Code Risk Analyzer

La commande suivante affiche la liste des commandes Code Risk Analyzer :

ibmcloud cra --help

Aide sur la commande Code Risk Analyzer

La commande suivante affiche les détails des indicateurs qui sont utilisés avec une commande. Utilisez ibmcloud cra --help pour afficher les commandes disponibles.

ibmcloud cra <command> --help

Nomenclature (BOM)

La commande bom-generate accède aux artefacts dans le chemin de répertoire spécifié et effectue une reconnaissance approfondie pour identifier toutes les dépendances, notamment les dépendances transitives. La commande identifie également les licences sous lesquelles ces dépendances sont distribuées. Une nomenclature est créée, qui donne un aperçu de toutes les dépendances. Vous pouvez générer la nomenclature au format standard ou au format SBOM ( CycloneDX's ).

ibmcloud cra bom-generate

Exigences liées à la commande BOM

La commande bom-generate dépend de certaines commandes externes :

  • Si le chemin contient des fichiers Docker, cette commande extrait les images de base et construit des images pour chaque étape de génération dans chaque fichier Docker. Dans ce scénario, la commande bom-generate requiert que les commandes Docker cli et tar soient disponibles.
  • Si le chemin contient des fichiers Maven, cette commande utilise mvn pour générer une liste de dépendances. Dans ce scénario, la commande bom-generate requiert que la commande mvn soit disponible.
  • Si le chemin contient des fichiers Gradle, cette commande utilise gradle pour générer une liste de dépendances. Dans ce scénario, la commande bom-generate requiert que la commande gradle soit disponible.
  • Si le chemin contient des fichiers Node.js package-json et que cette commande est utilisée pour générer un fichier package-lock.json correspondant, la commande bom-generate utilise npm pour générer le fichier package-lock.json. Dans ce scénario, la commande requiert que la commande npm soit disponible.
  • Si le chemin contient les fichiers Python requirements.txt ou pyproject.toml, la commande utilise pip pour générer les dépendances du paquet. Dans ce scénario, la commande bom-generate nécessite que la commande pip soit disponible. Python version 2 et Python version 3 sont pris en charge.

Si vous utilisez des fichiers Docker, connectez-vous à votre registre de conteneurs à partir duquel les images de base doivent être extraites.

Si votre fichier Docker requiert ARGS, définissez un ARG individuel comme variable d'environnement avant d'exécuter la commande. Par exemple, si le fichier Docker utilise un ARG IAM_USER, exportez une variable d'environnement nommée IAM_USER : export IAM_USER='value'. L'interface de ligne de commande transmet automatiquement ces variables d'environnement à la commande docker build.

Vous pouvez également spécifier explicitement l'indicateur DOCKERBUILDFLAGS. Pour exporter DOCKERBUILDFLAGS avec l'indicateur ARGS Docker, entrez la commande suivante :

export DOCKERBUILDFLAGS="--build-arg IAM_USER --build-arg API_KEY"

Options de la commande BOM

Le tableau suivant répertorie les options de commande que vous pouvez utiliser pour générer une nomenclature à l'aide de la commande bom-generate.

Options de commande pour la génération d'une nomenclature
Options de commande Obligatoire ou facultatif Description
--path Obligatoire Chemin du répertoire du projet à analyser.
-r, --report Obligatoire Nom du fichier dans lequel stocker le rapport BOM.
-a, --asset-type Facultatif Contrôles de sécurité à exécuter (applications, image, système d'exploitation, tout). Par défaut, cette option est définie sur all. L'option apps permet de limiter la reconnaissance aux packages d'applications. L'option image permet de limiter la reconnaissance aux images de base utilisées dans les fichiers Docker. L'option os permet de limiter la reconnaissance aux étapes de génération dans les fichiers Docker uniquement. Vous pouvez indiquer plusieurs valeurs en utilisant une virgule pour délimiter les valeurs, telles que -a os,image,apps.
-p, --prev-report Facultatif Utilisez le rapport BOM précédent pour accélérer la commande. Par exemple, si un fichier Docker n'a pas été mis à jour depuis la génération du dernier rapport, la commande ignore la reconnaissance des packages de ce fichier Docker. Le même scénario s'applique aux autres fichiers manifestes, tels que le fichier package-lock.json.
-c, --dockerbuildcontext Facultatif Si spécifié, CRA utilise le répertoire dans le paramètre de chemin comme contexte de génération Docker lors de l'analyse de l'étape de génération.
-o, --output Facultatif Sélectionnez le format de rapport BOM. Vous pouvez générer la sortie au format Standard BOM (standard) ou au format SBOM de CycloneDX (cyclonedx). La valeur par défaut est standard. Vous pouvez stocker les deux formats en saisissant chaque format séparé par une virgule, sans espace.
-f, --dockerbuildflags Facultatif Personnalisez la commande de génération Docker pour l'analyse de l'étape de génération. Au lieu d'utiliser cet indicateur de ligne de commande, vous pouvez spécifier la valeur dans une variable d'environnement nommée DOCKERBUILDFLAGS. Par défaut, cette option de commande est définie sur ''. Si vous utilisez cette option, assurez-vous qu'il s'agit du dernier indicateur fourni à la commande.
-d, --dockerfilepattern Facultatif Modèle permettant d'identifier le fichier Docker dans le référentiel.
-g, --gradle.excludeconfigurations Facultatif Excluez les configurations Gradle, par exemple : runtimeClasspath,testCompileClasspath. Par défaut, cette option de commande est définie sur ''.
-l, --gradleprops Facultatif Personnaliser la commande Gradle avec des propriétés pour l'analyse des dépendances Gradle.
-m, --maven.excludescopes Facultatif Excluez les portées Maven, par exemple : test,compile. Exemple : "test, compilation". Par défaut, cette option de commande est définie sur ''.
-n, --nodejs.createpackagelock Facultatif Activez la tâche de génération du fichier package-lock.json pour les projets node.js.
--region Facultatif Région ibmcloud dans laquelle se trouve la chaîne d'outils.
--toolchainid Facultatif ID de la chaîne d'outils cible à utiliser.
-v, --verbose Facultatif Activez les messages de journal prolixe.

Ignorer les fichiers

Si le chemin contient le fichier .cra/.fileignore, les fichiers spécifiés dans le fichier .fileignore ne sont pas analysés pour les dépendances. Le fichier .fileignore doit respecter les règles des fichiers .gitignore. Comme le fichier .gitignore, le fichier .fileignore peut contenir des commentaires, des répertoires à ignorer, des fichiers à ignorer et d'autres motifs.

L'exemple de fichier .fileignore suivant montre comment exclure les scripts bash, les modules de noeud node_module et le fichier Dockerfile :

# Ignore nested functional_tests directory
**/functional_tests

# Ignore bash scripts
**/*.sh

# This should allow this one file
!test/gatling_tests/loginTobx.sh

# Ignore node_modules
node_modules

# Exclude the dockerfile from scanning
Dockerfile

Définition de plusieurs contextes de construction Docker

Lorsque vous travaillez avec plusieurs Dockerfiles au sein d'un même projet, vous pouvez vouloir définir des contextes de construction distincts pour chaque Dockerfile. Ceci peut être réalisé en utilisant un fichier .cra/.dockerbuildcontext, qui est un fichier JSON qui fait correspondre les chemins des Dockerfiles aux contextes de construction correspondants.

Si un fichier .cra/.dockerbuildcontext existe dans le répertoire de votre projet, les commandes de construction CRA Docker utiliseront les chemins spécifiés dans ce fichier comme contextes de construction pour les Dockerfiles associés. Les clés de l'objet JSON représentent les chemins relatifs vers les Dockerfiles, tandis que les valeurs spécifient les chemins relatifs vers les contextes de construction respectifs.

Voici un exemple de fichier .dockerbuildcontext qui définit différents contextes de construction pour plusieurs Dockerfiles :

{
  "Dockerfile": "./",
  "path/to/different/Dockerfile": "./another/Path"
}

Exemple

Les fragments de code suivants montrent comment utiliser la commande bom-generate :

ibmcloud cra bom-generate --path PATH --report REPORT [--asset-type ASSET-TYPE] [--dockerbuildcontext] [--dockerbuildflags DOCKERBUILDFLAGS] [--dockerfilepattern DOCKERFILEPATTERN] [--gradle.excludeconfigurations GRADLE.EXCLUDECONFIGURATIONS] [--maven.excludescopes MAVEN.EXCLUDESCOPES] [--nodejs.createpackagelock] [--prev-report PREV-REPORT] [--region REGION] [--toolchainid TOOLCHAINID] [--verbose]
ibmcloud cra bom --path . --report bomreport.json

Analyse de vulnérabilité

La commande vulnerability-scan attend en entrée une nomenclature au format standard et détecte les vulnérabilités dans les paquets d'applications et les paquets de systèmes d'exploitation répertoriés dans la nomenclature. Sur la base de renseignements sur les menaces recueillis auprès de multiples sources de vulnérabilités et d'expositions communes (CVE), des recommandations de correction ciblées sont fournies. Code Risk Analyzer peut également effectuer une auto-remédiation sur les paquets vulnérables pour les applications basées sur Node.js uniquement. Vous pouvez également générer ce rapport dans le format standard ou dans le format CycloneDX's Vulnerability Exploitability Exchange (VEX).

ibmcloud cra vulnerability-scan

Options de la commande d'analyse de vulnérabilité

Le tableau suivant répertorie les options d'utilisation de la commande vulnerability-scan.

Options de commande pour effectuer une analyse de vulnérabilité
Options de commande Obligatoire ou facultatif Description
-b, --bom Obligatoire Le chemin d'accès au fichier de la nomenclature générée à l'aide de la commande bom-generate. Cette nomenclature doit être au format standard.
-a, --autofix Facultatif Corrige des types spécifiques de vulnérabilités des applications. Cette option n'est disponible que pour les applications Node.js, Maven et Gradle.
-f, --commentfile Facultatif Spécifie le fichier dans lequel le rapport de démarcation est créé. Cette commande n'est disponible qu'avec autofix.
-c, --cveignore Facultatif Chemin du fichier CVE Ignore qui contient la liste des CVE à ignorer.
-e, --excludedev Facultatif Indique que vous ne souhaitez pas que la commande signale les CVE pour les dépendances de développement.
--force Facultatif Force la mise à jour des paquets de nœuds de premier niveau, même si la version majeure est différente. Cette commande n'est disponible qu'avec autofix.
--include-nofix Facultatif Inclure ou exclure le signalement des CVE qui n'ont pas de remédiation connue. Par défaut, cette option est définie sur app. L'option app est utilisée pour inclure uniquement les CVE des paquets d'applications sans correctifs. L'option os est utilisée pour inclure uniquement les CVE des paquets OS sans correctifs. L'option all est utilisée pour inclure les CVE des applications et des paquets du système d'exploitation qui n'ont pas été corrigés. L'option none est utilisée pour exclure les CVE des applications et des paquets du système d'exploitation qui n'ont pas été corrigés.
--path Requis si --autofix est activé Chemin du répertoire du projet à analyser. Cette commande n'est disponible qu'avec autofix.
--region Facultatif La région ibmcloud pour la chaîne d'outils.
-r, --report Facultatif Chemin d'accès au rapport généré.
-o, --output Facultatif Sélectionne le format de rapport CVE. Vous pouvez générer la sortie au format Standard CVE (standard) ou au format VEX de CycloneDX (cyclonedx). La valeur par défaut est standard.
-s, --strict Facultatif Entraîne l'échec de la commande (état de sortie 2) si des vulnérabilités sont détectées.
--toolchainid Facultatif L'ID de la chaîne d'outils cible.

Ignorer les vulnérabilités

Si le paramètre -c ou --cveignore est indiqué, la commande recherche ce fichier et ne rapporte pas les CVE spécifiés dans le fichier. Vous pouvez configurer les CVE pour les omettre indéfiniment jusqu'à ce qu'une résolution soit disponible ou jusqu'à une date d'expiration spécifiée.

L'exemple suivant montre un schéma JSON pour le fichier .cveignore :

[
    {
        "cve": "string",
	    "alwaysOmit": "bool",
	    "untilRemediationAvailable": "bool",
	    "expiration": "string"
    }
]

Les propriétés suivantes sont prises en charge pour chaque entrée du fichier .cveignore :

  • cve - La vulnérabilité à omettre. La valeur de cette propriété est un identifiant CVE.
  • alwaysOmit - Si cette propriété est définie sur true, la vulnérabilité est omise jusqu'à ce qu'elle soit modifiée. Cette propriété est prioritaire sur les autres valeurs de propriété.
  • untilRemediationAvailable - Si cette propriété est définie sur true, la vulnérabilité est omise jusqu'à ce qu'un chemin de résolution soit disponible. Si une résolution devient disponible, la vulnérabilité n'est pas omise et un message s'affiche. Cette propriété est prioritaire sur la valeurs de la propriété d'arrivée à expiration.
  • expiration - Si cette propriété est définie sur true et que la date d'expiration n'est pas atteinte, la vulnérabilité est omise. Si la date d'arrivée à expiration est atteinte, la vulnérabilité n'est pas omise et un message s'affiche. Utilisez le format d'heure RFC3339 (yyyy-MM-ddTHH:mm:ss[+-]Z) pour définir cette propriété.

Code Risk Analyzer utilise uniquement ces propriétés définies. Vous pouvez ajouter des propriétés sans effet sur les fonctions. Si une vulnérabilité définie dans .cveignore n'est pas omise, un journal est généré pour en expliquer la raison. Si une vulnérabilité définie dans le fichier .cveignore est omise, aucun journal individuel n'est affiché. Le nombre d'omissions et la liste des ID de vulnérabilité, avec le nom du package, qui sont omis sont consignés après l'achèvement d'un rapport.

Le fragment de code suivant montre un exemple de fichier .cveignore :

[
    {
        "cve": "CVE-2021-27290",
        "alwaysOmit": true
    },
    {
        "cve": "CVE-2020-8244",
        "untilRemediationAvailable": true,
    }
]

Exemple

Les fragments de code suivants montrent comment utiliser la commande vulnerability-scan :

ibmcloud cra vulnerability-scan --bom BOM [--cveignore CVEIGNORE] [--report REPORT] [--excludedev] [--include-nofix app,os,all,none] [--region REGION] [--strict] [--toolchainid TOOLCHAINID] [--output OUTPUTFILE]
ibmcloud cra cve --bom ./bom-file.json --cveignore ./cveignore-example.json --report ./output-vulnerability-report.json --excludedev --include-nofix all --strict

Déploiement

La commande deployment-analyze exécute des vérifications de configuration sur les manifestes de déploiement Kubernetes.

ibmcloud cra deployment-analyze

Cette commande fournit des orientations normatives pour établir une posture de configuration sécurisée pour les conteneurs Docker. Le Code Risk Analyzer utilise ces configurations de sécurité comme point de référence et identifie les contrôles de sécurité à vérifier dans les artefacts de déploiement, tels que les fichiers .yaml, pour les applications Kubernetes. Cette commande fournit également des évaluations de risques pour chaque défaillance de contrôle.

Le tableau suivant énumère les contrôles que vous pouvez mettre en œuvre dans le cadre de DevSecOps,, comme indiqué dans CIS Docker 1.13.0. D'autres contrôles sont ajoutés sur la base de références open source du système d'évaluation de la configuration commune(KCCSS)de Kubernetes.

contrôles de sécurité
ID Règle Risque
5.3 Assurez-vous que les conteneurs n'ont pas la capacité CAP_SYS_ADMIN. Elevé
5.3 Assurez-vous que les conteneurs n'ont pas la capacité CAP_NET_RAW. Elevé
5.4 Veiller à ce que les conteneurs privilégiés ne soient pas utilisés. Elevé
5.5 Assurez-vous que les répertoires sensibles du système hôte ne sont pas montés sur les conteneurs. Moyen
5.7 Veillez à ce que les ports privilégiés ne soient pas mappés dans les conteneurs. Faible
5.9 Assurez-vous que l'espace de noms du réseau de l'hôte n'est pas partagé. Moyen
5.10 Veillez à ce que l'utilisation de la mémoire du conteneur soit limitée. Moyen
5.11 Assurez-vous que la priorité CPU appropriée est définie sur le conteneur. Moyen
5.12 Assurez-vous que le système de fichiers racine du conteneur est monté en lecture seule. Moyen
5.15 Assurez-vous que l'espace de noms des processus de l'hôte n'est pas partagé. Moyen
5.16 Assurez-vous que l'espace de noms IPC de l'hôte n'est pas partagé. Moyen
5.31 Veillez à ce que la prise Docker ne soit pas montée à l'intérieur d'un conteneur. Elevé
Veillez à ce que les conteneurs ne permettent pas une allocation dangereuse des ressources de l'unité centrale. Moyen
S'assurer que les conteneurs ne permettent pas l'escalade des privilèges. Moyen
Veiller à ce que les conteneurs n'exposent pas les parties dangereuses de /proc. Moyen
Assurez-vous que les conteneurs ne sont pas exposés via un port hôte partagé. Moyen

Options de la commande de déploiement

Le tableau suivant répertorie les options de commande que vous pouvez utiliser pour la commande deployment-analyze.

Options de commande pour l'analyse du déploiement.
Options de commande Obligatoire ou facultatif Description
--path Obligatoire Chemin du répertoire du projet à analyser.
-r, --report Obligatoire Nom du fichier dans lequel créer le rapport.
-f, --fileignore Facultatif Chemin du fichier .fileignore.
-s, --strict Facultatif Résultats de l'échec de la commande (état de sortie 2) lorsque des risques de déploiement sont détectés.

Exemple

Les fragments de code suivants montrent comment utiliser la commande deployment-analyze :

ibmcloud cra deployment-analyze --path PATH --report REPORT [--fileignore FILE_IGNORE] [--strict]
ibmcloud cra depl --path ./sampleDir --report deployment-report.json --strict

NetworkPolicy l'analyse

Il s'agit d'une fonctionnalité bêta disponible à des fins d'évaluation et de test.

La commande netpol-analyze vérifie la configuration des manifestes Kubernetes et Calico NetworkPolicy.

ibmcloud cra netpol-analyze

Cette commande vérifie l'état de la configuration de la connectivité d'une application Kubernetes par rapport au contrôle NIST SP 800-53 SC-7(5 ). Il vérifie que la connectivité de chaque charge de travail est contrôlée par au moins une ressource NetworkPolicy et que les ports non sécurisés sont bloqués à la fois en entrée et en sortie.

La commande netpol-analyze peut également fournir un rapport de connectivité pour l'application analysée, indiquant toutes les connexions autorisées entre les charges de travail de l'application. Vous pouvez utiliser ce rapport comme preuve de conformité ou pour vous aider à résoudre les problèmes de connectivité. Vous pouvez également utiliser cette commande pour obtenir les résultats de lint pour les stratégies de réseau analysées, puis utiliser ces résultats pour améliorer l'efficacité et la lisibilité des stratégies de réseau. Dans certains cas, les résultats de lint peuvent également indiquer une erreur dans les définitions de la politique de réseau.

NetworkPolicy options de la commande d'analyse

Le tableau suivant répertorie les options de commande que vous pouvez utiliser pour la commande netpol-analyze.

Options de commande pour l'analyse de la politique de réseau
Options de commande Obligatoire ou facultatif Description
--path Obligatoire Chemin du répertoire du projet à analyser.
-r, --report Obligatoire Nom du fichier dans lequel le rapport de conformité doit être créé.
-c, --connectivity Facultatif Le nom du fichier dans lequel créer le rapport de connectivité.
-l, --lint Facultatif Le nom du fichier dans lequel le rapport sur la charpie doit être créé.
-s, --strict Facultatif La commande échoue (état de sortie 2) lorsque des risques de connectivité sont détectés.

Exemple

Les exemples de code suivants montrent comment vous pouvez utiliser la commande netpol-analyze:

ibmcloud cra netpol-analyze --path PATH --report REPORT [--connectivity CONNFILE] [--lint LINTFILE] [--strict]
ibmcloud cra np --path ./sampleDir --report netpol-report.json --strict

Image de l'analyseur de configuration réseau

La commande netpol-analyze est exécutée dans le cadre de l'analyseur de configuration réseau(NCA) de IBM. Comme cette commande exécute NCA en tant qu'image Docker, vous devez l'installer sur votre ordinateur Docker sur votre ordinateur.

L' URL s d'image pour l'analyseur de stratégie réseau sont les suivantes icr.io/continuous-delivery/cra/nca:.

Si l'image de l'analyseur ne se trouve pas déjà dans votre registre local, la commande netpol-analyze extrait la dernière image de l'analyseur (y compris les corrections de toutes les vulnérabilités) de la base de données globale IBM Cloud® Container Registry.

Utilisation de Code Risk Analyzer dans des pipelines Tekton

Vous pouvez utiliser la tâche task-cra dans les pipelines Tekton. Utilisez la définition du pipeline Tekton lorsque vous créez une demande d'extraction, un déclencheur manuel ou que vous émettez un commit. Vous pouvez également créer vos propres tâches Tekton et exécuter Code Risk Analyzer à partir de ces tâches.

Utilisation de Code Risk Analyzer dans DevSecOps

Vous pouvez utiliser Code Risk Analyzer dans DevSecOps. Le tableau suivant répertorie et décrit les paramètres Code Risk Analyzer pris en charge pour DevSecOps.

Pour plus d'informations sur les commandes d'utilitaire dépendantes requises par l'image de pipeline pour exécuter la commande bom-generate, voir BOM requirements. Si des commandes sont manquantes, vous pouvez utiliser le paramètre cra-custom-script-path pour faire référence à un script pour installer ces commandes.

DevSecOps Paramètres basés sur l'analyseur de risque de code
Nom Type Description Obligatoire ou facultatif
artifactory-dockerconfigjson SECRET Fichier Docker config.json codé en base64 dans lequel sont stockées les données d'identification pour Artifactory. Facultatif
baseimage-auth-user texte Données d'identification de l'image de base du fichier Docker de l'application qui est requis par l'analyse Code Risk Analyzer. Facultatif
baseimage-auth-email texte Données d'identification de l'image de base du fichier Docker de l'application qui est requis par l'analyse Code Risk Analyzer. Facultatif
baseimage-auth-host texte Données d'identification de l'image de base du fichier Docker de l'application qui est requis par l'analyse Code Risk Analyzer. Facultatif
baseimage-auth-password SECRET Données d'identification de l'image de base du fichier Docker de l'application qui est requis par l'analyse Code Risk Analyzer. Facultatif
cra-cveignore-path texte Chemin d'accès au fichier cveignore relatif à la racine du référentiel d'application. Le chemin d'accès au fichier par défaut est .cra/.cveignore. Facultatif
cra-custom-script-path texte Chemin d'accès à un script personnalisé qui s'exécute avant l'analyse de Code Risk Analyzer. Ce script a pour but de fournir la possibilité de définir des variables ENV dans le contexte de l'outil de nomenclature Code Risk Analyzer. Facultatif
cra-docker-buildflags texte Commande de génération Docker personnalisée pour l'analyse de l'étape de génération. Ce paramètre est vide par défaut. Facultatif
cra-docker-build-context texte Si cet attribut est spécifié, Code Risk Analyzer utilise le répertoire dans le paramètre path comme contexte de génération Docker. Facultatif
cra-exclude-devdependencies texte Indique s'il convient d'exclure des dépendances de développement de l'analyse (true ou false). La valeur par défaut est false. Facultatif
cra-gradle-exclude-configs texte Indique les configurations Gradle dont il faut exclure les dépendances lors de l'analyse. Par exemple, runtimeClasspath,testCompileClasspath. Ce paramètre est vide par défaut. Facultatif
cra-maven-exclude-scopes texte Indique les portées Maven dont il faut exclure les dépendances lors de l'analyse. Par exemple, test,compile. Ce paramètre est vide par défaut. Facultatif
cra-nodejs-create-package-lock texte Active la reconnaissance Code Risk Analyzer pour générer le fichier package-lock.json pour les référentiels node.js. Ce paramètre est défini sur false par défaut. Facultatif
ibmcloud-api-key SECRET Clé d'API IBM Cloud® qui interagit avec l'outil d'interface de ligne de commande ibmcloud. Obligatoire
pipeline-dockerconfigjson SECRET Fichier Docker config.json codé en base64 qui permet d'extraire des images d'un registre privé. Facultatif
onepipeline-dockerconfigjson SECRET Obsolète. Fichier Docker config.json codé en base64 qui permet d'extraire des images d'un registre privé. Facultatif
pipeline-debug sélection Commutateur du mode débogage de pipeline. Facultatif
opt-in-cra-correction automatique texte Permet à Code Risk Analyzer d'exécuter la commande cra auto remediation (true ou false). La valeur par défaut est false. Cette commande n'est prise en charge que dans la chaîne de conformité continue. Facultatif
opt-in-cra-auto-remediation-enabled-repos texte Spécifie la liste des noms de référentiels séparés par des virgules à activer pour la commande cra auto remediation. Ce paramètre n'est pris en compte que si opt-in-cra-auto-remediation est défini sur true et n'est pris en charge que dans la chaîne de conformité continue. Facultatif
opt-in-cra-auto-remediation-force texte Force la commande cra auto remediation à mettre à jour les paquets même si la version majeure est différente de la version actuelle du paquet vulnérable (true ou false). Ce paramètre n'est pris en compte que si opt-in-cra-auto-remediation est défini sur true et n'est pris en charge que dans la chaîne de conformité continue. Facultatif

Exemples de scripts personnalisés pour DevSecOps

Si votre fichier Docker requiert ARGS, vous pouvez utiliser le paramètre cra-custom-script-path pour définir un ARG individuel comme variable d'environnement avant d'exécuter la commande. Le chemin de script personnalisé est le chemin d'accès à un script qui réside dans le projet de l'utilisateur. Par exemple, si le fichier Docker utilise IAM_USER ARG, exportez une variable d'environnement dans le script nommé IAM_USER: export IAM_USER='value'. Si l'ARG requis par votre fichier Docker est défini en tant que propriété d'environnement dans les chaînes d'outils, vous pouvez utiliser get_env pour obtenir la valeur. Dans ce cas, vous pouvez exporter une variable d'environnement dans le script IAM_USER: export IAM_USER=$(get_env iam_user_environment_property_name). La tâche run-cra sélectionne automatiquement ces variables d'environnement et les transmet aux commandes de génération Docker.

L'exemple suivant montre comment utiliser le cra-custom-script pour exporter la variable ENV :

#!/usr/bin/env bash

if [[ "${PIPELINE_DEBUG:-0}" == 1 ]]; then
    trap env EXIT
    env | sort
    set -x
fi

export IAM_USER=$(get_env iam_user_environment_property_name)

Vous pouvez également utiliser le paramètre cra-custom-script-path pour les scénarios dans lesquels les versions de l'outil d'image de base DevSecOps peuvent être obsolètes, en fonction de votre projet. Par exemple, vous pouvez mettre à jour des commandes telles que pip/pip3 pour la reconnaissance des packages Python qui nécessitent une version pip ultérieure.

L'exemple suivant montre comment utiliser le cra-custom-script pour mettre à jour la version pip :

#!/usr/bin/env bash

if [[ "${PIPELINE_DEBUG:-0}" == 1 ]]; then
    trap env EXIT
    env | sort
    set -x
fi

python3 -m pip install --upgrade pip

Si votre fichier Docker utilise une image d'un registre Docker privé, vous pouvez utiliser le paramètre cra-custom-script-path pour vous authentifier auprès d'un registre Docker privé avant d'exécuter Code Risk Analyzer et de lui permettre d'extraire cette image pour l'analyse.

L'exemple suivant montre comment utiliser le cra-custom-script pour s'authentifier auprès du registre de conteneur ibmcloud :

#!/usr/bin/env bash

if [[ "${PIPELINE_DEBUG:-0}" == 1 ]]; then
    trap env EXIT
    env | sort
    set -x
fi

ibmcloud cr login

Débogage de Code Risk Analyzer dans DevSecOps

Pour faciliter le débogage, vous pouvez exécuter Code Risk Analyzer localement en tant qu'interface de ligne de commande (CLI) sur votre propre machine locale. Pour plus d'informations sur l'exécution de la commande ibmcloud cra bom-generate pour générer une nomenclature, voir Nomenclature. Après avoir généré la nomenclature, utilisez la commande ibmcloud cra cve pour dresser la liste des vulnérabilités. Pour plus d'informations sur l'exécution de la commande ibmcloud cra cve, voir Analyse de vulnérabilité.

Assurez-vous que la tâche run-cra ne contient aucune erreur. Si la tâche contient des erreurs, vérifiez si votre pipeline utilise la version actuelle de DevSecOps. Si le problème n'est pas résolu en vérifiant la version de DevSecOps, les exemples suivants fournissent des erreurs courantes et proposent des solutions.

FAILED
Error executing docker pull cmd: [docker pull us.icr.io/opentoolchain/ibmnode:14ubisecure]

Vous pouvez vérifier que vous avez accès au registre privé. Si vous n'y avez pas accès, vous pouvez utiliser le paramètre cra-custom-script-path et indiquer le chemin d'accès à un script personnalisé qui s'exécute avant Code Risk Analyzer pour vous authentifier auprès du registre privé.

FAILED
Error executing docker build cmd for stage-0: exit status 1

Si votre fichier Docker requiert ARGS, la commande docker build pour les étapes de génération échoue en raison de l'ARGS manquant. cra-custom-script-path est requis pour configurer les ARGS comme variables d'environnement. Pour plus d'informations sur la configuration du script personnalisé, voir Exemples de scripts personnalisés pour DevSecOps.

FAILED
Error executing docker build cmd for stage-0: exit status 1
...
COPY file-to-copy.js file-to-copy.js:
------
failed to compute cache key: "/file-to-copy.js" not found: not found

Par défaut, la commande Code Risk Analyzer bom-generate génère les fichiers Docker à partir du contexte de l'emplacement du fichier Docker lui-même. Si vous souhaitez générer les fichiers Docker à partir du contexte du répertoire racine du projet, utilisez le paramètre cra-docker-build-context pour permettre à Code Risk Analyzer de générer les fichiers Docker à partir de ce contexte.

Suppression des données Code Risk Analyzer stockées

Le plug-in Code Risk Analyzer ne stocke aucune donnée client dans ses bases de données. Cependant, les versions antérieures des tâches Code Risk Analyzer Tekton stockaient en toute sécurité les résultats des analyses de vulnérabilité dans sa base de données.

Pour demander la suppression de toute donnée client susceptible d'être stockée dans l'analyseur de risque de code, contactez le service d'assistance IBM.

Foire aux questions

Obtenez des réponses aux questions fréquemment posées sur l'utilisation de l'interface de ligne de commande Code Risk Analyzer.

Comment puis-je déterminer la raison de l'échec de l'interface de ligne de commande ?

Avant d'appeler l'interface de ligne de commande Code Risk Analyzer, définissez la variable d'environnement IBMCLOUD_TRACE sur true pour activer le journal de débogage.

export IBMCLOUD_TRACE=true

Observez les appels d'API et les réponses affichées dans le journal pour déterminer la raison exacte de l'échec.

Comment puis-je déboguer une commande BOM qui ne parvient pas à extraire une image de base d'un registre privé ?

Assurez-vous que vous êtes authentifié auprès du registre dans lequel réside l'image de base à l'aide de la commande ibmcloud cr login ou de la commande docker login.

Comment puis-je déboguer une commande BOM qui n'est pas en mesure d'analyser un fichier Docker ?

  • Vérifiez que le fichier Docker ne présente aucun problème en exécutant la commande docker build et en vous assurant qu'elle aboutit.
  • Si votre fichier Docker requiert la transmission d'ARG, assurez-vous que l'ARG est défini comme variable d'environnement. Vous pouvez également utiliser la variable d'environnement DOCKERBUILDFLAG.
  • Authentifiez-vous auprès du registre qui contient les images de base.

Je constate des résultats faussement positifs inattendus. Que dois-je faire ?

Exécuter le pipeline de déploiement continu (CD) DevSecOps pour générer un SBOM mis à jour dans l'armoire à archives. Cela pourrait permettre de remédier à une cause potentielle de faux positifs résultant de la présence d'un ancien SBOM généré par le pipeline de conformité continue (CC) de DevSecOps.

Pourquoi la gravité du rapport ou du problème diffère-t-elle de celle du lien de vulnérabilité associé?

Comme notre source d'informations sur les vulnérabilités a changé récemment, il se peut que la gravité associée à une vulnérabilité particulière ait changé. Code Risk Analyzer déterminera la sévérité optimale sur la base d'un calcul de toutes les sources de vulnérabilités.