Plugin de Code Risk Analyzer para IBM Cloud
Code Risk Analyzer dejará de utilizarse en todas las regiones el 12 de febrero de 2027. Sin embargo, si en una región no hay ningún uso activo del Analizador de Riesgos del Código, el servicio en esa región puede interrumpirse antes. Más información
La interfaz comando línea de comandos (CLI) de IBM Cloud® proporciona comandos para el análisis de riesgos del código. Puede utilizar la CLI de IBM Cloud para analizar el código en busca de vulnerabilidades y comprobar el cumplimiento de determinadas reglas. Code Risk Analyzer está disponible en todas las regiones de IBM Cloud en las que se admiten cadenas de herramientas.
Utilice la CLI para realizar las siguientes tareas:
- Genere una lista de materiales (BOM) que enumere las dependencias y la información de licencia disponible de todos los paquetes de aplicaciones y SO de terceros. También puede generar esta salida en formato CycloneDX-specific.
- Descubrir vulnerabilidades en los paquetes que figuran en la lista de materiales. También puede ver el informe generado en formato CycloneDX-specific o utilizar la corrección automática de vulnerabilidades para aplicaciones Node.js, Maven o Gradle (Groovy).
- Analice archivos de Kubernetes para el cumplimiento de determinadas reglas.
A partir de enero de 2024, Code Risk Analyzer consumirá datos sobre vulnerabilidades proporcionados por el proyecto de código abierto Clair, en lugar de datos de la empresa comercial Snyk Limited. Este cambio no requiere ninguna acción específica por su parte. Sin embargo, es posible que observe algunas diferencias en los detalles de los CVE notificados por Code Risk Analyzer.
Contenido soportado
Code Risk Analyzer da soporte a los lenguajes Java™, Node.js, Python y Go. En la tabla siguiente se muestra y se describe el contenido que admite Code Risk Analyzer.
| Contenido | Descripción |
|---|---|
| Java | El repositorio requiere Maven o Gradle para la automatización de la compilación. Maven utiliza el archivo pom.xml para calcular las dependencias, y Gradle utiliza el archivo build.gradle(.kts). Code Risk Analyzer
puede automatizar la corrección tanto para Maven como para Gradle (Groovy). |
| Node.js | package-lock.json calcula las dependencias. Para Node.js, Code Risk analyzer también puede automatizar la corrección. Asegúrese de que la versión npm instalada coincide con la versión npm del proyecto. |
| Python | Las dependencias se calculan utilizando los archivos requirements.txt y pyproject.toml. |
| Golang | Da soporte a la gestión de dependencias go mod y go dep. Para go mod, el archivo go.sum debe estar en el repositorio. Para go dep, el archivo Gopkg.lock debe
estar en el repositorio. |
| Dockerfiles | Se tienen en cuenta los archivos con el patrón Dockerfile en el repositorio. Para las imágenes de contenedor, se admiten las distribuciones Debian, Red Hat Enterprise Linux®, Alpine, y Ubuntu Linux. |
| Kubernetes | Se tienen en cuenta los archivos con el sufijo .yaml y .yml. El valor kind debe ser Pod, ReplicaSet, ReplicationController, Deployment, Daemonset,
Statefulset, Job, CronJob, NetworkPolicy, o Ingress. |
| Calico | Se tienen en cuenta los archivos con el sufijo .yaml y .yml. El valor kind debe ser NetworkPolicy, GlobalNetworkPolicy, Profile, NetworkSet, GlobalNetworkSet,
o HostEndpoint. |
| Terraform | El archivo de plan de Terraform se debe generar utilizando IBM Cloud como proveedor de Terraform. |
Code Risk Analyzer examina el código fuente y las dependencias de imágenes de sus repositorios en busca de vulnerabilidades. La siguiente tabla muestra las fuentes de información sobre vulnerabilidades que Code Risk Analyzer consulta para distintos tipos de dependencias.
| Dependencia | Versiones soportadas | Origen de los avisos de seguridad |
|---|---|---|
| Alpine imagen | Todas las versiones estables con soporte de seguridad del proveedor. | Alpine SecDB base de datos. |
| Debian imagen | Todas las versiones estables con soporte de seguridad del proveedor.
Las CVEs en paquetes binarios que están asociados con el paquete fuente Debian |
Debian Rastreador de fallos de seguridad. |
| GoogleContainerTools imagen distroless | Todas las versiones estables con soporte de seguridad del proveedor. | GoogleContainerTools sin distribución |
| Red Hat® Enterprise Linux® (RHEL) imagen | RHEL 6, RHEL/UBI 7, RHEL/UBI 8 y RHEL/UBI 9 | Red Hat API de datos de seguridad. |
| Ubuntu imagen | Todas las versiones estables con soporte de seguridad del proveedor. | Ubuntu Rastreador CVE. |
| Go, npm ( JavaScript ), Maven ( Java ), PyPI ( Python ), RubyGems ( Ruby ), y Packagist (PHP) | Todas las versiones estables con soporte de seguridad del proveedor. | Base de datos de vulnerabilidades de código abierto. |
Problemas conocidos con Code Risk Analyzer
Code Risk Analyzer no puede descubrir vulnerabilidades en los paquetes de aplicaciones que no utilicen un esquema de creación de versiones, como por ejemplo major.minor.patch. Por ejemplo, no se da soporte a versiones anteriores
al release ni a versiones que contengan metadatos de compilación.
Requisitos previos
-
Instale la CLI de IBM Cloud. Consulte Descargar CLI de IBM Cloud para obtener instrucciones.
-
Instale el plug-in de CLI de Code Risk Analyzer ejecutando el mandato siguiente:
ibmcloud plugin install cra
-
Asegúrese de que puede acceder a una cadena de herramientas en una de las regiones soportadas. No es necesario que la cadena de herramientas tenga herramientas. Para obtener más información sobre las cadenas de herramientas, consulte Creación de una cadena de herramientas a partir de una app.
-
Especifique el ID de la cadena de herramientas estableciendo la variable de entorno
TOOLCHAIN_ID:
export TOOLCHAIN_ID=e22195a5-11e3-44ba-9533-e7c18a3a61a7
- Inicie sesión en una región específica de IBM Cloud ejecutando el mandato siguiente, donde
[region]es la región donde se ha creado la cadena de herramientas.
ibmcloud login -r [region]
- Opcionalmente, para un mayor control y seguridad sobre sus datos cuando utilice CLI, tiene la opción de utilizar rutas privadas a los puntos finales de IBM Cloud. En primer lugar, debe habilitar el direccionamiento y el reenvío virtuales en su cuenta y, a continuación, puede habilitar el uso de puntos finales de servicio privado de IBM Cloud. Para obtener más información sobre la configuración de la cuenta para dar soporte a la opción de conectividad privada, consulte Habilitación de puntos finales de VRF y de servicio.
Utilice el siguiente comando para iniciar sesión en un endpoint privado donde [region] es la región donde se creó la cadena de herramientas.
ibmcloud login -a private.cloud.ibm.com -r [region]
Mandatos de uso de la CLI
Recibirá notificaciones en la línea de mandatos cuando estén disponibles las actualizaciones de la CLI y los plug-ins de IBM Cloud. Asegúrese de mantener la CLI actualizada para que pueda utilizar los mandatos más recientes. Puede ver la versión
actual de todos los plug-ins instalados ejecutando el mandato ibmcloud plugin list.
Ayuda de Code Risk Analyzer
El mandato siguiente muestra la lista de mandatos de Code Risk Analyzer:
ibmcloud cra --help
Ayuda de mandatos de Code Risk Analyzer
El mandato siguiente muestra los detalles de los distintivos que se utilizan con un mandato. Utilice ibmcloud cra --help para visualizar los mandatos disponibles.
ibmcloud cra <command> --help
Lista de materiales (BOM)
El mandato bom-generate accede a artefactos en la vía de acceso de directorio especificada y realiza un descubrimiento profundo para identificar todas las dependencias, incluidas las dependencias transitivas. El comando también
identifica las licencias bajo las que se distribuyen estas dependencias. Se crea una lista de materiales que captura una instantánea de todas las dependencias. Puede generar la lista de materiales en el formato estándar o en el formato CycloneDX's
SBOM.
ibmcloud cra bom-generate
Requisitos de mandato de BOM
El mandato bom-generate depende de determinados mandatos externos:
- Si la vía de acceso contiene archivos Dockerfile, este mandato extrae imágenes base y crea imágenes para cada etapa de compilación en cada archivo Dockerfile. En este escenario, el mandato
bom-generaterequiere que los mandatosDocker cliytarestén disponibles. - Si la vía de acceso contiene archivos Maven, este mandato utiliza
mvnpara crear una lista de dependencias. En este escenario, el mandatobom-generaterequiere que el mandatomvnesté disponible. - Si la vía de acceso contiene archivos Gradle, este mandato utiliza
gradlepara crear una lista de dependencias. En este escenario, el mandatobom-generaterequiere que el mandatogradleesté disponible. - Si la vía de acceso contiene archivos Node.js
package-jsony este mandato se utiliza para generar un archivopackage-lock.jsoncorrespondiente, el mandatobom-generateutilizanpmpara crear el archivo package-lock.json. En este escenario, el mandato requiere que el mandatonpmesté disponible. - Si la ruta contiene los archivos Python
requirements.txtopyproject.toml, el comando utilizapippara generar las dependencias del paquete. En este escenario, el comandobom-generatecomando requiere que el comandopipesté disponible. Se da soporte a Python versión 2 y Python versión 3.
Si utiliza archivos Dockerfile, asegúrese de iniciar sesión en el registro de contenedor desde el que se extraerán las imágenes base.
Si el archivo Dockerfile requiere ARGS, establezca un ARG individual como una variable de entorno antes de ejecutar el mandato. Por ejemplo, si el archivo Dockerfile utiliza un ARG de IAM_USER, exporte una variable de entorno
denominada IAM_USER: export IAM_USER='value'. La CLI pasa automáticamente estas variables de entorno al mandato docker build .
También puede especificar explícitamente el distintivo DOCKERBUILDFLAGS. Para exportar DOCKERBUILDFLAGS con el distintivo ARGS Docker, escriba el mandato siguiente:
export DOCKERBUILDFLAGS="--build-arg IAM_USER --build-arg API_KEY"
Opciones de mandato de BOM
La siguiente tabla enumera las opciones de comando que puede utilizar para generar una lista de materiales con el comando bom-generate.
| Opciones de comando | Necesario u opcional | Descripción |
|---|---|---|
--path |
Obligatorio | La vía de acceso del directorio del proyecto a explorar. |
-r, --report |
Obligatorio | El nombre de archivo en el que se debe almacenar el informe BOM. |
-a, --asset-type |
Opcional | Las comprobaciones de seguridad a ejecutar (aplicaciones, imagen, sistema operativo, todos). De forma predeterminada, esta opción se establece en all. La opción apps se utiliza para limitar el descubrimiento
a los paquetes de aplicación. La opción image se utiliza para limitar el descubrimiento a imágenes base que se utilizan en archivos Dockerfile. La opción os se utiliza para limitar el descubrimiento para crear
etapas sólo en archivos Dockerfile. Puede especificar varios valores utilizando una coma para delimitar los valores, como por ejemplo -a os,image,apps. |
-p, --prev-report |
Opcional | Utilice el informe BOM anterior para acelerar el mandato. Por ejemplo, si un archivo Dockerfile no se ha actualizado desde que se ha generado el último informe, el mandato omite el descubrimiento de paquetes de ese archivo Dockerfile.
El mismo escenario se aplica a otros archivos de manifiesto como el archivo package-lock.json. |
-c, --dockerbuildcontext |
Opcional | Si se especifica, CRA utiliza el directorio en el parámetro de vía de acceso como contexto de compilación de Docker durante la exploración de la etapa de compilación. |
-o, --output |
Opcional | Seleccione el formato de informe BOM. Puede generar la salida de formato en formato BOM estándar (standard) o en formato SBOM de CycloneDX (cyclonedx). El valor predeterminado es standard. Puede
almacenar ambos formatos especificando cada formato separado por una coma sin espacio. |
-f, --dockerbuildflags |
Opcional | Personalice el mandato de compilación de Docker para la exploración de la etapa de compilación. En lugar de utilizar este distintivo de línea de mandatos, puede especificar el valor en una variable de entorno denominada DOCKERBUILDFLAGS.
De forma predeterminada, esta opción de mandato se establece en ''. Si utiliza esta opción, asegúrese de que sea el último distintivo que se proporciona al mandato. |
-d, --dockerfilepattern |
Opcional | El patrón para identificar el archivo Dockerfile en el repositorio. |
-g, --gradle.excludeconfigurations |
Opcional | Excluya las configuraciones de Gradle, por ejemplo: runtimeClasspath,testCompileClasspath. De forma predeterminada, esta opción de mandato se establece en ''. |
-l, --gradleprops |
Opcional | Personalice el comando Gradle con propiedades para la exploración de dependencias de Gradle. |
-m, --maven.excludescopes |
Opcional | Excluya los ámbitos de Maven, por ejemplo: test,compile. Ejemplo: 'test, compile'. De forma predeterminada, esta opción de mandato se establece en ''. |
-n, --nodejs.createpackagelock |
Opcional | Habilite la tarea para crear el archivo package-lock.json para los proyectos node.js. |
--region |
Opcional | La región ibmcloud donde se encuentra la cadena de herramientas. |
--toolchainid |
Opcional | El ID de cadena de herramientas de destino a utilizar. |
-v, --verbose |
Opcional | Habilitar mensajes de registro detallados. |
Ignorar archivos
Si la vía de acceso contiene el archivo .cra/.fileignore, los archivos que se especifican en el archivo .fileignore no se exploran para las dependencias. El archivo .fileignore debe seguir las reglas
de los archivos .gitignore. De forma similar a un archivo .gitignore, el archivo .fileignore puede incluir comentarios,
directorios a ignorar, archivos a ignorar y otros patrones.
En el siguiente archivo .fileignore de ejemplo se muestra cómo excluir scripts bash, node_modules y 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
Configuración de múltiples contextos de construcción Docker
Cuando se trabaja con varios Dockerfiles dentro de un mismo proyecto, es posible que desee definir contextos de compilación independientes para cada Dockerfile. Esto puede lograrse utilizando un archivo .cra/.dockerbuildcontext,
que es un archivo JSON que asigna rutas Dockerfile a sus correspondientes contextos de compilación.
Si existe un archivo .cra/.dockerbuildcontext en el directorio del proyecto, los comandos de compilación de CRA Docker utilizarán las rutas especificadas en este archivo como contextos de compilación para los archivos Docker asociados.
Las claves del objeto JSON representan las rutas relativas a los archivos Docker, mientras que los valores especifican las rutas relativas a los respectivos contextos de compilación.
Este es un ejemplo de un archivo .dockerbuildcontext que define diferentes contextos de compilación para múltiples archivos Docker:
{
"Dockerfile": "./",
"path/to/different/Dockerfile": "./another/Path"
}
Ejemplo
Los siguientes fragmentos de código muestran cómo utilizar el mandato 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
Exploración de vulnerabilidades
El comando vulnerability-scan espera una lista de materiales en formato standard como entrada y detecta vulnerabilidades en paquetes de aplicaciones y paquetes de sistemas operativos que aparecen en la lista de materiales.
A partir de la abundante información sobre amenazas obtenida de múltiples fuentes de vulnerabilidades y exposiciones comunes (CVE), se ofrecen recomendaciones de soluciones específicas. Code Risk Analyzer también puede realizar la corrección
automática de paquetes vulnerables únicamente para aplicaciones basadas en Node.js. También puede generar este informe en el formato estándar o en el formato CycloneDX's Vulnerability Exploitability Exchange (VEX).
ibmcloud cra vulnerability-scan
Opciones de mandato de exploración de vulnerabilidades
La tabla siguiente lista las opciones para utilizar el mandato vulnerability-scan.
| Opciones de comando | Necesario u opcional | Descripción |
|---|---|---|
-b, --bom |
Obligatorio | La ruta del archivo de la lista de materiales que se generó utilizando el comando bom-generate. Esta lista de materiales debe estar en formato standard. |
-a, --autofix |
Opcional | Corrige tipos específicos de vulnerabilidades de las aplicaciones. Esta opción sólo está disponible para las aplicaciones Node.js, Maven y Gradle. |
-f, --commentfile |
Opcional | Especifica el archivo donde se crea el informe markdown. Este comando sólo está disponible con autofix. |
-c, --cveignore |
Opcional | La vía de acceso del archivo Ignore de CVE que contiene la lista de CVE que se debe ignorar. |
-e, --excludedev |
Opcional | Especifica que no desea que el mandato informe de los CVE para las dependencias de desarrollo. |
--force |
Opcional | Fuerza una actualización para los paquetes de nodo de nivel superior, incluso cuando la versión principal es diferente. Este comando sólo está disponible con autofix. |
--include-nofix |
Opcional | Incluir o excluir la notificación de los CVE que no tienen soluciones conocidas. De forma predeterminada, esta opción se establece en app. La opción app se utiliza para incluir sólo los CVE de paquetes de aplicaciones
sin correcciones. La opción os se utiliza para incluir sólo las CVE de paquetes del sistema operativo sin correcciones. La opción all se utiliza para incluir las CVE de paquetes de aplicaciones y sistemas
operativos sin correcciones. La opción none se utiliza para excluir los CVE de paquetes de aplicaciones y sistemas operativos sin correcciones. |
--path |
Obligatorio si --autofix está activado |
La vía de acceso del directorio del proyecto a explorar. Este comando sólo está disponible con autofix. |
--region |
Opcional | La región ibmcloud para la cadena de herramientas. |
-r, --report |
Opcional | La vía de acceso al informe generado. |
-o, --output |
Opcional | Selecciona el formato de informe CVE. Puede generar la salida de formato en formato CVE estándar (standard) o en formato VEX de CycloneDX (cyclonedx). El valor predeterminado es standard. |
-s, --strict |
Opcional | Da como resultado un error de mandato (estado de salida 2) cuando se encuentran vulnerabilidades. |
--toolchainid |
Opcional | El ID de la cadena de herramientas de destino. |
Ignorar vulnerabilidades
Si se especifica el parámetro -c o --cveignore, el mandato busca ese archivo y no informa de los CVE que se han especificado en el archivo. Puede configurar los CVE para omitirlos indefinidamente hasta que haya una
remediación disponible, o hasta una fecha de caducidad especificada.
El ejemplo siguiente muestra un esquema JSON para el archivo .cveignore:
[
{
"cve": "string",
"alwaysOmit": "bool",
"untilRemediationAvailable": "bool",
"expiration": "string"
}
]
Se da soporte a las siguientes propiedades para cada entrada del archivo .cveignore:
- cve - La vulnerabilidad que se va a omitir. El valor de esta propiedad es un ID de CVE.
- alwaysOmit - Si esta propiedad se establece en
true, la vulnerabilidad se omite hasta que se cambia. Esta propiedad prevalece sobre otros valores de propiedad. - untilRemediaciónDisponible - Si esta propiedad se establece en
true, la vulnerabilidad se omite hasta que hay disponible una vía de remediación. Si hay disponible una corrección, la vulnerabilidad no se omite y se muestra un mensaje. Esta propiedad prevalece sobre el valor de propiedad de caducidad. - Caducidad - Si esta propiedad se establece en
truey no se alcanza la fecha de caducidad, se omite la vulnerabilidad. Si se alcanza la fecha de caducidad, la vulnerabilidad no se omite y se muestra un mensaje. Utilice el formato de hora RFC3339 (yyyy-MM-ddTHH:mm:ss[+-]Z) para definir esta propiedad.
Code Risk Analyzer solamente utiliza estas propiedades definidas. Puede añadir propiedades sin efecto en las funciones. Si no se omite una vulnerabilidad definida en .cveignore, se genera un registro que explica la razón. Si se
omite una vulnerabilidad definida en el archivo .cveignore, no se visualiza ningún registro individual. Tras finalizar el informe, se registra la cantidad de omisiones y una lista de los ID de las vulnerabilidades, con el nombre
del paquete, que se han omitido.
El siguiente fragmento de código muestra un archivo .cveignore de ejemplo:
[
{
"cve": "CVE-2021-27290",
"alwaysOmit": true
},
{
"cve": "CVE-2020-8244",
"untilRemediationAvailable": true,
}
]
Ejemplo
Los siguientes fragmentos de código muestran cómo utilizar el mandato 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
virtual
El mandato deployment-analyze ejecuta comprobaciones de configuración en los manifiestos de despliegue de Kubernetes.
ibmcloud cra deployment-analyze
Este comando proporciona una guía prescriptiva para establecer una postura de configuración segura para los contenedores Docker. El analizador de riesgos de código utiliza estas configuraciones de seguridad como punto de referencia e identifica
los controles de seguridad que deben comprobarse en los artefactos de despliegue, como los archivos .yaml, para las aplicaciones Kubernetes. Este comando también proporciona evaluaciones de riesgo para cada fallo de control.
La siguiente tabla enumera los controles que puede implementar en DevSecOps, tal y como se identifican en CIS Docker 1.13.0. Se añaden más controles basados en referencias de código abierto de Kubernetes Common Configuration Scoring System(KCCSS).
| ID | regla | Riesgo |
|---|---|---|
| 5.3 | Asegúrese de que los contenedores no tienen la capacidad CAP_SYS_ADMIN. |
Alto |
| 5.3 | Asegúrese de que los contenedores no tienen la capacidad CAP_NET_RAW. |
Alto |
| 5.4 | Asegúrese de que no se utilizan contenedores privilegiados. | Alto |
| 5.5 | Asegúrese de que los directorios sensibles del sistema anfitrión no están montados en los contenedores. | Medio |
| 5.7 | Asegúrese de que los puertos privilegiados no se asignan dentro de los contenedores. | Bajo |
| 5.9 | Asegúrese de que el espacio de nombres de red del host no está compartido. | Medio |
| 5.10 | Asegúrese de que el uso de memoria del contenedor es limitado. | Medio |
| 5.11 | Asegúrese de que el contenedor tiene la prioridad de CPU adecuada. | Medio |
| 5.12 | Asegúrese de que el sistema de archivos raíz del contenedor está montado como sólo lectura. | Medio |
| 5.15 | Asegúrese de que el espacio de nombres del proceso del host no está compartido. | Medio |
| 5.16 | Asegúrese de que el espacio de nombres IPC del host no está compartido. | Medio |
| 5.31 | Asegúrese de que la toma Docker no está montada dentro de ningún contenedor. | Alto |
|
|
Asegúrese de que los contenedores no permiten la asignación insegura de recursos de CPU. | Medio |
|
|
Asegúrese de que los contenedores no permiten la escalada de privilegios. | Medio |
|
|
Asegúrese de que los contenedores no expongan partes inseguras de /proc. |
Medio |
|
|
Asegúrese de que los contenedores no están expuestos a través de un puerto de host compartido. | Medio |
Opciones de mandato de despliegue
La tabla siguiente lista las opciones de mandato que puede utilizar para el mandato deployment-analyze.
| Opciones de comando | Necesario u opcional | Descripción |
|---|---|---|
--path |
Obligatorio | La vía de acceso del directorio del proyecto a explorar. |
-r, --report |
Obligatorio | El nombre de archivo en el que crear el informe. |
-f, --fileignore |
Opcional | La vía de acceso del archivo .fileignore. |
-s, --strict |
Opcional | Los resultados del error de mandato (estado de salida 2) cuando se encuentran riesgos de despliegue. |
Ejemplo
Los siguientes fragmentos de código muestran cómo utilizar el mandato 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 análisis
Esta es una característica beta que está disponible con fines de evaluación y pruebas.
El comando netpol-analyze ejecuta comprobaciones de configuración en los manifiestos Kubernetes y Calico NetworkPolicy.
ibmcloud cra netpol-analyze
Este comando comprueba la postura de conectividad-configuración de una aplicación Kubernetes contra el control NIST SP 800-53 SC-7(5 ). Verifica que la conectividad de cada carga de trabajo está controlada por al menos un recurso NetworkPolicy, y que los puertos no seguros están bloqueados tanto para la entrada como para la salida.
El comando netpol-analyze también puede proporcionar un informe de conectividad para la aplicación escaneada, mostrando todas las conexiones permitidas entre las cargas de trabajo de la aplicación. Puede utilizar este informe como
prueba de cumplimiento o para ayudar a depurar problemas de conectividad. También puede utilizar este comando para proporcionar resultados de lint para las políticas de red escaneadas y luego utilizar estos resultados para mejorar la eficiencia
y legibilidad de las políticas de red. En algunos casos, los resultados de lint también pueden indicar un error en las definiciones de la política de red.
NetworkPolicy opciones del comando de análisis
La tabla siguiente lista las opciones de mandato que puede utilizar para el mandato netpol-analyze.
| Opciones de comando | Necesario u opcional | Descripción |
|---|---|---|
--path |
Obligatorio | La vía de acceso del directorio del proyecto a explorar. |
-r, --report |
Obligatorio | El nombre del archivo en el que se creará el informe de cumplimiento. |
-c, --connectivity |
Opcional | El nombre del archivo en el que se creará el informe de conectividad. |
-l, --lint |
Opcional | El nombre del archivo en el que se creará el informe de pelusa. |
-s, --strict |
Opcional | Resulta en un fallo comando (estado de salida 2) cuando se encuentran riesgos de conectividad. |
Ejemplo
Los siguientes fragmentos de código de ejemplo muestran cómo puede utilizar el comando 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
Imagen del analizador de configuración de red
El comando netpol-analyze se ejecuta como parte de IBM 's Network Config Analyzer(NCA). Debido a que este comando ejecuta NCA como una
imagen de Docker, debe instalar Docker en su ordenador.
La imagen URL para el analizador de políticas de red es icr.io/continuous-delivery/cra/nca.
Si la imagen del analizador aún no se encuentra en el registro local, el comando netpol-analyze extrae la última imagen del analizador (incluidas las correcciones de cualquier vulnerabilidad) de la página global IBM Cloud® Container
Registry.
Utilización de Code Risk Analyzer en las interconexiones de Tekton
Puede utilizar la tarea task-cra en los pipelines Tekton. Utilice la definición de canalización de Tekton cuando cree una solicitud de extracción, una activación manual o emita una confirmación. También puede crear sus propias tareas de Tekton y ejecutar Code Risk Analyzer
desde esas tareas.
Utilización de Code Risk Analyzer en DevSecOps
Puede utilizar Code Risk Analyzer en DevSecOps. La tabla siguiente lista y describe los parámetros soportados de Code Risk Analyzer para DevSecOps.
Para obtener más información sobre los mandatos de programa de utilidad dependientes que necesita la imagen de interconexión para ejecutar el mandato bom-generate, consulte Requisitos de BOM. Si faltan
mandatos, puede utilizar el parámetro cra-custom-script-path para hacer referencia a un script para instalar dichos mandatos.
| Nombre | Tipo | Descripción | Necesario u opcional |
|---|---|---|---|
| artifactory-dockerconfigjson | SECRET | El archivo de Docker config.json codificado en base64 que almacena información de credenciales para Artifactory. |
Opcional |
| baseimage-auth-user | Texto | Las credenciales para la imagen base del archivo Dockerfile de la aplicación que necesita la exploración de Code Risk Analyzer. | Opcional |
| baseimage-auth-email | Texto | Las credenciales para la imagen base del archivo Dockerfile de la aplicación que necesita la exploración de Code Risk Analyzer. | Opcional |
| baseimage-auth-host | Texto | Las credenciales para la imagen base del archivo Dockerfile de la aplicación que necesita la exploración de Code Risk Analyzer. | Opcional |
| baseimage-auth-password | SECRET | Las credenciales para la imagen base del archivo Dockerfile de la aplicación que necesita la exploración de Code Risk Analyzer. | Opcional |
| cra-cveignore-path | Texto | La vía de acceso al archivo cveignore que es relativa a la raíz del repositorio de la aplicación. La vía de acceso del archivo predeterminada es .cra/.cveignore. |
Opcional |
| cra-custom-script-path | Texto | La vía de acceso a un script personalizado que se ejecuta antes de la exploración de Code Risk Analyzer. Este script se utiliza para proporcionar la opción de establecer variables de ENV en el contexto de la herramienta de
BOM de Code Risk Analyzer. |
Opcional |
| cra-docker-buildflags | Texto | El mandato de compilación de Docker personalizado para la exploración de etapas de compilación. De forma predeterminada este parámetro está vacío. | Opcional |
| cra-docker-build-context | Texto | Si se especifica, Code Risk Analyzer utiliza el directorio en el parámetro de vía de acceso como contexto de compilación de Docker. | Opcional |
| cra-exclude-devdependencies | Texto | Se especifica si se deben excluir las dependencias de desarrollo de la exploración (true o false). El valor predeterminado es false. |
Opcional |
| cra-gradle-exclude-configs | Texto | Especifica las configuraciones de Gradle para excluir dependencias de la exploración. Por ejemplo, runtimeClasspath,testCompileClasspath. De forma predeterminada este parámetro está vacío. |
Opcional |
| cra-maven-exclude-scopes | Texto | Especifica qué ámbitos de Maven excluirán las dependencias en la exploración. Por ejemplo, test,compile. De forma predeterminada este parámetro está vacío. |
Opcional |
| cra-nodejs-create-package-lock | Texto | Habilita el descubrimiento de Code Risk Analyzer para crear el archivo package-lock.json para los repositorios de node.js. De forma predeterminada, este parámetro se establece en false. |
Opcional |
| ibmcloud-api-key | SECRET | La clave de API de IBM Cloud® que interactúa con la herramienta de CLI la de ibmcloud. |
Obligatorio |
| pipeline-dockerconfigjson | SECRET | El archivo Docker config.json codificado en base64 que extrae imágenes de un registro privado. |
Opcional |
| onepipeline-dockerconfigjson | SECRET | En desuso. El archivo Docker config.json codificado en base64 que extrae imágenes de un registro privado. |
Opcional |
| pipeline-debug | seleccionar | El conmutador de modalidad de depuración de interconexión. | Opcional |
| aceptación-cra-reparación automática | Texto | Permite que Code Risk Analyzer ejecute el comando cra auto remediation (true o false). El valor predeterminado es false. Este comando sólo es compatible con el proceso de cumplimiento
continuo. |
Opcional |
| opt-in-cra-reparación-automática-habilitada-repositorios | Texto | Especifica la lista de nombres de repositorios separados por comas que se habilitarán para el comando cra auto remediation. Este parámetro sólo se tiene en cuenta si opt-in-cra-auto-remediation está configurado
como true y sólo se admite en el proceso de cumplimiento continuo. |
Opcional |
| opt-in-cra-reparación-automática-forzar | Texto | Obliga al comando cra auto remediation a actualizar los paquetes incluso si la versión principal es diferente de la versión actual del paquete vulnerable (true o false). Este parámetro sólo se tiene
en cuenta si opt-in-cra-auto-remediation está configurado como true y sólo se admite en el proceso de cumplimiento continuo. |
Opcional |
Scripts personalizados de ejemplo para DevSecOps
Si el archivo Dockerfile requiere ARGS, puede utilizar el parámetro cra-custom-script-path para establecer un ARG individual como una variable de entorno antes de ejecutar el mandato. La vía de acceso del script personalizado
es la vía de acceso a un script que reside en el proyecto del usuario. Por ejemplo, si el archivo Dockerfile utiliza IAM_USER ARG, exporte una variable de entorno en el script denominado IAM_USER: export IAM_USER='value'.
Si el ARG que necesita el archivo Dockerfile se establece como una propiedad de entorno en las cadenas de herramientas, puede utilizar get_env para obtener el valor. En esta instancia, puede exportar una variable de entorno
dentro del script IAM_USER: export IAM_USER=$(get_env iam_user_environment_property_name). La tarea run-cra toma automáticamente estas variables de entorno y las pasa a los mandatos de compilación Docker.
El ejemplo siguiente muestra cómo utilizar cra-custom-script para exportar 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)
También puede utilizar el parámetro cra-custom-script-path para escenarios en los que las versiones de la herramienta de imagen base de DevSecOps pueden estar obsoletas, basándose en el proyecto. Por ejemplo, puede actualizar
mandatos como pip/pip3 para descubrir paquetes de Python que requieran una versión pip posterior.
El ejemplo siguiente muestra cómo utilizar cra-custom-script para actualizar la versión de 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 el archivo Dockerfile utiliza una imagen de un registro de Docker privado, puede utilizar el parámetro cra-custom-script-path para autenticarse en un registro de Docker privado antes de ejecutar Code Risk Analyzer y permitir
que Code Risk Analyzer extraiga esta imagen para la exploración.
El ejemplo siguiente muestra cómo utilizar cra-custom-script para autenticarse en el registro de contenedor de ibmcloud:
#!/usr/bin/env bash
if [[ "${PIPELINE_DEBUG:-0}" == 1 ]]; then
trap env EXIT
env | sort
set -x
fi
ibmcloud cr login
Depuración de Code Risk Analyzer en DevSecOps
Para ayudar con la depuración, puede ejecutar Code Risk Analyzer localmente como una interfaz de línea de mandatos (CLI) en su propia máquina local. Para obtener información sobre cómo ejecutar el comando ibmcloud cra bom-generate para generar una lista de materiales, consulte Lista de materiales(BOM). Después de generar la lista de materiales, utilice el comando ibmcloud cra cve para listar cualquier vulnerabilidad.
Para obtener más información sobre la ejecución del mandato ibmcloud cra cve, consulte Exploración de vulnerabilidades.
Asegúrese de que la tarea run-cra no contenga ningún error. Si la tarea contiene errores, compruebe si la interconexión utiliza la versión actual de DevSecOps. Si el problema no se resuelve comprobando la versión de DevSecOps,
los ejemplos siguientes proporcionan algunos errores comunes y soluciones propuestas.
FAILED
Error executing docker pull cmd: [docker pull us.icr.io/opentoolchain/ibmnode:14ubisecure]
Puede verificar que tiene acceso al registro privado. Si no tiene acceso, puede utilizar el parámetro cra-custom-script-path y especificar la vía de acceso a un script personalizado que se ejecuta antes de Code Risk Analyzer para
autenticarse en el registro privado.
FAILED
Error executing docker build cmd for stage-0: exit status 1
Si el archivo Dockerfile requiere ARGS, el mandato docker build para las etapas de compilación no se puede compilar debido al ARGS que falta. cra-custom-script-path es necesario para configurar el ARGS como variables
de entorno. Para obtener más información sobre cómo configurar el script personalizado, consulte Scripts personalizados de ejemplo para 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
De forma predeterminada, el mandato bom-generate de Code Risk Analyzer crea los archivos Dockerfile desde el contexto de la ubicación del propio Dockerfile. Si desea crear los archivos Dockerfile desde el directorio del proyecto
raíz, utilice el parámetro cra-docker-build-context para permitir que Code Risk Analyzer cree los archivos Dockerfile desde este contexto.
Eliminación de datos de Code Risk Analyzer almacenados
El plug-in de Code Risk Analyzer no almacena datos de cliente en sus bases de datos. Sin embargo, versiones anteriores de las tareas de Code Risk Analyzer Tekton almacenaban de forma segura los resultados de las exploraciones de vulnerabilidades en su base de datos.
Para solicitar la eliminación de cualquier dato del cliente que pudiera estar almacenado en el Analizador de Riesgos del Código, póngase en contacto con el servicio de asistencia IBM.
Preguntas frecuentes
Obtenga respuestas a las preguntas frecuentes sobre el uso de la CLI de Code Risk Analyzer.
¿Cómo puedo determinar por qué ha fallado la CLI?
Antes de llamar a la CLI de Code Risk Analyzer, establezca la variable de entorno IBMCLOUD_TRACE en true para activar el registro de depuración.
export IBMCLOUD_TRACE=true
Observe las llamadas de API y las respuestas que se muestran en el registro para determinar la razón exacta del error.
¿Cómo puedo depurar un mandato de BOM que no puede extraer una imagen base de un registro privado?
Asegúrese de que se está autenticado con el registro en el que reside la imagen base utilizando el mandato ibmcloud cr login o el mandato docker login.
¿Cómo puedo depurar un mandato de BOM que no puede analizar un archivo Dockerfile?
- Verifique que el archivo Dockerfile no tenga problemas al ejecutar el mandato
docker buildy asegúrse de que lo pasa. - Si el archivo Dockerfile requiere que se pase ARG, asegúrese de que el ARG esté establecido como una variable de entorno. También puede utilizar la variable de entorno
DOCKERBUILDFLAG. - Autentíquese con el registro que contiene las imágenes base.
Estoy viendo resultados falsos positivos inesperados. ¿Qué debo hacer?
Ejecute la canalización de implantación continua (CD) de DevSecOps para generar un SBOM actualizado en el armario de pruebas. Esto podría solucionar una posible causa de falsos positivos resultantes de la presencia de un SBOM más antiguo generado por el proceso de cumplimiento continuo (CC) de DevSecOps.
¿Por qué la gravedad del informe o problema es diferente de la del enlace de vulnerabilidad asociado?
Dado que nuestra fuente de información sobre vulnerabilidades ha cambiado recientemente, es posible que vea que la gravedad asociada a una vulnerabilidad concreta ha cambiado. Code Risk Analyzer determinará la gravedad óptima basándose en un cálculo de todas las fuentes de vulnerabilidades.