Skip to main content

Encontre e corrija vulnerabilidades no seu pipeline de CI/CD com Snyk e Harness

Escrito por

Pas Apicella

Martin Ansong

blog feature snyk harness

10 de dezembro de 2021

0 minutos de leitura

Quando o DevOps surgiu, há mais de dez anos, o principal objetivo era aproximar as equipes de desenvolvimento e operações. Para isso, foram automatizados os processos de planejamento, criação, teste e implantação de aplicações.

Mas, à medida que as equipes de desenvolvimento entregam software com mais rapidez e frequência, as equipes de segurança têm dificuldade para acompanhar o ritmo. Muitas vezes, elas acabam se tornando um gargalo no pipeline de entrega. Por isso, é cada vez mais importante incorporar a segurança desde o início do processo de DevOps e adotar uma cultura DevSecOps.

Integrar a plataforma de segurança da Snyk, feita para desenvolvedores, ao fluxo de trabalho unificado do pipeline de entrega da Harness garante que os testes de segurança e conformidade façam parte de cada lançamento. Assim, você evita que aplicações com dependências e código vulneráveis cheguem à produção. Com ferramentas modernas como Snyk e Harness, você pode encontrar, corrigir e remediar problemas em todo o pipeline de CI/CD, reduzindo os riscos para o negócio sem comprometer a agilidade na entrega de software.

Primeiros passos com a Snyk

A Snyk é uma plataforma de segurança para desenvolvedores que facilita a identificação, a priorização e a correção de vulnerabilidades em código, dependências, contêineres e infraestrutura como código. Ela se integra diretamente às ferramentas, aos fluxos de trabalho e aos pipelines de automação usados no desenvolvimento.

Com o respaldo de inteligência de ponta em aplicações e segurança, a Snyk coloca conhecimento especializado em segurança ao alcance de qualquer desenvolvedor.

Começar a usar a Snyk é tão simples quanto criar uma conta gratuita.

Primeiros passos com a Harness

A Harness é a primeira plataforma de entrega de software do setor a usar IA para simplificar processos de DevOps — CI, CD, Feature Flags, gerenciamento de custos na nuvem e muito mais.

A Harness permite criar implantações complexas em minutos com modelos reutilizáveis, economizando tempo e reduzindo o estresse. Com a Harness, você cria pipelines em minutos.

Começar a usar a Harness é tão simples quanto acessar harness.io e criar uma conta de avaliação gratuita.

Impeça que vulnerabilidades passem pelas etapas de build e implantação

A melhor maneira de demonstrar o poder da combinação de Snyk e Harness é com uma demonstração prática que você pode configurar e executar por conta própria. Neste exemplo, vamos usar a Snyk para mostrar como impedir que vulnerabilidades passem pelas etapas de build e implantação, adicionando testes automatizados da Snyk a um fluxo de trabalho da Harness.

Vamos usar o seguinte repositório do GitHub: https://github.com/mansong1/springbootemployee-api

Para acompanhar, você precisará de:

  1. Uma conta da Snyk

  2. Uma conta da Harness

Este tutorial será mais útil se você já tiver concluído os seguintes materiais da Harness:

Se você já concluiu ou revisou os materiais acima, aprendeu a configurar um fluxo de trabalho de CI na Harness.

Sete etapas para executar testes da Snyk na Harness

Etapa 1: crie um token de API da Snyk como segredo

Você precisa de um token de API da Snyk para executar testes com a CLI da Snyk. Clientes corporativos podem configurar contas de serviço e criar um token pelo Snyk App. Se você usa uma conta da Snyk que não é corporativa, inclusive o plano gratuito, pode usar seu token de usuário principal.

Em seguida, siga estas etapas para criar um segredo na Harness e armazenar seu token de API da Snyk.

Etapa 2: crie um novo pipeline

1. Primeiro, crie um novo projeto na Harness clicando em +Project

Tela de boas-vindas do Harness mostrando módulos de entrega de software e uma seta apontando para o botão “+ Project”.

2. Depois de criar o projeto, acesse o módulo Continuous Integration para criar um novo pipeline.

Página de pipelines mostrando que não há pipelines no projeto e destacando o botão “Criar um pipeline”.

Etapa 3: adicione a base de código

Se este for o primeiro estágio de CI do pipeline, ative Clone Codebase nas configurações do estágio de CI. Se você já tiver um pipeline com um estágio de CI, clique em Codebase. Consulte Edit Codebase Configuration.

Etapa 4: defina a infraestrutura do ambiente de build

Na infraestrutura do estágio de CI, defina o ambiente de build da base de código. Consulte Kubernetes Cluster Build Infrastructure Setup.

Etapa 5: configure um teste da Snyk

Em CI Execution, clique em Add Step e depois em Run.

Menu de compilação exibindo as opções Executar, Plugin e Restaurar cache do S3

A etapa Run executa um ou mais comandos em uma imagem de contêiner.

A Snyk oferece várias imagens de contêiner que incluem a Snyk CLI e as ferramentas necessárias para diferentes linguagens. Neste exemplo, usamos a versão para Maven, já que ela é usada nesta aplicação de exemplo.

Para configurar uma etapa Run, consulte Run Step Settings e adicione seu token de API da Snyk.

Painel de configuração opcional mostrando Privileged ativado, caminhos opcionais para relatórios e uma variável de ambiente com a chave SNYK_TOKEN.

