Automação de segurança de aplicações para repositórios do GitHub com a Snyk
31 de março de 2021
0 minutos de leituraA Snyk oferece uma ampla variedade de integrações e uma API bastante completa para permitir que você implemente a Snyk em todo o SDLC e monitore todo o código que sua organização desenvolve.
É claro que nem sempre é simples.
Em grande escala, fica mais difícil garantir que a Snyk monitore todos os seus repositórios. À medida que sua organização cresce, mais código é adicionado na forma de novos repositórios. Além disso, os repositórios existentes continuam mudando. De repente, operações de segurança como adicionar novos projetos à Snyk e atualizar os existentes levam tempo demais e se tornam ineficientes.
A equipe de AppSec da Snyk também usa a Snyk com satisfação e, por isso, nós também começamos a enfrentar esse obstáculo. Investigamos fluxos de trabalho alternativos, especialmente para automatizar a segurança de aplicações, e logo superamos os desafios de escala com ferramentas baseadas na API da Snyk, desenvolvidas pela equipe de Tech Services.
Vamos conferir de perto?
1. Vasculhando o GitHub
A primeira ferramenta que vou apresentar é snyk-api-import. Ela é muito poderosa, pois pode importar automaticamente novos repositórios como projetos para a Snyk. A ferramenta usa a API da Snyk para importar os repositórios automaticamente, em um ritmo controlado e estável, com importação em lotes, tratamento de erros e novas tentativas automáticas.
A ferramenta lê uma lista de alvos e os importa para a Snyk. Em seguida, usa a API para verificar o status da importação.
Para usar a ferramenta, primeiro precisamos gerar uma lista de alvos para importar. Cada alvo consiste em três parâmetros:
O identificador da organização — a organização da Snyk para a qual os alvos serão importados
O identificador da integração — o tipo de integração a ser usado (GitHub/Bitbucket/Docker etc.)
Os detalhes do alvo — no caso do GitHub, o nome e o proprietário do repositório, além da branch específica a ser analisada (para saber mais sobre parâmetros adicionais, consulte a documentação)
Então, precisamos escrever um código que vasculhe todos os repositórios no GitHub e gere um alvo para cada um. O resultado: algumas linhas de código:
O grande diferencial deste trecho de código é a flexibilidade: você pode controlar a qual organização cada repositório deve ser atribuído (de acordo com as políticas do seu grupo), quais repositórios ignorar e muito mais. E tudo isso com apenas algumas linhas de código!
Agora podemos executar o snyk-api-import. Dependendo do número de repositórios, isso pode levar um tempo, mas, quando terminar, todo o seu código estará protegido pela Snyk!
2. Acompanhando as mudanças
Fizemos uma importação única, mas como garantir que nossos repositórios continuem sendo monitorados? Uma opção é executar a mesma ferramenta todos os dias, mas isso demoraria demais e seria bastante ineficiente.
Felizmente, o snyk-api-import oferece uma solução: ele pode gerar uma lista de todos os projetos importados e, quando executado novamente, importa apenas as diferenças, levando muito menos tempo (geralmente alguns minutos, dependendo de quantos repositórios foram adicionados).
3. Atualizando projetos existentes
Mas as mudanças não se limitam à criação de novos repositórios. Os repositórios existentes também mudam com frequência. Às vezes, arquivos de manifesto são adicionados, removidos ou simplesmente movidos entre repositórios. Essas mudanças também precisam ser refletidas nos projetos correspondentes gerenciados pela Snyk.
É aí que outra ferramenta é muito útil: snyk-scm-refresh.
Essa ferramenta foi criada para garantir que todos os projetos na Snyk estejam sincronizados com os repositórios correspondentes no GitHub. Ela detecta novos arquivos de manifesto, remove projetos referentes a manifestos que não existem mais, atualiza projetos quando um repositório é renomeado e identifica repositórios excluídos. Muito bom!
4. Automatizando todo o processo de ponta a ponta com CircleCI
Para usar essas ferramentas, montamos uma tarefa simples no CircleCI, que é executada todas as noites e faz o seguinte:
Gera todos os alvos do GitHub
Executa as ferramentas de importação para gerar a lista de projetos já importados
Executa a ferramenta de importação para sincronizar novos repositórios
Executa a ferramenta scm refresh para sincronizar repositórios existentes

O próximo desafio que planejamos resolver: o registro de contêineres. É um problema parecido, mas um pouco mais complicado!
O poder da automação
Uma API robusta é fundamental para ampliar as ferramentas de segurança e adaptá-las às necessidades específicas da sua organização. Neste caso, a API da Snyk nos permitiu adicionar automações que ajudaram a superar um desafio bastante complexo: garantir que todos os repositórios de código estivessem realmente protegidos pela Snyk. Automatizar o processo de importação e atualização dos projetos não só garantiu a cobertura de segurança, como também tornou tudo mais eficiente e economizou o tempo que seria gasto em etapas manuais.
Talvez o mais importante seja que a API nos ajudou a integrar a Snyk aos fluxos de trabalho que já usávamos. Essa flexibilidade nos poupou um tempo valioso que, de outra forma, seria gasto tentando encontrar uma solução alternativa mais complexa e que consumisse mais recursos.



