DevSecOps para infraestrutura como código (IaC)
Ideias de soluções
Este artigo descreve uma ideia de solução. Seu arquiteto de nuvem pode usar essa orientação para ajudar a visualizar os principais componentes para uma implementação típica dessa arquitetura. Use este artigo como ponto de partida para projetar uma solução bem arquitetada que se alinhe com os requisitos específicos da sua carga de trabalho.
Essa ideia de solução ilustra o pipeline DevSecOps que usa o GitHub para infraestrutura como código (IaC). Ele também descreve 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
Transfira um ficheiro do Visio desta arquitetura.
Fluxo de dados
O seguinte fluxo de dados corresponde ao diagrama anterior:
Use o desenvolvimento orientado a testes para verificar 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 política como código (PaC) ao mesmo tempo para testar a qualidade do IaC.
As solicitações pull acionam o teste de unidade automatizado por meio das Ações do GitHub.
Configure o processo de fluxo de trabalho de Ações do GitHub para testar a IAC usando estados e planos de infraestrutura implantados localmente.
Configure as Ações do GitHub para verificar se há problemas de qualidade de código e segurança. Crie suas próprias consultas personalizadas do GitHub CodeQL para analisar modelos IaC e detetar possíveis vulnerabilidades de segurança. Se uma vulnerabilidade for detetada, 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 da infraestrutura é necessária, o acesso de administrador designado é elevado para executar as modificações. Após a modificação, o acesso elevado é removido. Você também deve registrar um problema do GitHub para reconciliação do IaC. As etapas e abordagens de reconciliação dependem das ferramentas específicas da 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 é detetada, um problema do GitHub é registrado automaticamente para que possa ser resolvido.
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, 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 é uma solução de gerenciamento de eventos e informações de segurança (SIEM) e de orquestração de segurança (SOAR) nativa da nuvem. 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.
A Política do Azure ajuda as equipes a gerenciar e prevenir problemas de TI usando definições de política que podem impor regras para recursos de nuvem. Por exemplo, se o seu projeto estiver prestes a implantar uma máquina virtual que tenha uma SKU não reconhecida, a Política do Azure alertará você para 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 IaC é semelhante ao DevSecOps para código de aplicativo no Serviço Kubernetes do Azure (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 para o 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 desenvolvimento orientado a testes. 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.
O PaC é outro método importante para fornecer infraestrutura que esteja 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 infraestrutura mal configurada que expõe pontos para ataque após a implantação. Você pode integrar ferramentas de análise de código estático como Synk ou Aqua Security tfsec usando o CodeQL do GitHub para verificar vulnerabilidades de segurança no código de infraestrutura. Esse processo é semelhante ao teste de segurança de aplicativos estáticos.
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. Se você precisar de configurações manuais, eleve o acesso para o administrador designado e, em seguida, remova o acesso elevado depois que a alteração for feita. Você deve configurar o Azure Monitor para gerar um problema do GitHub para que os desenvolvedores possam reconciliar as alterações. Evite a configuração manual, se possível.
É importante monitorar continuamente o ambiente de nuvem em busca de ameaças e vulnerabilidades para ajudar a evitar incidentes de segurança. Você pode usar a proteção contra ameaças e as ferramentas SIEM para detetar tráfego anormal. Essas ferramentas alertam automaticamente os administradores de segurança e levantam um problema no GitHub.
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 for IaC para ajudar a garantir a segurança e a qualidade das implantações. Você também deseja acompanhar e auditar todas as modificações na infraestrutura.
Contribuidores
A Microsoft mantém este artigo. Os seguintes colaboradores escreveram este artigo.
Principais autores:
- Vito Chin - Brasil | Arquiteto de Soluções Cloud Sênior
- Yee Shian Lee - Brasil | Arquiteto de Soluções Cloud Sênior
Para ver perfis não públicos do LinkedIn, faça login no LinkedIn.
Próximos passos
- Considere as ferramentas de IaC preferidas para usar no DevSecOps e certifique-se de que elas vêm com extensões para executar a verificação de segurança do IaC.
- Considere a linguagem ou os modelos IaC preferidos, Bicep ou Terraform no Azure.
- O guia do GitHub para organizações
- Usar ações do GitHub para se conectar ao Azure
- Ações do GitHub
- O que queremos dizer com conformidade com Zero Trust?
- AzOps para modelos do Azure Resource Manager
- Módulo e soluções de zonas de aterragem Terraform
- Introdução ao IaC usando Bicep