Skip to main content

Automatización de la seguridad de aplicaciones para repositorios de GitHub con Snyk

Escrito por
Snyk API

31 de marzo de 2021

0 minutos de lectura

Snyk 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:

import {Octokit} from '@octokit/rest';
import { paginateRest } from '@octokit/plugin-paginate-rest'
import * as fs from 'fs/promises'
const MyOctokit = Octokit.plugin(paginateRest);
const octokit = new MyOctokit({
 auth: process.env['GITHUB_TOKEN']
}) as Octokit;

(async () => {

 let response = await octokit.paginate("GET /orgs/{org}/repos", {
   Org: <your GitHub org>
 }, res =>
   res.data.filter(repo => !repo.fork && !repo.archived).map(repo => {
     return {
       orgId: <>,
       integrationId: <>,
       target: {
         name: repo.name,
         owner: <Your GitHUb Org>,
         branch: repo.default_branch ?? "master"
       }
   }})
 )

 console.log(`found: ${response.length} potential targets`)

 await fs.writeFile('targets.json', JSON.stringify({
   targets: response
 }))
})().catch(e => {
 console.error(e)
})

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

Flujo build_and_push de CircleCI que muestra una canalización exitosa con trabajos completados y sus duraciones

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.

Leer más

feature insights context
Blog

Los ataques autónomos ya están aquí. La defensa debe estar a su altura.

Los atacantes autónomos están reduciendo el tiempo disponible para defenderse. Descubre cómo el descubrimiento, la corrección, la validación y la prevención continuos pueden ayudar a los equipos de seguridad a seguirles el ritmo.

Blog

Por qué los agentes de programación con IA siguen generando fallas de control de acceso

Los agentes de programación con IA pueden generar lógica de autorización que compila y supera la revisión, pero expone los datos de un inquilino a otro. Descubre por qué es difícil detectar el control de acceso roto y cómo prevenirlo.

Blog

Evo ADS Govern Agent Behavior ya está disponible: controla el uso de MCP

Evo ADS Govern Agent Behavior ya está disponible, comenzando con MCP Governance. Descubre, aprueba, monitorea, registra y bloquea el uso de servidores MCP en los principales agentes de programación con IA.