Automatización de la seguridad de aplicaciones para repositorios de GitHub con Snyk
31 de marzo de 2021
0 minutos de lecturaSnyk ofrece una amplia variedad de integraciones y una API muy completa para que puedas implementar Snyk en todo el SDLC y monitorear todo el código que desarrolla tu organización.
Por supuesto, no siempre es sencillo.
A medida que creces, garantizar que Snyk monitoree todos tus repositorios se vuelve más difícil. Se agrega más código en forma de nuevos repositorios. Además, los repositorios existentes siguen cambiando. De pronto, las tareas de gestión de seguridad, como agregar nuevos proyectos a Snyk y actualizar los existentes, tardan demasiado y son ineficientes.
El equipo de AppSec de Snyk también usa Snyk con entusiasmo, así que nosotros también empezamos a encontrarnos con este obstáculo. Comenzamos a investigar flujos de trabajo alternativos, en particular para automatizar la seguridad de las aplicaciones, y pronto resolvimos nuestros desafíos de escalabilidad con herramientas basadas en la API de Snyk, diseñadas por el equipo de Tech Services.
¿Lo vemos más de cerca?
1. Extraer datos de GitHub
La primera herramienta que voy a presentar es snyk-api-import. Es muy potente, ya que permite importar automáticamente nuevos repositorios como proyectos a Snyk. Usa la API de Snyk para importar los repositorios automáticamente a un ritmo controlado y estable, mediante importaciones por lotes, manejo de errores e intentos automáticos.
La herramienta lee una lista de objetivos y los importa a Snyk. Luego, usa la API para comprobar el estado de la importación.
Para usar la herramienta, primero tenemos que generar una lista de objetivos para importar. Cada objetivo consta de tres parámetros:
El identificador de la organización: la organización de Snyk a la que se importarán los objetivos
El identificador de la integración: el tipo de integración que se usará (GitHub/Bitbucket/Docker, etc.)
Los detalles del objetivo: en el caso de GitHub, serán el nombre del repositorio, el propietario y la rama específica que se analizará (para conocer otros parámetros, consulta la documentación)
Entonces, necesitamos escribir código que extraiga todos los repositorios de GitHub y genere un objetivo para cada uno. El resultado: unas pocas líneas de código:
La mayor ventaja de este fragmento es lo personalizable que es: puedes controlar a qué organización debe ir cada repositorio (según las políticas de tu grupo), qué repositorios ignorar, etc. ¡Y todo con solo unas pocas líneas de código!
Ahora podemos ejecutar snyk-api-import. Según la cantidad de repositorios, puede tardar un poco, pero al terminar, ¡Snyk cubrirá todo tu código!
2. Mantenerse al día con los cambios
Hicimos una importación inicial, pero ¿cómo nos aseguramos continuamente de que nuestros repositorios estén monitoreados? Una opción es ejecutar la misma herramienta todos los días, pero tardaría demasiado y sería bastante ineficiente.
Por suerte, snyk-api-import ofrece una solución: puede generar una lista de todos los proyectos importados y, al volver a ejecutarse, solo importa las diferencias. Así tarda mucho menos (por lo general, unos minutos, según cuántos repositorios se hayan agregado).
3. Actualizar proyectos existentes
Pero los cambios no se limitan a los nuevos repositorios. Los repositorios existentes también cambian con frecuencia. A veces se agregan o eliminan archivos de manifiesto, o simplemente se mueven entre repositorios. Estos cambios también deben reflejarse en los proyectos correspondientes administrados por Snyk.
Aquí es donde resulta útil otra herramienta: snyk-scm-refresh.
Esta herramienta se diseñó para garantizar que todos los proyectos de Snyk estén sincronizados con los repositorios correspondientes en GitHub. Puede detectar archivos de manifiesto nuevos, eliminar proyectos de manifiestos que ya no existen, actualizar proyectos cuando se cambia el nombre de un repositorio y detectar repositorios eliminados. ¡Genial!
4. Automatizar todo el proceso de principio a fin con CircleCI
Para usar estas herramientas, configuramos un trabajo sencillo de CircleCI que se ejecuta cada noche y hace lo siguiente:
Generar todos los objetivos a partir de GitHub
Ejecutar las herramientas de importación para generar la lista de proyectos que ya se importaron
Ejecutar la herramienta de importación para sincronizar los repositorios nuevos
Ejecutar la herramienta de actualización de SCM para sincronizar los repositorios existentes

El próximo desafío que planeamos resolver: el registro de contenedores. Es un problema similar, ¡pero un poco más complicado!
El poder de la automatización
Una API sólida es fundamental para adaptar las herramientas de seguridad a las necesidades específicas de tu organización. En este caso, la API de Snyk nos permitió agregar automatización para superar un desafío bastante complejo: garantizar que Snyk cubriera todos nuestros repositorios de código. Automatizar la importación y actualización de proyectos no solo garantizó la cobertura de seguridad, sino que también hizo el proceso más eficiente y nos ahorró el tiempo que, de otro modo, habríamos dedicado a tareas manuales.
Pero quizá lo más importante es que la API nos ayudó a adaptar Snyk a nuestros flujos de trabajo existentes. Esa flexibilidad nos permitió ahorrar un tiempo valioso que, de otro modo, habríamos dedicado a buscar una solución alternativa más complicada y que requiriera más recursos.



