Pular para o conteúdo principal

🛠️ Exemplos de Estrutura e Práticas Seguras em Projetos IaC

🌟 Objetivo

Apresentar exemplos concretos e reutilizáveis de como estruturar e operar projetos de Infraestrutura como Código de forma segura, de acordo com os princípios, requisitos e validações definidos neste capítulo.


📁 Estrutura recomendada de repositório

iac/
├── modules/
│ └── networking/
│ ├── main.tf
│ ├── variables.tf
│ ├── outputs.tf
│ └── README.md
├── envs/
│ ├── dev/
│ │ ├── main.tf
│ │ └── backend.tf
│ ├── staging/
│ └── prod/
├── policies/
│ ├── opa/
│ └── conftest/
├── .github/workflows/
│ └── validate.yaml
├── .pre-commit-config.yaml
├── LICENSE
└── README.md

Esta estrutura separa ambientes, permite modularização segura e suporte a enforcement automatizado.


🏷️ Exemplo de tagging obrigatório

tags = {
Environment = var.environment
Owner = var.owner
Criticality = var.criticality
ManagedBy = "Terraform"
}

Incluído automaticamente por módulo ou imposto por política (ex: regra Rego).


🔐 Exemplo de controlo de permissões

resource "aws_iam_role" "example" {
name = "app-deploy-role"

assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Effect = "Allow"
Principal = {
Service = "ec2.amazonaws.com"
}
Action = "sts:AssumeRole"
}
]
})

# Aplicação de política mínima
managed_policy_arns = [aws_iam_policy.least_privilege.arn]
}

🔄 Exemplo de uso seguro de módulos externos

module "vpc" {
source = "git::https://github.com/org/vpc-module.git?ref=v1.2.3"

cidr_block = "10.0.0.0/16"
environment = var.environment
}

A referência a ref=tag impede alterações inesperadas e permite validação de proveniência.


💪 Exemplo de workflow CI para validação

name: Validate IaC

on:
pull_request:
paths:
- 'iac/**'

jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Terraform Format
run: terraform fmt -check -recursive
- name: Terraform Validate
run: terraform validate
- name: TFLint
uses: terraform-linters/setup-tflint@v1
- name: tfsec
run: tfsec ./iac
- name: Checkov
run: checkov -d ./iac

O pipeline executa validações sintáticas, lint e segurança com scanners reconhecidos.


🏠 Template de pre-commit hook

repos:
- repo: https://github.com/antonbabenko/pre-commit-terraform
rev: v1.66.1
hooks:
- id: terraform_fmt
- id: terraform_validate
- id: terraform_tflint
- id: terraform_tfsec

Aplicado automaticamente antes do git commit, reduz erros antes de PR.


🔗 Ligação a requisitos

Exemplo aplicadoRequisitos relacionados
Estrutura de repositório modularIAC-002, IAC-005, REQ-004
Tagging obrigatórioIAC-002, IAC-008, REQ-006
Uso de módulo versionadoIAC-004, REQ-007
Workflow CI com scannersIAC-003, REQ-005, REQ-006
Pre-commit hooksIAC-003, REQ-006

✅ Benefícios

  • Acelera adoção segura de práticas por novas equipas;
  • Promove consistência entre projetos e ambientes;
  • Reduz esforço manual de revisão e validação;
  • Permite escalar segurança como padrão.

🔗 Todos os exemplos foram alinhados com os ficheiros anteriores deste capítulo e com as práticas de SSDF (PW.6), SLSA (Build L2), SAMM (AA2.1), (CMVM1.1).