DevSecOps para iac (infraestrutura como código)

Microsoft Sentinel
Azure Monitor
GitHub

Ideias de soluções

Esse artigo é uma ideia de solução. Caso deseje que ampliemos o conteúdo com mais informações, como possíveis casos de uso, serviços alternativos, considerações sobre implementação ou diretrizes de preços, fale conosco enviando seus comentários no GitHub.

Essa ideia de solução ilustra o pipeline de DevSecOps usando o GitHub para IaC e como controlar o fluxo de trabalho para excelência operacional, segurança e otimização de custos.

Terraform é uma marca registrada da Hashicorp. Nenhum endosso é implícito pelo uso dessa marca.

Arquitetura

Diagrama que mostra a arquitetura de DevSecOps para IaC.

Baixe um Arquivo Visio dessa arquitetura.

Fluxo de dados

  1. Com o desenvolvimento orientado a testes, você faz check-in das alterações de código para definições de infraestrutura, como modelos IaC, em repositórios do GitHub. Você desenvolve testes de unidade, testes de integração e PaC ao mesmo tempo para testar a qualidade do IaC.
  2. As solicitações pull (PRs) acionam testes de unidade automatizados por meio de ações do GitHub.
  3. Você configura o processo de fluxo de trabalho Ações do GitHub para testar o IaC com estados e planos de infraestrutura implantados localmente.
  4. Você configura as Ações do GitHub para verificar se há problemas de segurança e qualidade do código. Em seguida, você usa ferramentas de verificação de segurança criadas no CodeQL do GitHub para verificar vulnerabilidades de segurança no IaC. Se uma vulnerabilidade for detectada, o GitHub enviará alertas para a organização ou para os proprietários e mantenedores do repositório.
  5. A ferramenta IaC provisiona e modifica recursos para cada ambiente, adaptando tamanho, contagem de instâncias e outras propriedades. Você pode executar testes de integração automatizados para IaC em recursos provisionados.
  6. Quando uma atualização manual para a infraestrutura é necessária, o acesso de administrador designado é elevado para executar as modificações. Após a modificação, o acesso elevado é removido e um problema deve ser registrado no GitHub para reconciliação do IaC. As etapas e a possibilidade de reconciliação dependem das ferramentas específicas do IaC.
  7. O SecOps monitora e defende continuamente contra ameaças e vulnerabilidades de segurança. A Política do Azure impõe a governança da nuvem.
  8. Quando uma anomalia é detectada, um problema deve ser gerado automaticamente no GitHub para retificações.

Componentes

  • O GitHub é uma plataforma de hospedagem de código para controle de versão e colaboração. Um repositório de controle de origem do GitHub contém todos os arquivos de projeto e seu histórico de revisões. Os desenvolvedores podem trabalhar juntos para contribuir, discutir e gerenciar código no repositório.
  • O GitHub Actions fornece um conjunto de fluxos de trabalho de compilação e lançamento que abrange integração contínua (CI), testes automatizados e implantações de contêiner.
  • O GitHub Advanced Security fornece recursos para proteger seu IaC. Requer outra licença.
  • O CodeQL fornece ferramentas de verificação de segurança que são executadas em código estático para detectar configurações incorretas de infraestrutura.
  • O Terraform é um produto do parceiro desenvolvido pela HashiCorp que permite a automação de infraestrutura no Azure, no local e em outros ambientes
  • O Microsoft Defender para Nuvem oferece um gerenciamento de segurança unificado e proteção avançada contra ameaças em cargas de trabalho de nuvem híbrida.
  • O Microsoft Sentinel é uma solução nativa de nuvem, SIEM e de orquestração de segurança, automação e resposta (SOAR). Ele usa IA avançada e análises de segurança para ajudá-lo a detectar e responder a ameaças em sua empresa.
  • O Azure Policy ajuda você a gerenciar e impedir problemas de TI com definições de políticas que podem impor regras para seus recursos de nuvem. Por exemplo, se um projeto estiver prestes a implantar uma máquina virtual com um SKU não reconhecido, o Azure Policy enviará alertas sobre o problema e interromperá a implantação.
  • O Azure Monitor coleta e analisa a telemetria de aplicativo, como métricas de desempenho e logs de atividades. Quando este serviço identifica condições irregulares, alerta os aplicativos e o pessoal.

Detalhes do cenário

Conceitualmente, o DevSecOps para infraestrutura como código (IaC) é semelhante ao DevSecOps para código de aplicativo no AKS. Mas você precisa de um conjunto diferente de pipelines e ferramentas para gerenciar e automatizar a integração contínua e a entrega contínua (CI/CD) para IaC.

Quando você adota o IaC, é importante criar testes de automação à medida que desenvolve o código. Esses testes reduzem a complexidade de testar o IaC quando sua carga de trabalho é dimensionada. Você pode usar estados de configuração de infraestrutura local, como estados Terraform e planos para desenvolver TDD (desenvolvimento orientado a teste) para IaC. Esses estados de configuração emulam as implantações reais. Você pode executar testes de integração para IaC em implantações de infraestrutura reais usando a API REST do Azure Resource Graph.

Policy as Code (PaC) também é um método importante para fornecer infraestrutura em conformidade com regulamentos e governança corporativa. Você pode adicionar fluxos de trabalho PaC em seus pipelines para automatizar a governança da nuvem.

Proteger a infraestrutura no início do estágio de desenvolvimento reduz os riscos de configuração incorreta da infraestrutura que abre pontos para ataque após a implantação. Você pode integrar ferramentas de análise de código estático para infraestrutura como Synk ou Aquasecurity tfsec usando o CodeQL do GitHub, para verificar problemas de segurança no código de infraestrutura. Esse processo é semelhante ao SAST (Static Application Security Testing).

Quando a infraestrutura é implantada e operacional, os desvios de configuração da nuvem podem ser difíceis de resolver, especialmente em ambientes de produção.

Configure entidades de serviço dedicadas para implantar ou modificar a infraestrutura de nuvem para ambientes de produção. Em seguida, remova todos os outros acessos que permitam a configuração manual do ambiente. Caso você precise de configurações manuais, eleve o acesso para o administrador designado e remova o acesso elevado assim que a alteração for modificada. Você deve configurar o Azure Monitor para gerar um problema no GitHub para que os desenvolvedores reconciliem as alterações. No entanto, a configuração manual deve ser evitada, se possível.

É importante monitorar continuamente o ambiente de nuvem em busca de ameaças e vulnerabilidades para evitar incidentes de segurança. Você pode usar as ferramentas de proteção contra ameaças e gerenciamento de eventos e informações de segurança (SIEM) para detectar tráfego anormal. Essas ferramentas alertam automaticamente os administradores de segurança e levantam um problema no GitHub para atenção.

Possíveis casos de uso

Você faz parte de uma equipe central de desenvolvedores IaC que usa uma estratégia multicloud para a empresa fictícia Contoso. Você deseja implantar a infraestrutura de nuvem em uma nova zona de destino do Azure, usando DevSecOps para IaC para garantir a segurança e a qualidade das implantações. Você também deseja controlar e auditar todas as modificações na infraestrutura.

Colaboradores

Esse artigo é mantido pela Microsoft. Ele foi originalmente escrito pelos colaboradores a seguir.

Principais autores:

  • Vito Chin | Arquiteto de Soluções em Nuvem Sênior
  • Yee Shian Lee | Arquiteta de Soluções em Nuvem Sênior

Próximas etapas