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
Baixe um Arquivo Visio dessa arquitetura.
Fluxo de dados
- 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.
- As solicitações pull (PRs) acionam testes de unidade automatizados por meio de ações do GitHub.
- Você configura o processo de fluxo de trabalho Ações do GitHub para testar o IaC com estados e planos de infraestrutura implantados localmente.
- 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.
- 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.
- 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.
- 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.
- 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
- Considere as ferramentas IaC preferidas a serem usadas para DevSecOps e certifique-se de que elas venham com extensões para executar a verificação de segurança IaC.
- Considere a linguagem ou os modelos IaC preferidos, Bicep ou Terraform no Azure.
- O Guia de Organizações do GitHub
- Usar o GitHub Actions para conectar-se ao Azure
- GitHub Actions
- Segurança de inovação
- AzOps para modelos ARM
- Módulo e Soluções de Zonas de Destino do Terraform
- Introdução à infraestrutura como código usando Bicep