script collect-evidence

El collect-evidence script ayuda a los adoptantes, usuarios y colaboradores a enviar sus datos de cumplimiento al flujo de datos de gestión de cambios de DevSecOps.

El script lleva a cabo las tareas siguientes:

  • Intenta procesar los archivos adjuntos como resultados y crea problemas de incidencias a partir de dichos resultados. Se da soporte a un número limitado de formatos de salida de herramienta.
  • Si se encuentran problemas, el script evalúa sus periodos de gracia (fechas de vencimiento) y estados de exención.
  • Crea un activo de pruebas en el bloqueador de pruebas.
  • Crea la propia prueba y adjunta los problemas y los archivos adjuntos proporcionados.

Para un estado de success o failure, si no se pasa ningún archivo adjunto dentro de collect-evidence, los registros de interconexión para esa tarea en particular y la etapa se capturan como un archivo adjunto.

El script collect-evidence lo proporciona la interconexión. No es necesario instalarlo. El script tiene las siguientes dependencias:

  • bash
  • libstdc++ biblioteca compartida
  • libgcc biblioteca compartida

Asegúrese de que las dependencias estén instaladas en la imagen base que utiliza esta herramienta para notificar pruebas.

Arquitectura de comando CLI

La funcionalidad collect-evidence está disponible a través de dos interfaces:

  1. Shell Script Wrapper (collect-evidence): Interfaz de script bash tradicional que proporciona compatibilidad con versiones anteriores
  2. Comando CLI directo (cocoa locker evidence collect): Interfaz CLI nativa con acceso a todas las funciones

Versión Toggle

El script de shell collect-evidence admite dos versiones de implementación que pueden conmutarse mediante la propiedad de entorno collect-evidence-version:

Versión Implementación Estado Descripción
v1 Heredado Disponible Implementación original basada en bash con total compatibilidad con versiones anteriores
v2 Basado en CLI Valor predeterminado Implementación moderna que envuelve el comando CLI cocoa locker evidence collect

Uso

El script collect-evidence requiere los parámetros siguientes:

  • --tool-type El ID de la herramienta que proporciona datos de pruebas. Por ejemplo: «owasp-zap-ui», «cra»
  • --evidence-type El identificador del tipo de prueba. Por ejemplo: com.ibm.image_vulnerability_scan, com.ibm.unit_tests
  • --asset-key La clave en los activos de pipelinectl. Para los mandatos siguientes load_artifact <key> o load_repo <key>
  • --asset-type El tipo de activo de pipelinectl y puede ser uno de los tipos siguientes: repo, artifact
  • --status El estado de las pruebas y puede ser uno de los siguientes: success, pending, failure
  • --assets Especifique varios pares de clave de activo y tipo de activo. Por ejemplo, puede utilizar --assets asset-key1:asset-type1 --assets asset-key2:asset-type2. Si utiliza esta opción, no especifique la clave de activo y el tipo de activo por separado.

El siguiente parámetro es opcional:

  • --attachment El archivo que se procesará como resultado y se adjuntará a las pruebas. El parámetro se puede especificar varias veces para varios archivos. Para la firma de imágenes, asegúrese de que se adjunta el archivo de firma utilizando el parámetro --attachment. El archivo de firma debe incluir los detalles de la firma, como el ID de la clave, el algoritmo y el resumen firmado. Los formatos más habituales son JSON o TXT.
  • --meta Metadatos arbitrarios que se añadirán a las pruebas. El parámetro acepta pares 'clave = valor' y se puede especificar varias veces. Puede incluir metadatos relevantes para el proceso de firma de la imagen, como el entorno de firma o cualquier configuración específica utilizada durante la firma.
  • --additional-comment El comentario que se añade a un problema si una interconexión ha fallado.

Utiliza el siguiente comando para obtener ayuda:

collect-evidence --help

Valor de retorno

collect-evidence genera la serie de estado de pruebas evaluada en STDOUT (uno de success, failure o pending). Este valor evaluado depende de los archivos adjuntos de resultados procesados, los problemas de incidencias encontrados y la posible corrección de dichos problemas, por ejemplo, tener una fecha de vencimiento establecida o una etiqueta exenta. Para obtener más información, consulte Problemas de incidencia.

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

