Skip to main content

Encuentra y corrige vulnerabilidades en tu pipeline de CI/CD con Snyk y Harness

Escrito por

Pas Apicella

Martin Ansong

blog feature snyk harness

10 de diciembre de 2021

0 minutos de lectura

Cuando DevOps surgió hace más de diez años, el objetivo principal era cerrar las brechas entre los equipos de desarrollo y operaciones. Para lograrlo, se incorporó la automatización en los procesos de diseño, creación, prueba e implementación de aplicaciones.

Pero, a medida que los equipos de desarrollo siguen entregando software con mayor rapidez y frecuencia, a los equipos de seguridad les resulta difícil mantenerse al día. A menudo, se convierten en el cuello de botella del pipeline de entrega. Por eso, cada vez es más importante incorporar la seguridad desde el inicio del proceso de DevOps y adoptar una cultura de DevSecOps.

Integrar la plataforma de seguridad de Snyk, diseñada para desarrolladores, en el flujo de trabajo unificado del pipeline de entrega de Harness garantiza que las pruebas de seguridad y cumplimiento formen parte de cada lanzamiento. Así puedes evitar que las aplicaciones con dependencias y código vulnerables lleguen a producción. Con herramientas modernas como Snyk y Harness, puedes encontrar, corregir y remediar problemas mediante un pipeline de CI/CD, y mitigar los riesgos para el negocio sin afectar tu capacidad para lanzar software rápidamente.

Cómo empezar a usar Snyk

Snyk es una plataforma de seguridad para desarrolladores que facilita a los equipos encontrar, priorizar y corregir vulnerabilidades de seguridad en el código, las dependencias, los contenedores y la infraestructura como código. Se integra directamente en las herramientas, los flujos de trabajo y los pipelines de automatización de desarrollo.

Gracias a la inteligencia líder del sector en aplicaciones y seguridad, Snyk pone la experiencia en seguridad al alcance de todos los desarrolladores.

Empezar a usar Snyk es tan sencillo como registrarte para obtener una cuenta gratis.

Cómo empezar a usar Harness

Harness es la primera plataforma de entrega de software del sector que usa IA para simplificar tus procesos de DevOps: CI, CD, Feature Flags, gestión de costos en la nube y mucho más.

Harness te permite crear implementaciones complejas en minutos con plantillas reutilizables, lo que te ahorra tiempo y estrés. Con Harness, puedes crear pipelines en minutos.

Empezar a usar Harness es tan sencillo como visitar harness.io y crear una cuenta de prueba gratis.

Evita que las vulnerabilidades pasen por el proceso de compilación e implementación

La mejor manera de demostrar el poder combinado de Snyk y Harness es con una guía práctica que puedes configurar y ejecutar por tu cuenta. En este ejemplo, usaremos Snyk para mostrar cómo evitar que las vulnerabilidades pasen por el proceso de compilación e implementación al agregar pruebas automatizadas de Snyk a un flujo de trabajo de Harness.

Usaremos el siguiente repositorio de GitHub: https://github.com/mansong1/springbootemployee-api

Si quieres seguir los pasos, necesitarás lo siguiente:

  1. Una cuenta de Snyk

  2. Una cuenta de Harness

Este tutorial será más útil si antes completaste lo siguiente con Harness:

Si completaste o revisaste lo anterior, ya aprendiste a configurar un flujo de trabajo de CI en Harness.

Siete pasos para ejecutar pruebas de Snyk en Harness

Paso 1: Crea un token de API de Snyk como secreto

Necesitas un token de API de Snyk para ejecutar pruebas con Snyk CLI. Si eres cliente empresarial, puedes configurar cuentas de servicio y crear un token a través de Snyk App. Si tienes una cuenta de Snyk que no es empresarial, incluido nuestro plan gratis de Snyk, puedes usar el token de usuario principal.

A continuación, crea un secreto en Harness para guardar tu token de API de Snyk siguiendo estos pasos.

Paso 2: Crea un pipeline nuevo

1. Primero, crea un proyecto nuevo en Harness haciendo clic en +Project

Pantalla de bienvenida de Harness que muestra módulos de entrega de software y una flecha que apunta al botón «+ Project».

2. Cuando hayas creado el proyecto, ve al módulo Continuous Integration para crear un pipeline nuevo.

