Editar

DevSecOps para infraestrutura como código (IaC)

Microsoft Sentinel
Azure Monitor
GitHub

Ideias de soluções

Este artigo é uma ideia de solução. Se você quiser que expandamos o conteúdo com mais informações, como possíveis casos de uso, serviços alternativos, considerações de implementação ou orientação de preços, informe-nos fornecendo feedback do GitHub.

Essa ideia de solução ilustra o pipeline do 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 comercial da Hashicorp. O uso desta marca não implica qualquer endosso.

Arquitetura

Diagrama que mostra a arquitetura do DevSecOps para IaC.

Transfira um ficheiro do Visio desta arquitetura.

Fluxo de dados

  1. Com o desenvolvimento orientado a testes, você faz check-in de 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 das Ações do GitHub.
  3. Você configura o processo de fluxo de trabalho de Ações do GitHub para testar a IaC com estados e planos de infraestrutura implantados localmente.
  4. Você configura as Ações do GitHub para verificar se há problemas de qualidade e segurança 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 detetada, 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 da 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 de reconciliação e a possibilidade 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 é detetada, um problema deve ser automaticamente levantado 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ão. 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 detetar configurações incorretas de infraestrutura.
  • Terraform é um produto parceiro desenvolvido pela HashiCorp que permite a automação de infraestrutura no Azure e em outros ambientes.
  • O Microsoft Defender for Cloud oferece gerenciamento de segurança unificado e proteção avançada contra ameaças em cargas de trabalho de nuvem híbrida.
  • O Microsoft Sentinel é um SIEM nativo da nuvem e uma solução de resposta automatizada de orquestração de segurança (SOAR). Ele usa IA avançada e análise de segurança para ajudá-lo a detetar e responder a ameaças em toda a sua empresa.
  • O Azure Policy ajuda as equipas a gerir e evitar problemas de TI com definições de políticas que podem impor regras aos recursos da cloud. Por exemplo, se o seu projeto estiver prestes a implantar uma máquina virtual com uma SKU não reconhecida, o Azure Policy alertará você sobre o problema e interromperá a implantação.
  • O Azure Monitor coleta e analisa a telemetria do aplicativo, como métricas de desempenho e logs de atividades. Quando esse serviço identifica condições irregulares, alerta aplicativos e 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 do teste de IaC quando sua carga de trabalho é dimensionada. Você pode usar estados de configuração de infraestrutura local, como estados Terraform e planos para desenvolver desenvolvimento controlado por teste (TDD) 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.

A política como código (PaC) também é um método importante para fornecer infraestrutura em conformidade com as regulamentações e a 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 ataques 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. Este processo é semelhante ao Static Application Security Testing (SAST).

Quando a infraestrutura é implantada e operacional, os desvios de configuração na 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 permitem a configuração manual do ambiente. Caso necessite de configurações manuais, eleve o acesso para o administrador designado e, em seguida, remova o acesso elevado assim que a alteração for modificada. Você deve configurar o Azure Monitor para levantar 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 detetar tráfego anormal. Essas ferramentas alertam automaticamente os administradores de segurança e levantam um problema no GitHub para atenção.

Potenciais casos de utilização

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 aterrissagem do Azure, usando DevSecOps para IaC para garantir a segurança e a qualidade das implantações. Você também deseja acompanhar e auditar todas as modificações na infraestrutura.

Contribuidores

Este artigo é mantido pela Microsoft. Foi originalmente escrito pelos seguintes contribuidores.

Principais autores:

  • Vito Chin - Brasil | Arquiteto de Soluções Cloud SR
  • Yee Shian Lee - Brasil | Arquiteto de Soluções Cloud SR

Próximos passos