A cada dia as organizações são obrigadas a entregar novas features de software com qualidade e agilidade impressionantes. Se não bastasse as features ainda é necessário entregar toda a infraestrutura de suporte e capacidade de entrega aos seus usuários. Até pouco tempo atrás a única maneira de se fazer isso era contar com um time grande de experientes SysAdmins suportando um outro grande time de desenvolvimento. Hoje as empresas são impulsionadas por cases de sucesso em grandes empresas como Facebook, Google, Netflix, entre outras e começam a adotar as práticas de DevOps.
O que é DevOps?
DevOps são práticas de entrega contínua com base em automação de processos que geralmente são executados um a um por desenvolvedores e/ou SysAdmin. Por isso o nome DevOps (Desenvolvedor Operador). Confesso que ao presenciar alguns profissionais falando sobre o tema eu logo fiquei assustado. Como assim desenvolvedor que faz papel de SysAdmin? Logo achei que era um desenvolvedor com super poderes e iria colocar tudo a perder metendo a mão na infraestrutura. Mas como sempre, a experiência faz você desfazer alguns pré-conceitos e foi o que aconteceu comigo.
Com o tempo ficou claro que a adoção da prática por especialistas em infraestrutura e desenvolvimento é um processo altamente benéfico e com resultados impressionantes.
Quais processos geralmente são automatizados?
As práticas de DevOps agregam automação as disciplinas de engenharia e qualidade de software e práticas de infraestrutura como as práticas a seguir:
- Integração Contínua: defina um conjunto de requisitos como checagem de padrões, testes unitários entre outros e tenha o feedback instantâneo se o código gerado está íntegro e atendeu todos os critérios estabelecidos.
- Deploy Contínuo: através de um servidor de CI (Continuous Integration) como Jenkins você pode entregar novos releases de software em produção a partir de eventos agendados pós processo de Integração Contínua;
- Provisionamento: já imaginou subir uma série de servidores completamente configurados automaticamente a partir de um evento? É isso que faz o provisionamento através de scripts denominados receitas em soluções como Puppet e Chef;
- Gestão de Configuração: com as mesmas receitas usadas em provisionamento é possível administrar configurações de todo o seu parque de servidores e serviços. Garantindo uma padronização de configurações e monitorando todas as configurações ativas no ambiente. Esse processo é também conhecido como Security Configuration Management (SCM).
As possibilidades de automação são inúmeras e irão colaborar e muito no processo de gestão do ambiente e liberação de releases com agilidade e qualidade. O Conviso Armature é uma solução de Security Configuration Management (SCM) e se integra completamente as práticas de DevOps.
Onde se encaixa a segurança de aplicações?
As práticas de segurança de aplicações podem ser inseridas dentro de todas as práticas de automação mencionadas:
- Integração Contínua: ferramentas SAST (Static Application Security Testing) podem ser integradas para executar análise de vulnerabilidades no código fonte;
- Deploy Contínuo: ferramentas DAST (Dynamic Application Security Testing) podem ser integradas para executar análises dinâmicas de vulnerabilidades em aplicações que foram publicadas em homologação e/ou produção;
- Provisionamento: defina baselines de configuração de segurança e suba servidores e serviços adequadamente configurados;
- Gestão de Configuração: acompanhe as configurações para identificar se as configurações estão adequadas ou mudanças indevidas não foram realizadas no ambiente comprometendo a conformidade dos baselines estabelecidos.
Muitas outras práticas podem ser adotadas a partir de eventos de automação, como por exemplo um workflow de validação e testes manuais após todo o processo de análise automatizada.
Compareça a BSides São Paulo e confira a minha palestra: Integrando testes de segurança ao processo de desenvolvimento de software.