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.
| 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é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 |
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-generaterequiert que les commandesDocker cliettarsoient disponibles. - Si le chemin contient des fichiers Maven, cette commande utilise
mvnpour générer une liste de dépendances. Dans ce scénario, la commandebom-generaterequiert que la commandemvnsoit disponible. - Si le chemin contient des fichiers Gradle, cette commande utilise
gradlepour générer une liste de dépendances. Dans ce scénario, la commandebom-generaterequiert que la commandegradlesoit disponible. - Si le chemin contient des fichiers Node.js
package-jsonet que cette commande est utilisée pour générer un fichierpackage-lock.jsoncorrespondant, la commandebom-generateutilisenpmpour générer le fichier package-lock.json. Dans ce scénario, la commande requiert que la commandenpmsoit disponible. - Si le chemin contient les fichiers Python
requirements.txtoupyproject.toml, la commande utilisepippour générer les dépendances du paquet. Dans ce scénario, la commandebom-generatenécessite que la commandepipsoit 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 | 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 | 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
trueet 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.
| 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 | 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 | 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.
| 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 buildet 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.