Página de Pipelines que muestra que no hay pipelines en el proyecto y destaca el botón «Create a Pipeline».

Paso 3: Agrega la base de código

Si esta es la primera etapa de CI del pipeline, activa Clone Codebase en la configuración de la etapa de CI. Si ya tienes un pipeline con una etapa de CI, haz clic en Codebase. Consulta Editar la configuración de Codebase.

Paso 4: Define la infraestructura de la granja de compilación

En la infraestructura de la etapa de CI, define la granja de compilación para Codebase. Consulta Configuración de la infraestructura de compilación de Kubernetes Cluster.

Paso 5: Configura una prueba Run Snyk

En CI Execution, haz clic en Add Step y luego en Run.

Menú de compilación que muestra las opciones Run, Plugin y Restore Cache From S3

El paso Run ejecuta uno o más comandos en una imagen de contenedor.

Snyk ofrece varias imágenes de contenedor que incluyen Snyk CLI y las herramientas pertinentes para distintos lenguajes de programación. En este ejemplo, usaremos la versión de Maven, ya que es la que se utiliza en esta aplicación de muestra.

Para configurar un paso Run, consulta Configuración del paso Run y agrega tu token de API de Snyk.

Panel de configuración opcional que muestra Privileged habilitado, rutas de informe opcionales y una variable de entorno con la clave SNYK_TOKEN.

Ahora puedes hacer referencia a esta variable de entorno en la sección Command de la configuración.

Panel «Configurar paso de ejecución» de Snyk Pipeline Studio que muestra una imagen de Docker de Snyk Test y comandos para configurar el token de API y ejecutar snyk test.

Paso 6: Ejecuta el pipeline

Ahora puedes ejecutar el pipeline.

1. Haz clic en Save and Publish.

2. Haz clic en Run. Aparecerá la configuración de Pipeline Inputs.

3. En CI Codebase, haz clic en Git Branch.

4. En Git Branch, escribe el nombre de la rama donde está Codebase, por ejemplo, master.

Cuadro de diálogo Ejecutar pipeline que muestra la configuración de la base de código de CI, con la rama de Git seleccionada y configurada como master.

5. Haz clic en Run Pipeline.

Paso 7: Consulta la ejecución del pipeline

Cuando se ejecuta el flujo de trabajo, el paso Test de Snyk falla porque el proyecto incluye dependencias vulnerables. También puedes hacer clic en el selector Console View para ver el informe completo.

Nota: Para tener más control sobre las pruebas, puedes pasar la marca severity-threshold al comando snyk test con una de las opciones admitidas (low|medium|high|critical). Con esta marca, solo se informará sobre las vulnerabilidades del nivel especificado o superior.

Pipeline de Snyk Test marcado como fallido, con las etapas Initialize, Git clone y Snyk Test, junto a un registro de error de vulnerabilidad.

Todo el pipeline también está disponible como YAML. En Builds:

  1. Haz clic en More Options.

  2. Selecciona Edit Pipeline.

  3. Haz clic en YAML.

Interfaz de Pipeline Studio que muestra las pestañas Visual y Yaml, con Yaml seleccionada

A continuación, puedes ver todo el pipeline como YAML. Puedes editar cualquier elemento del pipeline y volver a ejecutarlo.

pipeline:
  stages:
      - stage:
            type: CI
            spec:
                infrastructure:
                    type: KubernetesDirect
                    spec:
                        connectorRef: org.GKE
                        namespace: harness-builds
                execution:
                    steps:
                        - step:
                              type: Run
                              spec:
                                  connectorRef: org.Dockerhub
                                  image: snyk/snyk-cli:1.745.0-maven-3.5.4
                                  command: |-
                                      snyk config set api=$SNYK_TOKEN
                                      snyk test
                                  privileged: true
                                  envVariables:
                                      SNYK_TOKEN:  <+secrets.getValue("org.SNYK_TOKEN")>
                                  resources:
                                      limits:
                                          memory: 1Gi
                                          cpu: "1.0"
                              name: Snyk Test
                              identifier: Snyk_Test
                cloneCodebase: true
            name: CI
            identifier: CI
  properties:
      ci:
          codebase:
              repoName: springbootemployee-api
              connectorRef: org.Github
              build: <+input>
  projectIdentifier: Snyk
  orgIdentifier: default
  name: Snyk Test
  identifier: Snyk_Test
  description: Test local project for vulnerabilities.

