Felipe Leme Dias - 32121BSI027
TDE 1 – Descrever detalhadamente o que são DevOps e DevSecOps.
DevOps integra os dois mundos de desenvolvimento e operações, usando
desenvolvimento automatizado, implantação e monitoramento de infraestrutura. É
uma mudança organizacional já que, em vez de distribuído em silos, os
grupos/equipes multifuncionais trabalham com entregas contínuas. Essa abordagem
ajuda a fornecer valor mais rápido e recorrente, reduzindo problemas ocasionados
pela falta ou falha de comunicação entre membros da equipe e acelerando a
resolução de problemas.
DevOps significa uma mudança de cultura em direção à colaboração entre
desenvolvimento, garantia de qualidade e operações, tanto que empresas como
Amazon e Google lideraram essa abordagem, alcançando um ciclo de vida de
produção de software e aplicações cada vez mais curtos. Obviamente, o tempo de
ciclo atingível depende das restrições ambientais e implantação consegue acelerar
bastante a produção de sistemas em uma organização.
DevOps pode ser aplicado a muito diferentes modelos de entrega, mas deve ser
adaptado ao meio ambiente e arquitetura do produto. No entanto, mesmo em tais
ambientes as atualizações podem ser planejadas e entregue rapidamente e de forma
confiável. Para organizações que desejam aumentar participação de mercado e
agregar valor mais rapidamente (ou mesmo apenas fornecer software com mais
segurança), o DevOps promove velocidade e estabilidade. Ele se desenvolveu como
um fenômeno proeminente da transformação digital nas organizações modernas,
que usam software para agregar valor a seus clientes em, como por exemplo,
bancos, varejo, e até manufatura.
DevOps combina atividades de desenvolvimento de software e entrega para
melhorar a velocidade de obter novos recursos de software para clientes. Isso leva a
uma maior satisfação do cliente final e rentabilidade para a organização que o adota.
Organizações e produtos de software variam em maturidade e implementação, mas
para o DevOps, o que realmente importa é a entrega de valor, ele deve incluir mais
do que apenas ferramentas e automação - tão simplesmente comprar e instalar uma
solução não é suficiente.
O DevOps aprimora a automação de aplicativos para provisionamento de
infraestrutura. Já entrega contínua suporta automação e permite um tempo de
comercialização mais rápida, além do desenvolvimento de software ágil com ciclos
rápidos de feedback. Em geral, a equipe do projeto se dissolve após uma nova
versão e a responsabilidade para executar o sistema é então "jogado por cima do
muro" para as operações. A equipe de operações assume responsabilidade por
novas mudanças e gerenciamento de incidentes. Isto leva a vários problemas: os
desenvolvedores não são responsáveis para executar o sistema que eles
construíram e portanto, não entendem os tradeoffs que aparecem na criação e
execução do sistema, principalmente na escalabilidade e confiabilidade do software.
Isso pode levar à perpetuação dos mesmos problemas em versões futuras do
software, mesmo que sejam bem compreendidos pelo equipe de operações. A
equipe de operações é responsável para manter o sistema altamente confiável e
estável. Cada nova linha implantada no software introduz mudanças e, portanto, leva
à instabilidade. Isso acarreta uma incompatibilidade dos desenvolvedores e introduz
riscos (instabilidade) e incertezas. Mesmo que novos componentes sejam de alta
qualidade, todo novo código adiciona complexidade ao sistema e risco do software
perder escalabilidade e confiabilidade em fatores chaves de operação.
Em empresas que não utilizam o DevOps, desenvolvedores e áreas de negócios, são
incapazes de receber qualquer feedback sobre desempenho até o primeiro
lançamento completo do software. E geralmente ocorrem vários meses após a
aprovação do projeto. Além disso, nem todos os recursos do software oferecem
valor e aceleraram o feedback para a equipe de desenvolvimento. Isso leva a perda
de tempo, retrabalho e recursos que não acabam agregar valor.
DevOps transforma a maneira como os produtos são gerenciados, eliminando
prazos finais fixos e promovendo a colaboração contínua entre equipes de
desenvolvimento, operações e stakeholders. O software é tratado como um produto
em constante evolução, com métricas de desempenho monitoradas regularmente. A
transição para DevOps pode ser complexa, envolvendo mudanças tecnológicas e
culturais, e requer liderança eficaz. A especialização técnica dá lugar a uma
compreensão mais ampla das operações, exigindo aprendizado e adaptação dos
profissionais. As empresas devem apoiar essa mudança com treinamento adequado,
considerando as diferentes atitudes dos funcionários em relação a essas mudanças.
Apesar dos desafios, muitas organizações têm superado obstáculos iniciais e
continuam a avançar no DevOps, buscando agilidade no mercado, melhorias
contínuas e estabilidade operacional, beneficiando tanto a empresa quanto seus
colaboradores.
DevSecOps é uma abordagem que integra a segurança como um componente
essencial das práticas DevOps. Enquanto DevOps se concentra na colaboração
entre equipes de desenvolvimento, teste e operações para alcançar a entrega
contínua, DevSecOps vai além, incorporando medidas de segurança em cada etapa
do ciclo de vida do desenvolvimento de software.
O processo genérico de DevOps permite o desenvolvimento de aplicativos em um
tempo mais rápido, alinhando equipes de desenvolvimento, testes e operações. No
entanto, a segurança muitas vezes não está integrada desde o início, o que pode
resultar em vulnerabilidades e riscos de segurança. É aqui que o DevSecOps
desempenha um papel crucial.
Em um ambiente típico de DevOps, o desenvolvedor escreve o código e o envia
para um repositório de código central. O servidor de CI/CD extrai o código, realiza
testes e implanta os artefatos construídos em ambientes de teste e produção. No
entanto, a segurança geralmente é adicionada manual ou automaticamente no final
do processo, o que pode resultar em altos custos e riscos de segurança.
Para evitar esses problemas, o DevSecOps integra a segurança em todas as etapas
do ciclo de vida do desenvolvimento de software. Isso inclui medidas como análise
estática de código, verificação de dependências, e testes dinâmicos de segurança
de aplicativos. Ao detectar e corrigir problemas de segurança desde o início do
processo, os custos são reduzidos, a velocidade de entrega é aumentada e o risco é
mitigado. Contudo, é sobre mover a segurança para a esquerda, incorporando-a
desde o início do ciclo de vida do desenvolvimento de software. Isso garante que os
aplicativos sejam construídos e implantados com segurança, proporcionando maior
confiabilidade e proteção contra ameaças e vulnerabilidades.
No contexto de microservices, a maioria desses serviços interage por meio de APIs,
o que ressalta a importância de garantir a segurança em várias camadas. Além
disso, é fundamental realizar a verificação contínua das imagens baixadas do
Docker, pois sua procedência pode ser desconhecida, tornando-as potencialmente
vulneráveis. Para isso, faz-se uso de ferramentas de escaneamento contínuo para
verificar se os contêineres estão sendo executados como root e se estão utilizando
as versões mais recentes das imagens.
Outro aspecto crucial é a segurança em tempo de execução, que envolve a
monitorização contínua das aplicações e do cluster em busca de anomalias. Como
novas vulnerabilidades e CVEs são descobertos diariamente, é essencial submeter
as aplicações a esses processos de verificação continuamente, a fim de identificar e
mitigar novas ameaças.
No que diz respeito à integração de segurança em diferentes estágios do pipeline de
desenvolvimento, podemos adotar diversas práticas. No ambiente de
desenvolvimento, podemos implementar ganchos de pré-commit ou pré-publicação
nas estações de trabalho dos desenvolvedores para realizar testes que verifiquem a
presença de dados sensíveis antes de permitir o envio do código para o sistema de
gerenciamento de código-fonte.
No lado do gerenciamento de código-fonte, podemos considerar a criptografia de
segredos ou o uso de ferramentas de gestão de segredos, como o HashiCorp Vault.
Durante a fase de testes, podemos executar testes unitários regulares seguidos de
testes de mutação para verificar a correção dos testes unitários, além de realizar
análise estática de código para avaliar a cobertura do código, possíveis problemas
de qualidade e duplicações de código.
Antes ou durante a fase de construção, é essencial testar as dependências utilizadas
na aplicação em busca de vulnerabilidades. Quando se trata de construir imagens
Docker, devemos escanear as imagens em busca de assinaturas e verificar os
arquivos Docker para identificar configurações inadequadas
Durante o deploy ou etapas de staging, validamos as assinaturas das imagens para
garantir que estamos executando a imagem correta e realizamos testes de
integração antes de promover a aplicação para um ambiente de produção. Também
é importante realizar testes dinâmicos de segurança de aplicativos para testar a
segurança das interfaces de API e realizar varreduras de conformidade de
infraestrutura para validar as configurações do runtime e do cluster.
Além disso, é crucial monitorar tanto os logs da aplicação quanto os logs de
segurança para analisar e mitigar problemas em tempo real. Em relação à
segurança, aspectos como regras de acesso, SELinux, AppArmor, políticas de rede,
autenticação mútua e auditorias são importantes para garantir a segurança holística
do sistema.
Referências:
[Link]
[Link]
oFonteTV
[Link]