Repository navigation
Guia DevSecOps
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.
- 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
| 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 |
| 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 |
- 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
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.
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.
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.
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.
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.
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.