Cambio a v2 (implementación basada en CLI)

Para utilizar la nueva implementación basada en CLI, establezca la propiedad de entorno en su canalización:

collect-evidence-version=v2

Uso directo del comando CLI

cocoa locker evidence collect \
  --tool-type "sonarqube" \
  --evidence-type "com.ibm.static_scan" \
  --assets "app-repo:repo" \
  --status "success" \
  --attachment ./sonarqube-result.json \
  --pipeline-run-id "${PIPELINE_RUN_ID}" \
  --pipeline-namespace "ci" \
  --incident-org "my-org" \
  --incident-repo "compliance-issues"
cocoa locker evidence collect \
  --tool-type "detect-secrets" \
  --evidence-type "com.ibm.detect_secrets" \
  --assets "app-repo:repo" \
  --status "success" \
  --pipeline-run-id "${PIPELINE_RUN_ID}" \
  --pipeline-namespace "ci" \
  --incident-org "my-org" \
  --incident-repo "compliance-issues"
cocoa locker evidence collect \
  --tool-type "va" \
  --evidence-type "com.ibm.cloud.image_vulnerability_scan" \
  --assets "image-0:artifact" \
  --status "success" \
  --pipeline-run-id "${PIPELINE_RUN_ID}" \
  --attachment image-0_va-report.json \
  --pipeline-namespace "ci" \
  --incident-org "my-org" \
  --incident-repo "compliance-issues"

Para obtener una referencia completa del comando CLI y todos los parámetros disponibles, consulte la recopilación de pruebas de casilleros de cacao.

Uso de ejemplo

collect-evidence \
  --tool-type "sonarqube" \
  --evidence-type "com.ibm.static_scan" \
  --asset-type "repo" \
  --asset-key "app-repo" \
  --status "success" \
  --attachment ./sonarqube-result-1.json \
  --attachment ./sonarqube-result-2.json \
  --meta environment=staging
collect-evidence \
  --tool-type "ciso-code-signing" \
  --evidence-type "com.ibm.cloud.image_signing" \
  --asset-type "artifact" \
  --asset-key "signed-image" \
  --status "success" \
  --attachment ./signature.json \   # The signature details in JSON format
  --attachment "./${artifact}.fingerprint" \ #  The fingerprint is a hash value generated from the artifact, ensuring integrity and authenticity.
  --meta environment=production

Puede utilizar directamente el comando cocoa locker evidence collect:

cocoa locker evidence collect \
  --tool-type "sonarqube" \
  --evidence-type "com.ibm.static_scan" \
  --assets "app-repo:repo" \
  --status "success" \
  --attachment ./sonarqube-result.json \
  --pipeline-run-id "${PIPELINE_RUN_ID}" \
  --pipeline-namespace "ci" \
  --incident-org "my-org" \
  --incident-repo "compliance-issues"

Formatos de herramienta soportados

La implementación actual actualmente da soporte a las herramientas siguientes (proporcionadas como parámetro --tool-type ):

Nombre de la herramienta Descripción
cra IBM Analizador de riesgos de código
cra-cis IBM Analizador de riesgos de código CIS
va Vulnerability Advisor para IBM Cloud Container Registry
gosec GoLang Escáner de seguridad
xray JFrog Xray - Exploración de vulnerabilidades y seguridad de contenedores
owasp-zap Proxy de ataque OWASP Zed (ZAP)
owasp-zap-ui Interfaz de usuario de OWASP Zed Attack Proxy (ZAP UI)
sonarqube SonarQube escanear
peer-review Revisión inter pares
twistlock TwistLock
cims Escáner múltiple de imágenes de contenedores (CIMS)
mend Mend Scan
mend-sast Reparar el escaneo SAST
checkov Escaneo Checkov
cra-tf Analizador de riesgos de código para Terraform
tfsec Escáner de seguridad Terraform
fips-scanner Escáner FIPS (normas federales de tratamiento de la información)
detect-secrets Detección de secretos
ciso-code-signing Herramienta de firma de código CISO
sysdig Escaneo Sysdig
cyclonedx CycloneDX formato. La detección de herramientas para la gestión de incidencias se realizará a partir de los metadatos de CycloneDX aquí
grype Grype Scan

