Plug-in Code Risk Analyzer pour IBM Cloud
L'interface de ligne de commande ( 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 d' IBM Cloud, dans lesquelles les chaînes d'outils sont prises en charge.
Utilisez l'interface de ligne de commande pour effectuer les tâches suivantes :
- Générez une nomenclature (BOM) qui répertorie les dépendances et les informations de licence disponibles de tous les packages de système d'exploitation tiers et de tous les packages d'application. Vous pouvez également générer cette sortie au format CycloneDX-specific.
- Découvrir les vulnérabilités dans les colis qui sont répertoriés 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 un plan Terraform pour le respect de certaines règles.
- Analyser des fichiers Kubernetes pour le respect de certaines règles.
A partir de janvier 2024, Code Risk Analyzer utilise les données de vulnérabilité fournies par le projet open source Clair au lieu des données de la société commerciale Snyk Limited. Aucune action spécifique n'est requise de votre part à la suite de cette modification. Toutefois, vous pouvez observer des différences dans les détails 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 correction des risques pour Maven et Groovy ( Gradle ). |
Node.js | package-lock.json calcule les dépendances. Pour Node.js, l'analyseur de risque de code peut également automatiser la correction. Assurez-vous que la version npm installée correspond à la version npm du projet. |
Python | Les dépendances sont calculées à l'aide du fichier requirements.txt . |
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 d' 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 définie 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 les dépendances de code source et d'image dans vos référentiels pour détecter les vulnérabilités. Le tableau suivant présente les sources d'informations de vulnérabilité que Code Risk Analyzer consulte pour différents types de dépendances.
Dépendance | Versions prises en charge | Source des avis de sécurité |
---|---|---|
Image Alpine | Toutes les versions stables avec prise en charge de la sécurité des fournisseurs. | Base de donnéesAlpine SecDB. |
Image Debian | Toutes les versions stables avec prise en charge de la sécurité du fournisseur.
Les CVE des packages binaires qui sont associés au Debian |
Debian Security Bug Tracker. |
GoogleContainerTools image sans distorsion | Toutes les versions stables avec prise en charge de la sécurité des fournisseurs. | GoogleContainerTools sans distorsion |
Red Hat® Enterprise Linux® (RHEL) image | RHEL 6, RHEL/UBI 7, RHEL/UBI 8 et RHEL/UBI 9 | API de données de sécuritéRed Hat. |
Image Ubuntu | Toutes les versions stables avec prise en charge de la sécurité des fournisseurs. | Ubuntu CVE Tracker. |
Go, npm ( JavaScript ), Maven ( Java ), PyPI ( Python ), RubyGems ( Ruby ), et Packagist (PHP) | Toutes les versions stables avec prise en charge de la sécurité des fournisseurs. | Base de données Open Source Vulnerability. |
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 un contrôle et une sécurité accrus de vos données lors de l'utilisation de CLI, vous avez la possibilité d'utiliser des routes privées vers des points de terminaison d' 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 de terminaison 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 pour capturer un instantané de toutes les dépendances. Vous pouvez générer la nomenclature au format standard ou au format SBOM d' 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 commandesDocker cli
ettar
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 commandebom-generate
requiert que la commandemvn
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 commandebom-generate
requiert que la commandegradle
soit disponible. - Si le chemin contient des fichiers Node.js
package-json
et que cette commande est utilisée pour générer un fichierpackage-lock.json
correspondant, la commandebom-generate
utilisenpm
pour générer le fichier package-lock.json. Dans ce scénario, la commande requiert que la commandenpm
soit disponible. - Si le chemin contient le fichier Python requirements.txt, la commande utilise
pip
pour générer les dépendances du package. Dans ce scénario, la commandebom-generate
requiert que la commandepip
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 avec la commande BOM ( 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 | Personnalisez la commande Gradle avec les propriétés de l'analyse de dépendance 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 d' .fileignore
s doit respecter les règles
des fichiers d' .gitignore
s. Semblable à un fichier d' .gitignore
, le fichier d' .fileignore
peut inclure des commentaires, des répertoires à ignorer, des fichiers à ignorer et d'autres modèles.
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 d' Docker
Lorsque vous travaillez avec plusieurs Dockerfiles au sein d'un même projet, vous pouvez définir des contextes de construction distincts pour chaque Dockerfile. Cela peut être réalisé en utilisant un fichier d' .cra/.dockerbuildcontext
,
qui est un fichier JSON qui mappe les chemins d'accès Dockerfile à leurs contextes de construction correspondants.
Si un fichier d' .cra/.dockerbuildcontext
s existe dans votre répertoire de projet, les commandes de construction de l' Docker e CRA utiliseront les chemins d'accès 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 d'accès relatifs aux Dockerfiles, tandis que les valeurs spécifient les chemins d'accès relatifs aux contextes de construction respectifs.
Voici un exemple de fichier d' .dockerbuildcontext
s 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 une nomenclature au format standard
en entrée et détecte les vulnérabilités dans les packages d'application et les packages de système d'exploitation qui sont répertoriés dans la
nomenclature. Sur la base de renseignements riches sur les menaces collectées à partir de plusieurs sources de CVE (Common Vulnerabilities and Exposures), des recommandations de correction ciblées sont fournies. Code Risk Analyzer peut également
effectuer une résolution automatique sur les packages vulnérables pour les applications basées sur Node.js uniquement. Vous pouvez également générer ce rapport au format standard ou au format VEX ( CycloneDX's ).
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 du fichier de nomenclature qui a été généré à l'aide de la commande bom-generate . Ce BOM doit être au format standard . |
-a , --autofix |
Facultatif | Corrige des types spécifiques de vulnérabilités d'application. Cette option est disponible uniquement pour les applications Node.js, Maven et Gradle. |
-f , --commentfile |
Facultatif | Indique le fichier dans lequel le rapport de démarque est créé. Cette commande est disponible uniquement 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 une mise à jour pour les packages de noeud de niveau supérieur, même lorsque la version principale est différente. Cette commande est disponible uniquement avec autofix . |
--include-nofix |
Facultatif | Incluez ou excluez la génération de rapports sur les CVE qui n'ont pas de mesures correctives connues. Par défaut, cette option est définie sur app . L'option app est utilisée pour inclure uniquement les CVE
de package d'application sans correctif. L'option os est utilisée pour inclure uniquement les CVE de package de système d'exploitation sans correctif. L'option all est utilisée pour inclure des CVE d'application
et de package de système d'exploitation sans aucun correctif. L'option none est utilisée pour exclure les CVE d'application et de package de système d'exploitation sans correctifs. |
--path |
Obligatoire si --autofix est activé |
Chemin du répertoire du projet à analyser. Cette commande est disponible uniquement avec autofix . |
--region |
Facultatif | Région ibmcloud de 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 ce bien 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 instructions prescriptives pour l'établissement d'une situation de configuration sécurisée pour les conteneurs Docker. Code Risk Analyzer utilise ces configurations de sécurité comme point de référence et identifie
les contrôles de sécurité permettant de vérifier les artefacts de déploiement, tels que les fichiers .yaml
, pour les applications Kubernetes. Cette commande fournit également des évaluations des risques pour chaque échec de contrôle.
Le tableau suivant répertorie les contrôles que vous pouvez mettre en œuvre dans DevSecOps,, tels qu'identifiés sur CIS Docker 1.13.0. Des contrôles supplémentaires sont ajoutés en fonction des références open source de Kubernetes Common Configuration Scoring System(KCCSS).
ID | Règle | Risque |
---|---|---|
5.3 | Vérifiez que les conteneurs ne disposent pas de la fonction CAP_SYS_ADMIN . |
Elevé |
5.3 | Vérifiez que les conteneurs ne disposent pas de la fonction CAP_NET_RAW . |
Elevé |
5.4 | Assurez-vous que les conteneurs privilégiés ne sont 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 | Assurez-vous que les ports privilégiés ne sont pas mappés dans des conteneurs. | Faible |
5.9 | Vérifiez que l'espace de nom réseau de l'hôte n'est pas partagé. | Moyen |
5.10 | Vérifiez que l'utilisation de la mémoire pour le conteneur est limitée. | Moyen |
5.11 | Vérifiez que la priorité d'UC appropriée est définie sur le conteneur. | Moyen |
5.12 | Vérifiez que le système de fichiers racine du conteneur est monté en lecture seule. | Moyen |
5.15 | Vérifiez que l'espace de nom de processus de l'hôte n'est pas partagé. | Moyen |
5.16 | Vérifiez que l'espace de nom IPC de l'hôte n'est pas partagé. | Moyen |
5.31 | Vérifiez que le socket Docker n'est pas monté dans des conteneurs. | Elevé |
|
Assurez-vous que les conteneurs n'autorisent pas une allocation non sécurisée des ressources d'UC. | Moyen |
|
Assurez-vous que les conteneurs n'autorisent pas l'escalade des privilèges. | Moyen |
|
Assurez-vous que les conteneurs n'exposent pas les parties non sécurisées de /proc . |
Moyen |
|
Assurez-vous que les conteneurs ne sont pas exposés via un port d'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
Analyseur Terraform
Vous pouvez utiliser la commande terraform-validate
pour analyser la conformité d'un plan Terraform avant d'appliquer le plan à un environnement. Cette commande analyse le fichier de plan Terraform spécifié pour la conformité avec
les règles spécifiées dans IBM Cloud® Security and Compliance Center. Cette commande génère un rapport de conformité.
Vous pouvez spécifier un fichier de stratégie qui répertorie les règles et les paramètres à utiliser pour la validation. Si aucun fichier de stratégie n'est spécifié, cette commande analyse le plan pour l'ensemble de règles par défaut.
ibmcloud cra terraform-validate
Options de la commande Terraform
Le tableau suivant répertorie les options que vous pouvez utiliser pour la commande terraform-validate
.
Options de commande | Obligatoire ou facultatif | Description |
---|---|---|
-r , --report |
Obligatoire | Chemin d'accès au rapport généré. |
-t , --tf-plan |
Obligatoire | Chemin d'accès au fichier de plan Terraform d'entrée. |
-p , --policy-file |
Facultatif | Chemin d'accès au profil de règle. Cet indicateur peut accepter un profil Security and Compliance Center V2 ou un fichier JSON personnalisé avec un ensemble de règles Security and Compliance Center. |
-q , --quiet |
Facultatif | Affiche uniquement des informations récapitulatives. |
-s , --strict |
Facultatif | Entraîne l'échec de la commande (état de sortie 2) si les règles échouent. |
-v , --verbose |
Facultatif | Affiche la liste des règles Security and Compliance Center de transmission après la liste des règles ayant échoué. |
-a , --attachment-file |
Facultatif | Cet indicateur accepte un fichier qui possède un code JSON pour les pièces jointes Security and Compliance Center V2. Pour utiliser cet indicateur, un profil Security and Compliance Center V2 doit être spécifié avec l'indicateur -p . |
Exemple
Les fragments de code suivants montrent comment utiliser la commande terraform-validate
:
ibmcloud cra terraform-validate --tf-plan TFPLANFILE --report REPORT [--policy-file POLICYFILE] [--quiet] [--region REGION] [--strict] [--toolchainid TOOLCHAINID] [--verbose] [--attachment-file ATTACHMENT_FILE]
ibmcloud cra tf -r report-user-profile.json -t ./tfplan.json -p ./user-profile.json --verbose
Exemple de fichier de plan Terraform pour la commande terraform-validate
{
"format_version": "0.2",
"terraform_version": "1.0.2",
"planned_values": {
"root_module": {
"child_modules": [
{
"resources": [
{
"address": "module.instance.ibm_resource_instance.cos_instance",
"mode": "managed",
"type": "ibm_resource_instance",
"name": "cos_instance",
"provider_name": "registry.terraform.io/ibm-cloud/ibm",
"schema_version": 0,
"values": {
"location": "global",
"parameters": null,
"plan": "lite",
"service": "cloud-object-storage",
"timeouts": null
},
"sensitive_values": {
"extensions": {},
"last_operation": {},
"plan_history": [],
"tags": []
}
}
],
"address": "module.instance"
},
{
"resources": [
{
"address": "module.instance_config.ibm_cos_bucket.bad_resource_cos_bucket_missing_all_configuration[0]",
"mode": "managed",
"type": "ibm_cos_bucket",
"name": "bad_resource_cos_bucket_missing_all_configuration",
"index": 0,
"provider_name": "registry.terraform.io/ibm-cloud/ibm",
"schema_version": 0,
"values": {
"activity_tracking": [],
"allowed_ip": null,
"archive_rule": [],
"cross_region_location": null,
"endpoint_type": "public",
"expire_rule": [],
"force_delete": true,
"key_protect": null,
"metrics_monitoring": [],
"region_location": "us-south",
"retention_rule": [],
"single_site_location": null,
"storage_class": "standard",
"timeouts": null
},
"sensitive_values": {
"activity_tracking": [],
"archive_rule": [],
"expire_rule": [],
"metrics_monitoring": [],
"retention_rule": []
}
},
{
"address": "module.instance_config.ibm_cos_bucket.bad_resource_cos_bucket_missing_all_configuration[1]",
"mode": "managed",
"type": "ibm_cos_bucket",
"name": "bad_resource_cos_bucket_missing_all_configuration",
"index": 1,
"provider_name": "registry.terraform.io/ibm-cloud/ibm",
"schema_version": 0,
"values": {
"activity_tracking": [],
"allowed_ip": null,
"archive_rule": [],
"cross_region_location": null,
"endpoint_type": "public",
"expire_rule": [],
"force_delete": true,
"key_protect": null,
"metrics_monitoring": [],
"region_location": "us-south",
"retention_rule": [],
"single_site_location": null,
"storage_class": "standard",
"timeouts": null
},
"sensitive_values": {
"activity_tracking": [],
"archive_rule": [],
"expire_rule": [],
"metrics_monitoring": [],
"retention_rule": []
}
}
],
"address": "module.instance_config"
}
]
}
},
"resource_changes": [
{
"address": "module.instance.ibm_resource_instance.cos_instance",
"module_address": "module.instance",
"mode": "managed",
"type": "ibm_resource_instance",
"name": "cos_instance",
"provider_name": "registry.terraform.io/ibm-cloud/ibm",
"change": {
"actions": [
"create"
],
"before": null,
"after": {
"location": "global",
"parameters": null,
"plan": "lite",
"service": "cloud-object-storage",
"timeouts": null
},
"after_unknown": {
"account_id": true,
"allow_cleanup": true,
"created_at": true,
"created_by": true,
"crn": true,
"dashboard_url": true,
"deleted_at": true,
"deleted_by": true,
"extensions": true,
"guid": true,
"id": true,
"last_operation": true,
"locked": true,
"name": true,
"plan_history": true,
"resource_aliases_url": true,
"resource_bindings_url": true,
"resource_controller_url": true,
"resource_crn": true,
"resource_group_crn": true,
"resource_group_id": true,
"resource_group_name": true,
"resource_id": true,
"resource_keys_url": true,
"resource_name": true,
"resource_plan_id": true,
"resource_status": true,
"restored_at": true,
"restored_by": true,
"scheduled_reclaim_at": true,
"scheduled_reclaim_by": true,
"service_endpoints": true,
"state": true,
"status": true,
"sub_type": true,
"tags": true,
"target_crn": true,
"type": true,
"update_at": true,
"update_by": true
},
"before_sensitive": false,
"after_sensitive": {
"extensions": {},
"last_operation": {},
"plan_history": [],
"tags": []
}
}
},
{
"address": "module.instance_config.ibm_cos_bucket.bad_resource_cos_bucket_missing_all_configuration[0]",
"module_address": "module.instance_config",
"mode": "managed",
"type": "ibm_cos_bucket",
"name": "bad_resource_cos_bucket_missing_all_configuration",
"index": 0,
"provider_name": "registry.terraform.io/ibm-cloud/ibm",
"change": {
"actions": [
"create"
],
"before": null,
"after": {
"activity_tracking": [],
"allowed_ip": null,
"archive_rule": [],
"cross_region_location": null,
"endpoint_type": "public",
"expire_rule": [],
"force_delete": true,
"key_protect": null,
"metrics_monitoring": [],
"region_location": "us-south",
"retention_rule": [],
"single_site_location": null,
"storage_class": "standard",
"timeouts": null
},
"after_unknown": {
"activity_tracking": [],
"archive_rule": [],
"bucket_name": true,
"crn": true,
"expire_rule": [],
"id": true,
"metrics_monitoring": [],
"resource_instance_id": true,
"retention_rule": [],
"s3_endpoint_private": true,
"s3_endpoint_public": true
},
"before_sensitive": false,
"after_sensitive": {
"activity_tracking": [],
"archive_rule": [],
"expire_rule": [],
"metrics_monitoring": [],
"retention_rule": []
}
}
},
{
"address": "module.instance_config.ibm_cos_bucket.bad_resource_cos_bucket_missing_all_configuration[1]",
"module_address": "module.instance_config",
"mode": "managed",
"type": "ibm_cos_bucket",
"name": "bad_resource_cos_bucket_missing_all_configuration",
"index": 1,
"provider_name": "registry.terraform.io/ibm-cloud/ibm",
"change": {
"actions": [
"create"
],
"before": null,
"after": {
"activity_tracking": [],
"allowed_ip": null,
"archive_rule": [],
"cross_region_location": null,
"endpoint_type": "public",
"expire_rule": [],
"force_delete": true,
"key_protect": null,
"metrics_monitoring": [],
"region_location": "us-south",
"retention_rule": [],
"single_site_location": null,
"storage_class": "standard",
"timeouts": null
},
"after_unknown": {
"activity_tracking": [],
"archive_rule": [],
"bucket_name": true,
"crn": true,
"expire_rule": [],
"id": true,
"metrics_monitoring": [],
"resource_instance_id": true,
"retention_rule": [],
"s3_endpoint_private": true,
"s3_endpoint_public": true
},
"before_sensitive": false,
"after_sensitive": {
"activity_tracking": [],
"archive_rule": [],
"expire_rule": [],
"metrics_monitoring": [],
"retention_rule": []
}
}
}
],
"configuration": {
"provider_config": {
"ibm": {
"name": "ibm",
"version_constraint": "1.25.0",
"expressions": {
"ibmcloud_api_key": {
"constant_value": "BYwB2M3TJdDMlCpHaxaWilNHVod05TVkqjIbGqrlm9Iz"
}
}
},
"module.instance:ibm": {
"name": "ibm",
"version_constraint": "1.25.0",
"module_address": "module.instance",
"expressions": {
"ibmcloud_api_key": {
"constant_value": "BYwB2M3TJdDMlCpHaxaWilNHVod05TVkqjIbGqrlm9Iz"
}
}
},
"module.instance_config:ibm": {
"name": "ibm",
"version_constraint": "1.25.0",
"module_address": "module.instance_config"
}
},
"root_module": {
"module_calls": {
"instance": {
"source": "./instance_module",
"module": {
"outputs": {
"cos_instance_id": {
"expression": {
"references": [
"ibm_resource_instance.cos_instance.id",
"ibm_resource_instance.cos_instance"
]
}
}
},
"resources": [
{
"address": "ibm_resource_instance.cos_instance",
"mode": "managed",
"type": "ibm_resource_instance",
"name": "cos_instance",
"provider_config_key": "instance:ibm",
"expressions": {
"location": {
"constant_value": "global"
},
"name": {},
"plan": {
"constant_value": "lite"
},
"service": {
"constant_value": "cloud-object-storage"
}
},
"schema_version": 0
}
]
}
},
"instance_config": {
"source": "./instance_config_module",
"expressions": {
"cos_instance_id": {
"references": [
"module.instance.cos_instance_id",
"module.instance"
]
}
},
"module": {
"resources": [
{
"address": "ibm_cos_bucket.bad_resource_cos_bucket_missing_all_configuration",
"mode": "managed",
"type": "ibm_cos_bucket",
"name": "bad_resource_cos_bucket_missing_all_configuration",
"provider_config_key": "instance_config:ibm",
"expressions": {
"bucket_name": {},
"region_location": {
"constant_value": "us-south"
},
"resource_instance_id": {
"references": [
"var.cos_instance_id"
]
},
"storage_class": {
"constant_value": "standard"
}
},
"schema_version": 0,
"count_expression": {
"constant_value": 2
}
}
],
"variables": {
"cos_instance_id": {
"description": "COS Instance ID"
}
}
},
"depends_on": [
"module.instance"
]
}
}
}
}
}
Exemple de schéma de fichier de profil SCC V2 pour la commande terraform-validate
{
"title": "User Profile Standard v2 Schema",
"type": "object",
"properties": {
"id": {
"type": "string"
},
"profile_name": {
"type": "string"
},
"profile_version": {
"type": "string"
},
"controls": {
"type": "array",
"items": {
"type": "object",
"properties": {
"control_specifications": {
"type": "array",
"items": {
"type": "object",
"properties": {
"assessment_count": {
"type": "number"
},
"assessments": {
"type": "array",
"items": {
"type": "object",
"properties": {
"assessment_type": {
"type": "string"
},
"assessment_method": {
"type": "string"
},
"assessment_description": {
"type": "string"
},
"assessment_id": {
"type": "string"
},
"parameter_count": {
"type": "number"
},
"parameters": {
"type": "array",
"items": {
"type": "object",
"properties": {
"parameter_name": {
"type": "string"
},
"parameter_display_name": {
"type": "string"
},
"parameter_type": {
"type": "string"
}
}
}
}
}
}
}
}
}
}
}
}
},
"default_parameters": {
"type": "array",
"items": {
"type": "object",
"properties": {
"assessment_type": {
"type": "string"
},
"assessment_id": {
"type": "string"
},
"parameter_name": {
"type": "string"
},
"parameter_default_value": {
"type": "string"
},
"parameter_display_name": {
"type": "string"
},
"parameter_type": {
"type": "string"
}
}
}
}
},
"required": ["default_parameters", "controls", "profile_name", "profile_version"]
Exemple de fichier de profil classique SCC V2 pour la commande terraform-validate
Vous pouvez préfixer l'ID de règle avec rule-
.
{
"schema_version": "2.0",
"scc_rules": [
{
"scc_rule_id": "548a3321-6a39-400c-9c2d-0df9a13afd02"
},
{
"scc_rule_id": "726ec899-505e-4de9-ac1b-9578ef62f89f"
},
{
"scc_rule_id": "962e2bde-2a4f-4e07-a352-ce17708b1e85"
},
{
"scc_rule_id": "9653d2c7-6290-4128-a5a3-65487ba40370"
},
{
"scc_rule_id": "d8d13c3e-5ca0-46c5-a055-2475852c4ec6"
},
{
"scc_rule_id": "0f7e7e60-a05c-43a7-be74-70615f14a342"
},
{
"scc_rule_id": "979fd713-d39f-4efe-ba02-bf6fc07e57bb"
},
{
"scc_rule_id": "rule-e76a3a81-b0d0-41fc-947d-13dc9cfff379"
},
{
"scc_rule_id": "caf5e45d-ccc8-4e35-b124-e1b4c8bcab71"
},
{
"scc_rule_id": "rule-1edc74ae-0dad-4ea1-865d-89e3214d240f"
},
{
"scc_rule_id": "064d9004-8728-4988-b19a-1805710466f6"
},
{
"scc_rule_id": "rule-caf5e45d-ccc8-4e35-b124-e1b4c8bcab71"
}
],
"scc_parameters": {
"ibm_minimum_password_length": 12,
"ibm_password_reuse_prevention": 4,
"allowed_admins_per_account": "10",
"api_keys_rotated_days": 90,
"account_owner_last_login_days": 30,
"no_of_admins_for_iam": 3,
"no_of_service_id_admins_for_iam": 3,
"no_of_managers_for_iam": 0,
"no_of_service_id_managers_for_iam": 0,
"iam_service_ids_max_count": 3,
"ssh_port": 25,
"rdp_port": 3390,
"no_pre_shared_key_characters": 30,
"dns_port": 60,
"vm_nic_count": 1,
"no_of_admins_for_container_registry ": 3,
"no_of_service_id_admins_for_container_registry": 3,
"no_of_managers_for_container_registry": 0,
"no_of_service_id_managers_for_container_registry": 0,
"access_tokens_expire": 120
}
}
Règles Security and Compliance Center
Terraform Analyzer prend en charge les règles d' Security and Compliance Center s suivantes :
rule-f8722625-1968-4d7a-93cb-4b0f8da726da - Check whether IBMid password policy requires at least one uppercase letter
rule-789cb35b-5bdf-46d3-8b59-e1377e3b211c - Check whether IBMid password policy requires at least one lowercase letter
rule-81b36ae4-0f15-41c7-adac-fa9586ff46ab - Check whether IBMid password policy requires at least one number
rule-979fd713-d39f-4efe-ba02-bf6fc07e57bb - Check whether IBMid password policy requires minimum length of 12 characters
rule-e76a3a81-b0d0-41fc-947d-13dc9cfff379 - Check whether IBMid password policy prevents password reuse below the minimum of #
rule-759d504b-9eed-4602-8b5b-7244bf3f5690 - Check whether IBMid password can contain only printable ASCII characters (in the range 33 - 126)
rule-bcbd57e1-3cdc-4b6d-820b-2c63bc777e19 - Check whether IBMid password policy contains spaces or any of the following characters: ;:("?)<>
rule-fa06f6f2-b98e-49ac-aa55-d57de9e320d3 - Check whether IBMid uses a password meter that coaches users to create strong passwords that exceed the minimum requirements
rule-548a3321-6a39-400c-9c2d-0df9a13afd02 - Check whether IAM roles are used to create IAM policies for IBM resources
rule-726ec899-505e-4de9-ac1b-9578ef62f89f - Check whether a support role has been assigned in IAM to manage cases in the IBM Cloud Support Center
rule-962e2bde-2a4f-4e07-a352-ce17708b1e85 - Check whether API keys are not created in IAM during the initial setup of IAM users
rule-61fa114a-2bb9-43fd-8068-b873b48bdf79 - Check whether IAM users are attached to at least one access group
rule-4d86c074-097e-4ff3-a763-ccff128388e2 - Check whether multifactor authentication (MFA) is enabled at the account level
rule-0704e840-e443-4781-b9be-ec57469d09c1 - Check whether permissions for API key creation are limited and configured in IAM settings for the account owner
rule-d61c20c9-c0be-443b-af0c-0d900601e154 - Check whether Cloud Object Storage public access is disabled in IAM settings (not applicable to ACLs managed using S3 APIs)
rule-0244c010-fde6-4db3-95aa-8952bd292ac3 - Check whether permissions for service ID creation are limited and configured in IAM settings for the account owner
rule-ed64fa73-81e5-4920-8519-acfad845dd6c - Check whether Identity and Access Management (IAM) is enabled with audit logging
rule-b2232217-34a6-4fe8-a791-5903f1cc89ca - Check whether Cloud Shell is disabled in account settings
rule-10de7433-19e4-40a7-aebf-eddf1f75a68c - Check whether Cloud Object Storage is enabled with encryption
rule-7c86bb59-d677-422d-875c-0259053fad20 - Check whether Cloud Object Storage is enabled with customer-managed encryption and Bring Your Own Key (BYOK)
rule-222d6531-1fc7-4485-8771-35eb46c78877 - Check whether Cloud Object Storage is accessible only through HTTPS
rule-7c52a1ce-26cd-4cde-baa7-3bfb3703cf74 - Check whether Cloudant is accessible only through HTTPS
rule-f6197ee2-31bf-4d73-aacd-316c41a48df3 - Check whether Cloud Object Storage is accessible only by using private endpoints
rule-8cbd597c-7471-42bd-9c88-36b2696456e9 - Check whether Cloud Object Storage network access is restricted to a specific IP range
rule-c97259ee-336d-4c5f-b436-1868107a9558 - Check whether Cloud Object Storage is enabled with customer-managed encryption and Keep Your Own Key (KYOK)
rule-ef1db4bb-2490-48a9-883c-a20fea3db0e5 - Check whether Databases for MongoDB is enabled with encryption
rule-7f7ca588-9412-40a9-9bd8-0e5d19141e98 - Check whether Databases for MongoDB is enabled with customer-managed encryption and Bring Your Own Key (BYOK)
rule-77b99b6f-51dc-4290-b20c-7003941c7a46 - Check whether Databases for MongoDB is accessible only through HTTPS
rule-7b210b18-f849-4fa8-bd92-8e47921de51d - Check whether Databases for MongoDB is accessible only by using private endpoints
rule-c58bb2b9-7942-45ab-b9d4-e39c8430f570 - Check whether Databases for Redis is enabled with encryption
rule-e3cad136-17a8-4227-b8af-0be609da1da0 - Check whether Databases for Redis is enabled with customer-managed encryption and Bring Your Own Key (BYOK)
rule-90e3908d-27c3-4050-bb12-413dfc606f5c - Check whether Databases for Redis is accessible only through HTTPS
rule-c48dfb73-ede0-4ebf-b912-214379cd4ce7 - Check whether Databases for Redis is accessible only by using private endpoints
rule-ac09e136-8581-416a-a865-e9fc35a758be - Check whether Databases for Elasticsearch is enabled with encryption
rule-871594ca-0a70-492b-8a42-6f9474445f01 - Check whether Databases for Elasticsearch is enabled with customer-managed encryption and Bring Your Own Key (BYOK)
rule-47ca5017-27e9-4b8b-95d3-c2529271fbb1 - Check whether Databases for Elasticsearch is accessible only through HTTPS
rule-026e6d36-6a15-4623-846d-cab6f3b789d9 - Check whether Databases for Elasticsearch is accessible only by using private endpoints
rule-d634caeb-e5a6-467a-a4ac-8da8fd39f9ef - Check whether Databases for etcd is enabled with encryption
rule-42612696-2b8e-4fa7-8c17-78f191d2e1a0 - Check whether Databases for etcd is accessible only through HTTPS
rule-458decc2-a081-4c49-8f31-eeaf4833d8c8 - Check whether Databases for etcd is accessible only by using private endpoints
rule-4d7e56d6-f657-418c-9e49-6d248b2cf5a6 - Check whether Databases for PostgreSQL is enabled with encryption
rule-041ff30b-7167-4411-985d-5ad32ab6f850 - Check whether Databases for PostgreSQL is enabled with customer-managed encryption and Bring Your Own Key (BYOK)
rule-872db4fc-2f7c-4ba0-ace7-dc468f6813c7 - Check whether Databases for PostgreSQL is accessible only through HTTPS
rule-094495cf-c092-4dcb-96b8-3654c4bcf787 - Check whether Databases for PostgreSQL is accessible only by using private endpoints
rule-beb7b289-706b-4dc0-b01d-b1d15d4331e3 - Check whether Databases for MongoDB network access is restricted to a specific IP range
rule-04d856f1-68ce-4cba-b800-ba49f3c4f1a1 - Check whether Databases for Redis network access is restricted to specific IP range
rule-b5c06228-3f38-4d98-837f-2fe10d6ff9d5 - Check whether Databases for Elasticsearch network access is restricted to a specific IP range
rule-18540c4e-b96d-4ab9-a619-d541cc5a2824 - Check whether Databases for etcd network access is restricted to a specific IP range
rule-9b2d8054-bc93-44fd-901b-91f677287e84 - Check whether Databases for PostgreSQL network access is restricted to a specific IP range
rule-f6b7a692-8e48-4e74-b957-f5d591a7a15d - Check whether Key Protect has high availability
rule-d0725d07-27e6-4079-a3bc-746d5ccae00f - Check whether Hyper Protect Crypto Services instance is enabled with a dual authorization deletion policy
rule-da567ec9-8e24-4c65-993b-ad290bfdb855 - Check whether Cloud Object Storage buckets are enabled with IBM Activity Tracker
rule-0fb54bb2-773b-4cec-81b0-1ca7d8049ba0 - Check whether Cloud Object Storage buckets are enabled with IBM Cloud Monitoring
rule-5910ed25-7ad7-42d0-8e42-905df0123346 - Check whether IBM Activity Tracker is provisioned in multiple regions in an account
rule-d592e06a-8756-4efc-a401-1ec215168f48 - Check whether IBM Activity Tracker trails are integrated with LogDNA logs
rule-c98fab05-5119-451a-b100-35df840d2326 - Check whether IBM Activity Tracker logs are encrypted at rest
rule-1cdad315-c39e-4d7e-99ef-8af88ba410c1 - Check whether Cloud Internet Services (CIS) has web application firewall enabled
rule-564ed93b-1927-4562-8a90-fbae173cdee1 - Check whether Cloud Internet Services (CIS) has DDoS protection enabled
rule-7c5f6385-67e4-4edf-bec8-c722558b2dec - Check whether Virtual Private Cloud (VPC) security groups have no inbound rules that specify source IP 0.0.0.0/0 to SSH port
rule-9653d2c7-6290-4128-a5a3-65487ba40370 - Check whether Virtual Private Cloud (VPC) security groups have no inbound rules that specify source IP 0.0.0.0/0 to RDP port
rule-96527f89-1867-4581-b923-1400e04661e0 - Check whether Virtual Private Cloud (VPC) has no rules in the default security group
rule-4f477e09-c9aa-4bfb-a6b1-eaeaca15c06a - Check whether Virtual Private Cloud (VPC) security groups have no inbound ports open to the internet (0.0.0.0/0)
rule-9407e5a8-ec51-4228-a01a-0f32364224a6 - Check whether Virtual Private Cloud (VPC) security groups have no outbound ports open to the internet (0.0.0.0/0)
rule-65f42d91-d537-4532-a2c8-c5cd377500a7 - Check whether all virtual server instances have at least one Virtual Private Cloud (VPC) security group attached
rule-9e16b8a4-1255-474e-a8a3-afed67de2627 - Check whether all network interfaces of a virtual server instance have at least one Virtual Private Cloud (VPC) security group attached
rule-9ecf7e84-aa51-42ad-875e-58e9522a5e65 - Check whether VPN for VPC has Internet Key Exchange (IKE) policy encryption that is not set to "triple_des"
rule-b4c58eff-4d19-4d33-840e-56b2ac76585a - Check whether VPN for VPC has Internet Key Exchange (IKE) policy authentication that is set to minimum "sha256"
rule-a8a69cd6-a902-4144-b652-8be68600a029 - Check whether VPN for VPC has a Diffie-Hellman group set to at least group #
rule-f98453ba-ebb9-4d96-aa13-09ef808fb4ba - Check whether VPN for VPC has IPsec policy encryption that is not set to "triple_des"
rule-09298b01-e2c5-43f1-a1b4-0b413fe4f998 - Check whether VPN for VPC has IPsec policy authentication that is set to minimum "sha256"
rule-115eb377-e256-459d-9e17-a868e128bd0c - Check whether VPN for VPC has an IPsec policy that does not have Perfect Forward Secrecy (PFS) disabled
rule-d8d13c3e-5ca0-46c5-a055-2475852c4ec6 - Check whether VPN for VPC authentication is configured with a strong pre-shared key with at least # characters
rule-53895d42-9190-47d8-9a70-0c1ebea5f7c7 - Check whether VPN for VPC has a Dead Peer Detection policy that is set to "restart"
rule-200dc6e7-96f1-49a9-9999-7e4645dc7ea6 - Check whether Application Load Balancer for VPC has public access disabled
rule-0e5151b1-9caf-433c-b4e5-be3d505e458e - Check whether Application Load Balancer for VPC is configured with multiple members in the pool
rule-bfc9d304-a086-43c0-b3ba-d0f101f616df - Check whether Application Load Balancer for VPC listener is configured with default pool
rule-8c923215-afdc-41b1-886c-64ce78741f8c - Check whether Application Load Balancer for VPC has health check configured when created
rule-d491a44c-e7bc-46bc-af07-231da0bb6501 - Check whether Application Load Balancer for VPC has a health check protocol that is either HTTP or HTTPS
rule-cb1180b7-2f8c-40ba-b2dd-207bee6bc17f - Check whether Application Load Balancer for VPC pool uses the HTTPS protocol for HTTPS listeners
rule-65b61a0f-ffdb-41ba-873d-ad329e7fc0ee - Check whether Application Load Balancer for VPC is configured to convert HTTP client requests to HTTPS
rule-d544f217-3723-4376-b3aa-037c5f201e8d - Check whether Application Load Balancer for VPC uses HTTPS (SSL & TLS) instead of HTTP
rule-773385ab-4654-4088-883d-fe9d58bc4ecb - Check whether Block Storage for VPC is enabled with customer-managed encryption and Bring Your Own Key (BYOK)
rule-8ffe83cb-0ba1-47d6-a1e0-53e9932a5691 - Check whether Block Storage for VPC is enabled with customer-managed encryption and Keep Your Own Key (KYOK)
rule-f87929f7-0787-4749-a1ce-35c1f2320401 - Check whether data disks are encrypted with customer-managed keys
rule-390aa9af-c497-4ebc-9958-d572a5b7be3d - Check whether unattached disks are encrypted with customer-managed keys
rule-0f7e7e60-a05c-43a7-be74-70615f14a342 - Check whether Security Groups for VPC contains no outbound rules in security groups that specify source IP 8.8.8.8/32 to DNS port
rule-c4d50b06-9331-4f5c-a3f8-9fe8060efc9b - Check whether Security Groups for VPC doesn't allow PING for the default security group
rule-936158a6-40ff-48ca-91a1-f184aa9b0dff - Check whether Virtual Private Cloud (VPC) classic access is disabled
rule-64c0bea0-8760-4a6b-a56c-ee375a48961e - Check whether Virtual Private Cloud (VPC) has no public gateways attached
rule-64e628f7-4f3a-4c0e-85a4-40300bafe856 - Check whether Virtual Private Cloud (VPC) network access control lists don't allow ingress from 0.0.0.0/0 to any port
rule-f9137be8-2490-4afb-8cd5-a201cb167eb2 - Check whether Virtual Private Cloud (VPC) network access control lists don't allow ingress from 0.0.0.0/0 to SSH port
rule-f1e80ee7-88d5-4bf2-b42f-c863bb24601c - Check whether Virtual Private Cloud (VPC) network access control lists don't allow ingress from 0.0.0.0/0 to RDP port
rule-faacfd1f-454f-4e60-95d7-8fe01158840d - Check whether Virtual Private Cloud (VPC) network access control lists don't allow egress from 0.0.0.0/0 to any port
rule-c0314fad-f377-465e-9f16-fa5aa3d5ebbe - Check whether Virtual Servers for VPC instance has the minimum # interfaces
rule-17b54156-373a-48f9-b340-a7e47acd87b6 - Check whether Virtual Servers for VPC instance doesn't have a floating IP
rule-1af31459-ec38-4a58-91b0-956a17a38954 - Check whether Virtual Servers for VPC boot volumes are enabled with customer-managed encryption and Bring Your Own Key (BYOK)
rule-4aead0cd-fe26-44f1-b552-8ffdbb86422a - Check whether Virtual Servers for VPC boot volumes are enabled with customer-managed encryption and Keep Your Own Key (KYOK)
rule-a99b5f58-98ef-4208-9a23-e4fa25115d79 - Check whether Virtual Servers for VPC data volumes are enabled with customer-managed encryption and Bring Your Own Key (BYOK)
rule-df7323fd-0b20-493c-89fe-c0b287817c99 - Check whether Virtual Servers for VPC data volumes are enabled with customer-managed encryption and Keep Your Own Key (KYOK)
rule-6970e312-329d-44dc-b683-5ab14acd6a42 - Check whether Virtual Servers for VPC is provisioned from an encrypted image
rule-24e259fb-608e-486f-bb9d-99b78ae0383c - Check whether Virtual Servers for VPC instances are identifable by the workload they are running based on the Auto Scale for VPC instance group definition
rule-250a7311-0cfd-4b43-8987-e5629f8d99ae - Check whether Application Load Balancer for VPC has application port of the workload that is identifiable by the Auto Scale for VPC instance group definition
rule-c2dd768e-9a49-4d6d-8ac5-8fcfb233a7b0 - Check whether Virtual Private Cloud (VPC) has no subnet with public gateway attached
rule-24508beb-c00a-4c6b-bd04-d38dd8cb7d71 - Check whether App ID user data is encrypted
rule-65196a37-ddcc-422d-8096-09955c4b4e5d - Check whether Event Streams is accessible through public endpoints
rule-3b2768e5-d783-4b0c-a47f-81479af34689 - Check whether Event Streams is accessible only by using private endpoints
rule-c471b983-9dc5-4659-8fb1-4d20c9d516cc - Check whether App ID redirect URIs are using HTTPS only
rule-f4d30138-01c1-409d-a469-fa99a23f2fbd - Check whether App ID redirect URIs are not using localhost or 127.0.0.1
rule-6e0c618d-523d-4352-a1d1-12bb9905b914 - Check whether App ID redirect URIs are not using wildcards (*)
rule-1d2287c7-954e-4425-897b-351c30be723c - Check whether App ID Cloud Directory users aren't able to update their own accounts
rule-9786160b-ee91-45ab-b84b-9806541e0fc6 - Check whether App ID Cloud Directory users aren't able to self-sign up to applications
rule-d9247d0e-dce5-4854-849a-4a9033c8fe8d - Check whether App ID anonymous authentication is disabled
rule-9246d682-f7c5-4aac-8751-3947e4f27b0b - Check whether App ID password strength regex is configured
rule-168f8081-dbd6-4cbc-bf19-f9934b39d59c - Check whether App ID advanced password policies are enabled
rule-dd1600d2-2e69-4ada-bca5-9e70b76ccd21 - Check whether App ID avoid password reuse policy is enabled
rule-5b662adf-fcac-4081-a10d-1aa7109aba4e - Check whether App ID password expiration policy is enabled
rule-59cb7d09-feab-48fc-b18b-ee581ca1761e - Check whether App ID prevent username in password policy is enabled
rule-0b082506-2481-4212-a150-d198357fcc3a - Check whether App ID multifactor authentication (MFA) is enabled for Cloud Directory users
rule-91734f9f-b8ff-4bfd-afb3-db4f789ac38f - Check whether App ID access tokens are configured to expire within # minutes
rule-ded212fe-7def-44ce-9480-0487067b64c4 - Check whether Kubernetes Service clusters are accessible only by using private endpoints
rule-2325054a-c338-474a-9740-0b7034487e40 - Check whether OpenShift clusters are accessible only by using private endpoints
rule-de84afba-b83a-41d6-8c80-d0b6acafe039 - Check whether OpenShift version is up-to-date
Analyse de NetworkPolicy
Il s'agit d'une fonctionnalité bêta disponible à des fins d'évaluation et de test.
La commande netpol-analyze
exécute des vérifications de configuration sur les manifestes Kubernetes et Calico NetworkPolicy.
ibmcloud cra netpol-analyze
Cette commande vérifie la situation de 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 pour l'entrée et la 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 faciliter le débogage des problèmes de connectivité. Vous pouvez également utiliser cette commande pour fournir des résultats lint pour les règles réseau analysées, puis utiliser ces résultats pour améliorer
l'efficacité et la lisibilité des règles réseau. Dans certains cas, les résultats de lint peuvent également indiquer une erreur dans les définitions de règle réseau.
Options de la commande d'analyse NetworkPolicy
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 | Le nom du fichier dans lequel créer le rapport de conformité. |
-c , --connectivity |
Facultatif | Le nom du fichier dans lequel créer le rapport de connectivité. |
-l , --lint |
Facultatif | Le nom du fichier dans lequel créer le rapport de lint. |
-s , --strict |
Facultatif | Résultats en échec de commande (état de sortie 2) lorsque des risques de connectivité sont détectés. |
Exemple
Les exemples de fragment de code suivants montrent comment 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 de réseau
La commande netpol-analyze
s'exécute dans le cadre de Network Config Analyzer(NCA)d' IBM. Etant donné que cette commande exécute NCA
en tant qu'image Docker, vous devez installer Docker sur votre ordinateur.
L' URL-image de l'analyseur de politique réseau est 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 l'image de l'analyseur la plus récente (y compris les correctifs pour les vulnérabilités) du IBM Cloud® Container Registryglobal.
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 de pipeline Tekton lorsque vous créez une demande d'extraction, un déclencheur manuel ou que vous émettez une validation. 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-in-auto-remédiation | 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 est prise en charge uniquement dans le pipeline
de conformité continue. |
Facultatif |
opt-in-cra-auto-remédiation-enabled-repos | texte | Indique la liste des noms de référentiel séparés par des virgules à activer pour la commande cra auto remediation . Ce paramètre est pris en compte uniquement si opt-in-cra-auto-remediation est défini sur true et est pris en charge uniquement dans Continuous Compliance Pipeline. |
Facultatif |
opt-in-cra-auto-remédiation-force | texte | Force la commande cra auto remediation à mettre à jour les packages même si la version principale est différente de la version de package vulnérable actuelle (true ou false ). Ce paramètre est pris
en compte uniquement si opt-in-cra-auto-remediation est défini sur true et est pris en charge uniquement dans Continuous Compliance Pipeline. |
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 un BOM, voir Nomenclature(BOM). Après avoir généré le BOM, utilisez la commande ibmcloud cra cve
pour répertorier les 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 le Code Risk Analyzer, contactez le support 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 vois des résultats faux positifs inattendus. Que dois-je faire ?
Exécutez le pipeline de déploiement continu ( DevSecOps, CD) pour générer une SBOM mise à jour dans le coffre-fort des preuves. Cela pourrait permettre de résoudre une cause potentielle de faux positifs résultant de la présence d'une SBOM plus ancienne générée par le pipeline de conformité continue ( DevSecOps ) de CC.
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 récemment changé, vous pouvez constater que la gravité associée à une vulnérabilité particulière a changé. Code Risk Analyzer détermine la gravité optimale en fonction d'un calcul de toutes les sources de vulnérabilités.