Skip to content

Guia DevSecOps

Guilherme Lyare edited this page Apr 15, 2025 · 1 revision

1. Introdução

Este documento tem como objetivo orientar times de desenvolvimento, operações e segurança na adoção de práticas DevSecOps, promovendo a integração da segurança em todas as etapas do ciclo de vida do software. Ao adotar este guia, buscamos reduzir riscos, melhorar a qualidade do código e garantir entregas mais seguras e ágeis.

2. Princípios DevSecOps

  • Segurança como responsabilidade compartilhada
  • Automação de verificações de segurança
  • Correção rápida de vulnerabilidades
  • Cultura de colaboração
  • Monitoramento contínuo

3. Integração no Ciclo de Vida do Software

Etapa Práticas DevSecOps
Planejamento Análise de riscos, definição de requisitos de segurança
Desenvolvimento Linting seguro, SAST (Static Application Security Testing)
Build Gerenciamento de dependências, verificação de pacotes
Teste Testes automatizados de segurança (DAST, fuzzing)
Deploy Lançamento da aplicação na nuvem de forma automatizada
Operação Monitoramento, auditoria, alertas

4. Ferramentas Recomendadas

Categoria Ferramentas
SAST SonarQube, Semgrep
DAST OWASP ZAP, Burp Suite
Gerenciamento de dependências Snyk, Dependabot
Container Security Trivy, Anchore, Docker Scout
IaC Security Checkov, tfsec
CI/CD GitHub Actions, GitLab CI, Azure Pipelines
Monitoramento Prometheus, Grafana, ELK, Falco

5. Boas Práticas

  • Usar branches protegidos e políticas de pull request com revisão obrigatória
  • Aplicar verificações de segurança no pipeline de CI/CD
  • Fazer scans periódicos em containers e infraestrutura
  • Manter bibliotecas e pacotes sempre atualizados
  • Realizar treinamentos regulares sobre segurança para o time
  • Adotar o princípio do menor privilégio

6. Pipeline de CI/CD

Com base nos elementos anterirores essa é a estrututra que deve guiar o time de desenvolvimento do pe-estudantes. A entrega e integração contínua são práticas fundamentais no ciclo de desenvolvimento de software moderno. Elas viabilizam o desenvolvimento iterativo, garantindo que novas funcionalidades sejam testadas e entregues com rapidez e confiabilidade. Com essa abordagem, asseguramos que cada entrega siga critérios rigorosos de qualidade e segurança, o que fortalece a estabilidade das versões em produção e aumenta a confiança dos times e usuários. Além disso, essa prática permite identificar e corrigir falhas com agilidade, promovendo um ciclo de desenvolvimento colaborativo, seguro e eficiente.

6.1 User Stories

O processo tem início com o Product Owner (PO) criando User Stories que são registradas como issues no GitHub. Essas histórias descrevem claramente as funcionalidades e requisitos do sistema, oferecendo ao time de desenvolvimento uma visão alinhada das demandas. O uso das issues no GitHub permite organizar o backlog e acompanhar o progresso de maneira eficiente e transparente.

6.2 Desenvolvimento

Nesta fase, a equipe de desenvolvimento realiza commits de código em branches específicas, baseadas nas issues criadas. O fluxo segue o GitHub Flow, onde:

  • Cada nova funcionalidade ou correção de bug é feita em uma branch separada.
  • Após o desenvolvimento, a equipe abre um Pull Request (PR), que será revisado por outros desenvolvedores para garantir a qualidade do código.
  • Se aprovado, o código é mesclado ao branch principal (Main).

Esse processo promove uma abordagem colaborativa, permitindo que o código passe por revisão antes de ser integrado à base de código principal.

6.3 Testes e Build Pack

Durante o processo de integração contínua, as GitHub Actions são acionadas automaticamente sempre que um novo commit é realizado ou um Pull Request é criado. Elas são responsáveis por automatizar as tarefas de:

  • Lint: Validação do estilo de código utilizando ferramentas como o ESLint.
  • SAST (Static Application Security Testing): A análise de segurança estática é realizada pelo SonarQube, que verifica vulnerabilidades no código sem executar o sistema.
  • Build de Imagem: Após a verificação de estilo e segurança, é feito o build da imagem da aplicação.

A imagem gerada passa por uma série de testes automatizados que garantem a qualidade do sistema:

  • Testes Unitários: Verificam o funcionamento correto de unidades individuais de código (funções, classes, etc.).
  • Testes de Integração: Avaliam a interação entre diferentes partes do sistema.
  • Testes de Sistema (End-to-End): Simulam a experiência do usuário ao utilizar o sistema completo.
  • Testes de Performance: Medem o desempenho da aplicação sob diferentes cargas.

Após os testes, a imagem é analisada com as ferramentas Snyk e Trivy, que realizam a varredura em busca de vulnerabilidades conhecidas em dependências e containers.

O OWASP ZAP (Zed Attack Proxy) é utilizado para realizar o DAST, testando a segurança da aplicação em execução e identificando vulnerabilidades dinâmicas.

A imagem aprovada é então enviada para o Docker Hub, que serve como Container Registry, armazenando as versões prontas da aplicação para o deploy.

6.4 Deploy e Monitoramento

O deploy da aplicação ocorre na Cloud (não definida), que fornece a infraestrutura necessária para execução da aplicação em produção. Após o deploy, o sistema entra em fase de monitoramento contínuo com Grafana + Prometheus.

  • O Prometheus coleta dados de performance e uso de recursos da aplicação.
  • O Grafana permite a visualização dos dados com dashboards personalizados e alertas em tempo real.

Essa abordagem ajuda a rastrear o desempenho, identificar falhas e manter a segurança da aplicação em produção de forma proativa.

7. Conclusão

Este guia fornece uma base sólida para estruturar pipelines modernos, com automações eficazes e ferramentas especializadas que reforçam a qualidade do código e a resiliência da aplicação em produção. A aplicação contínua dessas práticas contribui não apenas para a segurança técnica, mas também para a maturidade organizacional no tratamento de riscos e resposta a incidentes.

DevSecOps não é apenas uma metodologia, mas um compromisso contínuo com a excelência em engenharia de software segura.

Clone this wiki locally