CycloneDX Metadata utiliza la detección de herramientas para la gestión de incidencias.

Si se llama al script collect-evidence con un tipo de herramienta que no está soportado, el script no intenta procesar los archivos adjuntos. Además, el manejo de problemas se omite y la recopilación de pruebas no se detiene.

Si el script proporciona un archivo adjunto desde una herramienta soportada, pero el archivo adjunto no se puede procesar, el manejo de problemas se omite y la recopilación de pruebas no se detiene.

Tipo de prueba

Puede establecer el tipo de pruebas utilizando el parámetro --evidence-type. Puede establecer cualquier tipo, pero IBM Cloud® Compliance Manager da soporte a los siguientes tipos de pruebas:

  • com.ibm.unit_tests
  • com.ibm.detect_secrets
  • com.ibm.branch_protection
  • com.ibm.static_scan
  • com.ibm.code_vulnerability_scan
  • com.ibm.code_bom_check
  • com.ibm.code_cis_check
  • com.ibm.cloud.image_vulnerability_scan
  • com.ibm.cloud.image_signing
  • com.ibm.dynamic_scan
  • com.ibm.cloud.image_signing
  • com.ibm.acceptance_tests
  • com.ibm.prod_change_request
  • com.ibm.close_change_reques

Recopilación de tipos de pruebas y cartografía de herramientas

Herramienta de apoyo a las pruebas
Tipo de prueba ID Herramienta compatible por defecto Origen Propiedad Activo recomendado Problemas
com.ibm.branch_protection cocoa-branch-protection IC Plataforma repo Cuestiones no relacionadas con incidentes
com.ibm.unit_tests jest Relaciones Públicas/Comunicación Corporativa Usuario repo Cuestiones no relacionadas con incidentes
com.ibm.detect_secrets detect-secrets PR/CI/CC Plataforma repo Incidentes y no incidentes
com.ibm.code_vulnerability_scan cra-tf, cra, mend
Para infraestructura como código: tfsec, checkov
IC Plataforma repo Incidentes y no incidentes
com.ibm.code_bom_check cra-bom, sbom-utility PR/CI/CC Plataforma repo Incidentes y no incidentes
com.ibm.code_cis_check cra-cis PR/CI/CC Plataforma repo Cuestiones no relacionadas con incidentes
com.ibm.peer_review peer-review IC Plataforma repo Cuestiones no relacionadas con incidentes
com.ibm.static_scan sonarqube, gosec
Para la infraestructura como código: terraform-fmt, terraform-validate, tflint
CI/CC Plataforma repo Incidentes y no incidentes
com.ibm.cloud.image_signing artifact-signing IC Plataforma repo Cuestiones no relacionadas con incidentes
com.ibm.acceptance_tests jest IC Usuario artefacto Cuestiones no relacionadas con incidentes
com.ibm.dynamic_scan owasp-zap, owasp-zap-ui IC Plataforma artefacto Incidentes y no incidentes
com.ibm.cloud.image_vulnerability_scan va, sysdig, xray CI/CC Plataforma artefacto Incidentes y no incidentes
com.ibm.prod_change_request gitlab CD Plataforma artefacto Cuestiones no relacionadas con incidentes
com.ibm.close_change_request gitlab CD Plataforma artefacto Cuestiones no relacionadas con incidentes
com.ibm.cloud.slsa tekton-chains IC Plataforma artefacto Cuestiones no relacionadas con incidentes
com.ibm.cloud.verify_signature ciso-code-signing CD Plataforma artefacto Cuestiones no relacionadas con incidentes
com.ibm.pipeline_logs N/D CI/CD/CC Plataforma N/D N/D
com.ibm.pipeline_run_data N/D CI/CD/CC Plataforma N/D N/D
com.ibm.network_compliance IC Plataforma repo Incidentes y no incidentes

