Pular para o conteúdo principal

🧪 Validações Automáticas e Controlo de Qualidade no Projeto IaC

🌟 Objetivo

Garantir que todas as alterações em projetos de Infraestrutura como Código (IaC) são tratadas como entrada não confiável, sujeitas a validações automáticas bloqueantes, e acompanhadas de evidência auditável antes de qualquer aplicação em ambiente real.

Este ficheiro estabelece o mínimo técnico obrigatório para assegurar que o projeto IaC:

  • é correto (sintaxe e estrutura);
  • é seguro (configuração, permissões, exposição);
  • é compreendido (impacto real do plan);
  • é auditável (evidência ligada à decisão e execução);
  • não degrada controlo quando suportado por automação ou ferramentas assistidas.

No modelo SbD-ToE, a validação automatizada é um mecanismo de controlo, não uma otimização opcional.
Sem validação bloqueante e evidência mínima, não existe governação efetiva de IaC.


🧩 Princípio base: entrada não confiável por origem

Em contexto moderno de engenharia, alterações de IaC podem ser produzidas por:

  • humanos,
  • templates,
  • normalizadores,
  • scripts,
  • geradores,
  • mecanismos assistidos ou automatizados.

Prescrição fundamental:
👉 A origem da alteração nunca é uma garantia de segurança.
👉 Todo o IaC proposto é tratado como entrada não confiável, com reforço adicional quando a alteração é produzida ou modificada por mecanismos automatizados.

Consequentemente:

  • nenhuma alteração pode chegar a apply sem validação bloqueante;
  • a validação deve incidir sobre efeitos reais, não apenas sobre forma;
  • a decisão de executar deve ser explícita, rastreável e evidenciada.

Este princípio é operacionalizado por validações técnicas e gates definidos neste documento.


📌 O que deve ser feito (prescrição mínima)

A organização deve garantir, no mínimo:

  1. Execução de linters e validadores sintáticos (ex.: terraform validate, tflint);
  2. Aplicação de scanners de segurança específicos para IaC;
  3. Validação de conformidade com políticas internas (naming, tagging, permissões, módulos);
  4. Integração de todas as validações no pipeline CI/CD, com falha obrigatória;
  5. Geração e validação de terraform plan (ou equivalente) antes de qualquer apply;
  6. Validação semântica do impacto real do plan;
  7. Bloqueio automático quando requisitos críticos não são cumpridos;
  8. Armazenamento e correlação de evidência mínima (plan + relatórios + aprovação).

⚙️ Como aplicar (tipos de validação)

Tipo de ValidaçãoFinalidade técnica
SintáticaGarantir que o código é válido e executável
Estrutural / LintingImpor padrões, evitar más práticas recorrentes
SegurançaDetetar exposições, permissões excessivas, configurações inseguras
Policy-as-CodeImpor regras organizacionais de forma automática
Validação semânticaAvaliar o impacto real do plan
Controlo de execuçãoImpedir apply sem validação e aprovação
EvidênciaGarantir rastreabilidade decisão → execução

Ferramentas e técnicas exemplificativas

CategoriaExemplos
Sintaxe / formatoterraform fmt, terraform validate, yamllint
Lintingtflint, actionlint, ansible-lint
Segurançatfsec, checkov, kics, terrascan
PoliciesOPA/Rego, Sentinel, Conftest
PipelineGates obrigatórios em PR/MR e pré-apply
LocalPre-commit hooks obrigatórios

As ferramentas são meios; o requisito é o efeito verificável.


🔍 Validação semântica do plan (obrigatória quando aplicável)

Para além da sintaxe, deve ser avaliado o impacto real do plan, incluindo:

  • criação, alteração ou destruição de recursos por ambiente;
  • expansão de permissões (ex.: IAM, roles, wildcards);
  • exposição de rede (endpoints públicos, regras permissivas);
  • ausência de cifragem ou logging em recursos críticos;
  • alterações indiretas por módulos, providers ou dependências;
  • diffs inesperados ou não explicados.

Prescrição:
👉 A validação semântica deve funcionar como gate bloqueante, não como aviso informativo.


🧾 Evidência mínima obrigatória

Para que a validação seja auditável, a organização deve garantir:

  • plan gerado em CI associado a:
    • PR/MR,
    • commit hash,
    • ambiente alvo;
  • relatórios de linters, scanners e policies associados ao mesmo PR/MR;
  • registo explícito de aprovação antes de apply;
  • retenção dos artefactos proporcional ao risco e obrigações internas.

Sem esta evidência, não existe prova de controlo, apenas execução técnica.


🕒 Quando aplicar

MomentoValidações esperadas
Commit / PushLinters locais, pre-commit hooks
Pull RequestLinters + scanners + policies + plan
Merge para releaseValidação reforçada + evidência completa
Pré-applyVerificação final de plan, hashes e ambiente
PeriodicamenteDrift, revalidação de módulos e dependências

👥 Perfis envolvidos

PapelResponsabilidade
DevOps / InfraIntegração técnica das validações no pipeline
AppSec / SegurançaDefinição e manutenção das políticas
DesenvolvimentoCorreção de findings e explicação de impacto
Cloud / ArquiteturaValidação de efeitos reais e desenho seguro

🧪 Exemplos práticos

  • Pipeline bloqueado por tfsec em permissões IAM demasiado amplas;
  • checkov a impedir merge por bucket sem cifragem;
  • Política OPA a bloquear plan com criação de endpoint público;
  • Job validate-iac obrigatório antes de apply;
  • PR rejeitado por diff não explicado em recurso crítico.

✅ Checklist de controlo (por projeto)

  • Todas as alterações são tratadas como entrada não confiável
  • Validações automáticas são bloqueantes
  • Existe validação semântica do plan
  • plan e relatórios estão ligados a PR/MR + commit
  • A aprovação antes de apply é registada e auditável
  • Evidência é retida conforme criticidade

🔗 Referências cruzadas

DocumentoRelação
15-aplicacao-lifecycle.mdUser stories de validação, plan e aprovação
addon/04-principios-sbd-iac.mdPrincípios SbD aplicados a IaC
addon/11-uso-ferramentas-automatizadas-iac.mdRegras para automação/assistência

⚠️ A ausência de validações automáticas bloqueantes e de evidência mínima transforma IaC num canal privilegiado de risco sistémico, comprometendo segurança, auditoria e governação.