Flujo de trabajo de CI/CD

Además de analizar las dependencias de las aplicaciones, la elección del contenedor también puede introducir vulnerabilidades. Asimismo, la configuración incorrecta de los atributos de los recursos en la nube contribuye a las vulnerabilidades más comunes que se explotan para acceder a datos y servicios en la nube.

En este ejemplo, compilaremos e implementaremos nuestra aplicación en Kubernetes y luego la monitorearemos con Snyk.

Para compilar y publicar un contenedor en Harness, solo tienes que seguir estos pasos. Agregar un paso de análisis con Snyk Container es similar al paso Snyk Test anterior.

Para implementar el contenedor en nuestro clúster de Kubernetes, consulta la documentación de Harness. En nuestro pipeline de CD, ejecutaremos la prueba de Snyk en el manifiesto de Kubernetes antes de hacerlo. Para agregar un paso snyk iac test, usa un paso Shell Script.

Configuración de Shell Script de Pipeline Studio que muestra un script Bash para clonar un repositorio y ejecutar pruebas de Snyk Infrastructure as Code

El script que se ejecuta en el paso de Snyk IaC es el siguiente:

rm -rf springbootemployee-api || true

git clone https://github.com/mansong1/springbootemployee-api
cd springbootemployee-api

SNYK_TOKEN=<+secrets.getValue("org.SNYK_TOKEN")>
snyk config set api=$SNYK_TOKEN
snyk iac test manifests/<+infra.namespace>/templates/*.yaml

El flujo de trabajo completo de CI/CD se ve así:

Pantalla de Snyk Pipelines que muestra una canalización exitosa de SpringBoot Employee API con etapas de CI, implementación en staging y pruebas de seguridad.
Panel de control del pipeline de Harness que muestra una implementación exitosa de SpringBoot Employee API en staging, con etapas de CI e implementación

Como antes, puedes ver este pipeline como YAML; está en este repositorio de GitHub.

Snyk se integra con Kubernetes y te permite importar y probar las cargas de trabajo en ejecución, además de identificar vulnerabilidades en las imágenes y configuraciones asociadas. Una vez importadas, Snyk sigue monitoreando esas cargas de trabajo e identifica nuevos problemas de seguridad a medida que se implementan imágenes y cambia la configuración de la carga de trabajo.

Una implementación exitosa mediante nuestro flujo de trabajo de CD de Harness se muestra así en la interfaz de Snyk:

Panel del proyecto que muestra api/deployment.apps/snyk-employee-api con recuentos por nivel de gravedad e imágenes de contenedor vinculadas
Panel de Snyk que muestra vulnerabilidades en implementaciones de Kubernetes, verificaciones fallidas de configuración de seguridad y un problema de inyección XXE de gravedad media.

Pruébalo ahora

Al elegir una plataforma tecnológica, es importante seleccionar una que priorice las necesidades de los desarrolladores en sus soluciones. También debe centrarse en remediar los problemas, no solo en informarlos. Las plataformas que priorizan a los desarrolladores pueden integrar la seguridad en todo el pipeline y ayudar a las distintas partes interesadas, como los equipos de desarrollo, seguridad y operaciones, a obtener una visión integral.Esto ayuda a fomentar una mentalidad compartida de DevSecOps y garantiza que los consumidores tengan acceso a software más seguro.

Muchas gracias por acompañarnos en este tutorial. ¡No olvides probar Snyk y Harness hoy mismo!

Protege la infraestructura desde el origen

Snyk automatiza la seguridad y el cumplimiento de IaC en los flujos de trabajo, y detecta recursos con desviaciones de configuración y recursos faltantes.

Acerca de los autores

Martin Ansong es ingeniero de soluciones en el área de ventas comerciales de Harness. Su trabajo consiste en ayudar a los clientes a acelerar la creación y entrega de su ciclo de vida de software.

Pas Apicella es ingeniero principal de soluciones para APJ en Snyk y trabaja con la plataforma de Snyk para ayudar a los clientes a proteger sus aplicaciones nativas de la nube y adoptar una cultura de DevSecOps, sin dejar de satisfacer las necesidades del negocio.