Pular para o conteúdo principal

🛡️ Princípios de Security by Design aplicados a Projetos IaC

🌟 Objetivo

Garantir que todos os projetos IaC são desenhados e mantidos com base em princípios estruturais de segurança por definição, reforçando a fiabilidade e a resiliência da infraestrutura que provisionam.

O projeto IaC é um ativo crítico e deve refletir, no próprio código e estrutura, os princípios de segurança aplicáveis a qualquer aplicação de risco.


📌 Princípios essenciais aplicáveis a projetos IaC

PrincípioAplicação prática no contexto IaC
Separação de ambientesDiretórios, workspaces, pipelines e artefactos independentes para dev, staging, prod
Privilégio mínimoOs recursos provisionados (ex: roles, buckets, keys) devem ter permissões mínimas necessárias
RastreabilidadeTodas as alterações devem ser versionadas, associadas a autor, ticket, ambiente e justificação
ImutabilidadeRecursos críticos devem ser redeployáveis sem alteração fora de band
ConsistênciaNaming conventions, tagging, layout de diretórios e outputs padronizados
VisibilidadeOutputs e logs claros; tagging e metainformação para debugging e auditoria
DesacoplamentoEvitar hardcodes, dependências implícitas e sobreposição entre módulos/ambientes
Fail securelyDefaults seguros (ex: recurso só criado com tags, permissões restritivas por omissão)

📋 O que deve ser feito

  1. Definir e aplicar um layout estruturado para o repositório, com separação lógica de ambientes;
  2. Usar tags obrigatórias (ambiente, owner, tipo, criticidade) em todos os recursos provisionados;
  3. Padronizar nomes e variáveis, evitando ambiguidades e erros por copy/paste;
  4. Rever permissões criadas por IaC, com especial atenção a iam_role, policy, security_group, etc.;
  5. Forçar estrutura comum entre projetos IaC, com template base ou scaffolding;
  6. Evitar dependências circulares ou indiretas entre módulos e ambientes;
  7. Tratar drift e mudanças manuais como falha de segurança, e não como exceção aceitável.

⚙️ Técnicas e ferramentas

Técnica/FerramentaAplicação prática
Layout repositório IaCiac/ ├─ modules/ ├─ envs/ ├─ policies/ ├─ templates/
Taggingtags = { Environment = "prod", Owner = "appsec", ... }
Pre-commit hooksValidação de naming, presença de tags, padrão de ficheiros
Padrão de variáveisvariable "environment" { type = string ... } obrigatório em todos os módulos
Testes semânticosOPA/Rego, Conftest para garantir políticas mínimas aplicadas
Policy-as-CodeBloquear permissões amplas, ausência de tags ou naming incorreto
Reutilização controladaTemplates para main.tf, variables.tf, outputs.tf validados e aprovados

🕒 Quando aplicar

Fase do ciclo de vidaAção esperada
Criação do projeto IaCDefinir layout e aplicar princípios a nível estrutural
Adição de novos módulosRever permissões, naming, outputs, tagging
Alterações críticasRevalidar aderência a princípios antes de aprovação
Auditoria ou revisão de conformidadeVerificar tagging, rastreabilidade e outputs previsíveis

👥 Perfis envolvidos

PerfilResponsabilidades relacionadas ao tema
DevOps / CloudImplementar estrutura, tagging, segregação e revisão de permissões
SegurançaValidar aplicação dos princípios, definir políticas default e enforcement
ArquiteturaAprovar standards de layout, naming, tagging e estrutura de outputs
PlataformaDisponibilizar scaffolds e validações partilhadas entre equipas

🧪 Exemplos práticos

  • Diretório envs/prod/ com ficheiro main.tf, onde variable "environment" é obrigatória;

  • Tagging obrigatório em aws_instance, aws_s3_bucket, etc., validado por terraform validate + OPA;

  • Regra OPA:

    deny[msg] {
    input.resource_type == "aws_s3_bucket"
    not input.tags["Environment"]
    msg := "Missing Environment tag on S3 bucket"
    }

✅ Benefícios diretos

  • Redução do risco estrutural nos ambientes geridos por IaC;
  • Consolidação de boas práticas entre equipas;
  • Aumento da previsibilidade, auditoria e debugging das alterações;
  • Capacidade de enforcement técnico automatizado.

🔗 Referências cruzadas

DocumentoRelação com esta prática
02-matriz-requisitos-iac.mdRequisitos IAC-002, IAC-005, REQ-004, REQ-006
SAMM (AA2.1, CM1.3)Padrões de arquitetura e controlo de mudança
SSDF (CM.5)Design seguro e separação de ambientes
SLSA (Source & Provenance)Fiabilidade de origem e rastreabilidade no controlo de código