Agora você pode fazer referência a essa variável de ambiente na seção Command da configuração.

Painel Configurar etapa de execução do Snyk Pipeline Studio exibindo uma imagem Docker do Snyk Test e comandos para definir o token da API e executar o snyk test.

Etapa 6: execute o pipeline

Agora você pode executar o pipeline.

1. Clique em Save and Publish.

2. Clique em Run. As configurações de Pipeline Inputs serão exibidas.

3. Em CI Codebase, clique em Git Branch.

4. Em Git Branch, informe o nome da branch onde está a base de código, como master.

Caixa de diálogo Run Pipeline mostrando as configurações da base de código de CI, com Git Branch selecionado e a branch definida como master.

5. Clique em Run Pipeline.

Etapa 7: confira a execução do pipeline

Quando o fluxo de trabalho é executado, a etapa Test da Snyk falha porque o projeto inclui dependências vulneráveis. Você também pode clicar no botão Console View para ver o relatório completo.

Observação: Para ter mais controle sobre os testes, você pode passar a flag severity-threshold para o comando snyk test com uma das opções compatíveis (low|medium|high|critical). Com essa flag, serão reportadas apenas as vulnerabilidades do nível especificado ou superior.

Pipeline do Snyk Test marcado como reprovado, mostrando as etapas Initialize, Git clone e Snyk Test, além de um log de erro de vulnerabilidade.

Todo o pipeline também está disponível em YAML. Em Builds:

  1. Clique em More Options.

  2. Selecione Edit Pipeline.

  3. Clique em YAML.

Interface do Pipeline Studio com as abas Visual e Yaml, com Yaml selecionada

Abaixo, você pode ver todo o pipeline em YAML. Edite qualquer parte do pipeline e execute-o novamente.

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.

Fluxo de trabalho de CI/CD

Além de analisar dependências da aplicação, vulnerabilidades podem surgir da escolha do contêiner. Além disso, configurações incorretas de recursos na nuvem estão entre as principais causas de vulnerabilidades exploradas para acessar dados e serviços na nuvem.

Neste exemplo, vamos criar e implantar nossa aplicação no Kubernetes e, em seguida, monitorá-la com a Snyk.

Para criar e enviar um contêiner na Harness, basta seguir estas etapas. Adicionar uma etapa de análise do Snyk Container é semelhante à etapa Snyk Test acima.

Para implantar o contêiner no nosso cluster do Kubernetes, consulte a documentação da Harness. No nosso pipeline de CD, vamos executar o teste da Snyk no manifesto do Kubernetes antes da implantação. Para adicionar uma etapa snyk iac test, use uma etapa Shell Script.

Configuração de script de shell do Pipeline Studio exibindo um script Bash para clonar um repositório e executar testes do Snyk Infrastructure as Code

O script executado na etapa Snyk IaC é:

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

O fluxo de trabalho completo de CI/CD fica assim:

Tela do Snyk Pipelines mostrando um pipeline bem-sucedido da API de funcionários SpringBoot, com etapas de CI, implantação em staging e testes de segurança.
Painel do pipeline do Harness mostrando a implantação bem-sucedida da API Employee em Spring Boot no ambiente de staging, com etapas de CI e implantação

Como antes, você pode visualizar este pipeline em YAML. Ele está disponível neste repositório do GitHub.

A Snyk se integra ao Kubernetes, permitindo importar e testar cargas de trabalho em execução e identificar vulnerabilidades nas imagens e configurações associadas. Após a importação, a Snyk continua monitorando essas cargas de trabalho e identificando novos problemas de segurança à medida que novas imagens são implantadas e as configurações mudam.

Uma implantação bem-sucedida pelo nosso fluxo de trabalho de CD da Harness aparece na interface da Snyk assim:

Painel do projeto que lista api/deployment.apps/snyk-employee-api, com contagens por gravidade e imagens de contêiner vinculadas
Painel do Snyk mostrando vulnerabilidades em uma implantação do Kubernetes, verificações de configuração de segurança reprovadas e um problema de injeção XXE de gravidade média.

Experimente agora

Ao escolher uma plataforma tecnológica, é importante optar por uma que coloque as necessidades dos desenvolvedores no centro das soluções. Ela também deve priorizar a correção dos problemas, em vez de apenas reportá-los. Plataformas que priorizam os desenvolvedores podem integrar a segurança a todo o pipeline e oferecer uma visão abrangente a diferentes partes interessadas, como as equipes de desenvolvimento, segurança e operações.Isso ajuda a consolidar uma mentalidade compartilhada de DevSecOps e garante que os consumidores recebam softwares mais seguros.

Muito obrigado por acompanhar este tutorial. Não se esqueça de experimentar a Snyk e a Harness hoje mesmo!

Proteja a infraestrutura desde a origem

A Snyk automatiza a segurança e a conformidade de IaC nos fluxos de trabalho e detecta recursos com configurações divergentes ou ausentes.

Sobre os autores

Martin Ansong é engenheiro de soluções na área de vendas comerciais da Harness. Ele ajuda os clientes a acelerar a criação e a entrega de todo o ciclo de vida do software.

Pas Apicella é engenheiro principal de soluções da Snyk para a região APJ. Ele trabalha na plataforma Snyk para ajudar clientes a proteger suas aplicações nativas da nuvem e adotar uma cultura DevSecOps, sem deixar de atender às necessidades do negócio.