Cuando falla un escaneado o cuando no se pueden analizar los archivos adjuntos, la herramienta crea automáticamente una incidencia sin incidencias para rastrear el fallo.

Requisitos de activos

Las pruebas que se recopilan con esta herramienta forman parte del trabajo de recopilación de pruebas de V2 y de las actualizaciones del casillero de pruebas relacionadas.

Este nuevo método se centra en las pruebas basadas en activos, lo que significa que las pruebas están conectadas al artefacto y al repositorio a través de las exploraciones y pruebas que se ejecutan en dichos artefactos o repositorios, y que han generado resultados para las pruebas. Por ejemplo:

  • Un repositorio con una determinada confirmación se convierte en un activo de confirmación, que se explora, creando pruebas para el activo de confirmación.
  • Utilizando el mismo repositorio y confirmación, se crea una imagen. La imagen se convierte en un activo relacionado con el activo de origen, el repositorio y la confirmación.
  • La imagen se explora y se crean pruebas. Todos los resultados de exploración se conectan a través de las pruebas, su activo y los activos relacionados.

Para que todo esto funcione conjuntamente, los activos que se proporcionan con los parámetros --asset-type y --asset-key deben cumplir algunos requisitos:

Activos de repo añadidos utilizando el mandato save_repo

Consulte la referencia de mandato para obtener información de uso exacta.

Campos obligatorios:

  • url El repositorio URL.
  • commit El SHA de confirmación.

Activos de artifact añadidos utilizando el mandato save_artifact

Consulte la referencia de mandato para obtener información de uso exacta.

Campos obligatorios:

  • name El nombre del artefacto. Por ejemplo, para una imagen incluya registro, espacio de nombres e imagen (ejemplo: us.icr.io/team-images/service).
  • digest El resumen del artefacto (ejemplo: sha256:a2292ed2b82c7a51d7d180c3187dbb0f7cc9ab385a68484c4f117e994acd6192).

Cambios necesarios en save_artefacto para no imágenes: Ahora la recopilación de pruebas da soporte a todos los tipos de activos. Para recopilar pruebas para trabajar en cualquier tipo de activo save_artifact Deberías guardar explícitamente el archivo con el formato « type », por ejemplo, en un archivo zip save_artifact artifact-1 type=zip .... En collect evidence script, el asset-type debe ser artefacto y el tipo se consulta desde el artefacto. Para que este proceso funcione, se ha modificado la adición de activos de casillero de cacao para añadir activos de cualquier tipo. Una vez guardado, el script de recopilación de pruebas se puede llamar como se indica a continuación:

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

Consulte nuestra aplicación de muestra para ver un ejemplo de implementación para deployment tipo https://us-south.git.cloud.ibm.com/open-toolchain/hello-compliance-app

Con estos cambios, el script de recopilación de pruebas procesa todos los tipos de artefactos, incluidos los artefactos de imagen y no de imagen.

Varios activos en recopilación-pruebas

Mediante el uso de las pruebas de recopilación, puede configurar la recopilación simultánea de pruebas para varios activos. La recopilación de pruebas se inicia utilizando el distintivo --assets, que especifica varios pares de clave de activo y tipo de activo. Por ejemplo, input --assets asset-key1:asset-type1 --assets asset-key2:asset-type2. Si elige esta opción, no indique la clave de activo y el tipo de activo por separado.

Recuerde estos puntos clave sobre la colección de varios activos:

  • status, attachment, tool-type, evidence-type y upload-logs son constantes en todos los activos.
  • De forma predeterminada, cuando designa varios activos, el proceso de pruebas sigue el flujo heredado. Si especifica un único activo, el proceso de pruebas se produce a través de un flujo específico de la herramienta o adjunto.
  • En caso de anomalía, se crean problemas por activo. Estos problemas se cierran cuando se vuelve a ejecutar correctamente la recopilación de pruebas. El cierre se correlaciona con los activos que ha especificado.
  • Se genera un archivo de pruebas singular, que cuenta con un ID que engloba todos los activos combinados.