A.3 — Você já faz cloud security (reenquadre)

Para não parecer abstrato, seu stack é um caso de cloud security:

Conceito de nuvem No seu projeto
IAM / tokens com escopo Tokens Cloudflare, chaves Supabase (anon vs service_role)
Secrets management wrangler secret (o certo) vs wrangler.jsonc em texto (o errado — Ex. 32)
Storage/bucket R2 bucket — deve ser privado (Ex. 9)
Banco gerenciado Supabase Postgres + RLS (Ex. 26)
Rede/WAF Cloudflare como perímetro
Logs Logs de Cloudflare/Supabase

Este módulo generaliza isso para qualquer nuvem.


PARTE B — Os 8 pilares da segurança em nuvem

Cada pilar: o que é · o risco · como fazer certo · no seu projeto/lab.

Pilar 1 — IAM & identidades 🔑 (o mais importante)

  • Risco: permissões amplas demais; chaves de acesso de longa duração; sem MFA; contas órfãs.
  • Certo: menor privilégio por identidade; MFA em todas as contas humanas; roles temporárias em vez de chaves fixas; revisar acessos periodicamente; nada de conta "root/owner" no dia a dia.
  • Projeto: revisar escopo de cada token (Ex. 43); MFA em Cloudflare/Supabase/GitHub (DOC §10/11).

Pilar 2 — Secrets & chaves 🗝️

  • Risco: chave no código/git (Ex. 32); sem rotação; mesma chave em dev e prod.
  • Certo: cofre gerenciado (AWS Secrets Manager / KMS, GCP Secret Manager, Cloudflare Secrets); rotação em cadência (DOC §5.4); dev ≠ prod; nunca no repositório.
  • Projeto: mover secrets do wrangler.jsonc → Cloudflare Secrets; rotacionar os expostos.

Pilar 3 — Rede virtual (VPC, security groups, firewalls) 🌐

  • O que é: sua rede privada na nuvem (VPC), dividida em sub-redes; security groups = firewall por recurso.
  • Risco: banco/porta exposto à internet (0.0.0.0/0); tudo na mesma rede sem segmentação.
  • Certo: negar por padrão; recursos internos sem IP público; segmentar (público × privado); só abrir o necessário (liga ao Módulo 1/2).

Pilar 4 — Storage & buckets 🪣 (o erro clássico da nuvem)

  • Risco: o bucket público — o vazamento de dados nº 1 da nuvem. Um S3/GCS/R2 aberto expõe tudo dentro dele.
  • Certo: privado por padrão; políticas explícitas por bucket; block public access ligado; versionamento; criptografia; nunca dados sensíveis em bucket público.
  • Projeto: confirmar que o R2 feed-monetizacao-media é privado (Ex. 9.2 já testou pub-...r2.dev → 401).

Pilar 5 — Bancos gerenciados 🗄️

  • Risco: banco acessível pela internet; sem criptografia; credencial fraca.
  • Certo: acesso só por rede privada; criptografia em repouso; credenciais no cofre; e — no modelo Supabase/PostgREST — RLS como a defesa de dados (Ex. 26).

Pilar 6 — Criptografia 🔐

  • Em trânsito: TLS (Módulo 1) — dados cifrados na rede.
  • Em repouso (at rest): o provedor cifra o disco/objeto; você gerencia as chaves via KMS (Key Management Service).
  • Certo: ligar criptografia em repouso em bancos/buckets; TLS 1.2+ em tudo; chaves gerenciadas e rotacionadas.

Pilar 7 — Logs & monitoramento 📊

  • O que é: o registro de quem fez o quê na sua conta de nuvem — AWS CloudTrail, GCP Cloud Audit Logs.
  • Risco: sem logs, uma mudança maliciosa de IAM (um atacante criando um usuário admin) passa despercebida.
  • Certo: ligar audit logs; alertar em eventos sensíveis (novo usuário IAM, policy alterada, chave criada) — liga ao blue team (Fase 7).

Pilar 8 — Backups & resiliência 💾

  • Risco: ransomware/erro apaga dados sem cópia; backup nunca testado.
  • Certo: snapshots automáticos, versionamento de bucket, estratégia 3-2-1, e restore testado (DOC §8).

PARTE C — Os ataques clássicos de nuvem (o que dá errado)

Ataque Como acontece Defesa
Bucket público storage aberto por config errada privado por padrão + block public access
Credencial vazada chave em git/bundle → atacante minera cripto/abusa (conta cara) secrets no cofre; gitleaks; rotação; alerta de billing
SSRF → metadata app com SSRF busca 169.254.169.254credenciais da instância allowlist (Módulo 4, V5); IMDSv2; bloquear link-local
IAM privilege escalation uma policy permissiva deixa a identidade se auto-promover menor privilégio; revisar policies; sem iam:*
Recurso esquecido uma VM/bucket de teste esquecido vira porta (e custo) inventário; revisar faturas (DOC §9)

O SSRF na nuvem é especial: o metadata endpoint (169.254.169.254) entrega as credenciais temporárias da máquina. Um SSRF que o alcança rouba as chaves da nuvem. Por isso o Módulo 4 (V5) e o Ex. 44 são tão importantes aqui — é a ponte entre segurança web e cloud.


PARTE D — Labs práticos 🧪

Aprenda os erros reais num ambiente feito para isso — nunca "testando" numa conta de produção.

Lab 1 — flaws.cloud ⭐ (gratuito, guiado) — comece aqui

http://flaws.cloud e http://flaws2.cloud — labs gratuitos que ensinam, passo a passo, os erros clássicos de AWS (bucket público, credencial exposta, IAM). É a melhor porta de entrada. Entregável: anote cada lição.

Lab 2 — Treinamento oficial (gratuito)

  • AWS Skill Builder (trilha de segurança grátis) ou Google Cloud Skills Boost — escolha o seu provedor e faça o fundamento de IAM.

Lab 3 — CloudGoat (AWS deliberadamente vulnerável)

CloudGoat (Rhino Security Labs) sobe cenários vulneráveis na sua conta de teste para você explorar IAM privesc, etc. Requer conta AWS (use o free tier + destrua depois). Avançado.

Lab 4 — Auditoria de menor privilégio no SEU projeto (🟢) — Ex. 43

# Cloudflare — verificar o escopo do token atual (não expõe o segredo):
curl -s "https://api.cloudflare.com/client/v4/user/tokens/verify" \
  -H "Authorization: Bearer $CF_TOKEN" | python -m json.tool
# R2/bucket público? (deve dar 401/403):
curl -s -o /dev/null -w "%{http_code}\n" "https://pub-<seu-bucket>.r2.dev/"
# Supabase — a service_role está em algum lugar indevido? (procurar no repo)
grep -RiE "service_role|SUPABASE_SERVICE" . 2>/dev/null | head

Faça: liste cada identidade/token e pergunte "isso tem só o mínimo?". Lição: é cloud security aplicada ao que você já tem.

Lab 5 — Checklist de config (o "CIS Benchmark" simplificado)

Rode mentalmente/na prática, para cada recurso: MFA ligado? bucket privado? banco sem IP público? secrets no cofre? audit logs ligados? backup testado?


PARTE E — Autoavaliação ✅

Responda de memória:

  1. Explique o modelo de responsabilidade compartilhada. O que é seu proteger?
  2. Qual a pergunta central do IAM, e o que é "menor privilégio"?
  3. Por que "está na AWS" não significa "está seguro"?
  4. O que é o ataque de bucket público e como evitá-lo?
  5. Por que um SSRF é especialmente grave na nuvem?
  6. Qual a diferença entre criptografia em trânsito e em repouso?
  7. Para que serve o audit log (CloudTrail) e que evento sensível você alertaria?
<details><summary>👉 Gabarito</summary>
  1. O provedor protege a nuvem (infra física); você protege o que está na nuvem (config, IAM, dados, permissões). A parte de baixo é sua (A.1).
  2. "Quem pode fazer o quê?" Menor privilégio = cada identidade recebe só o mínimo necessário, nada além (A.2).
  3. Porque a maioria dos vazamentos é erro de configuração do cliente (bucket público, credencial vazada), não falha do provedor (A.1).
  4. Um storage deixado público por configuração errada expõe todo o conteúdo. Evita-se com privado por padrão + block public access + políticas explícitas (Pilar 4).
  5. Porque o SSRF pode alcançar o metadata endpoint (169.254.169.254) e roubar as credenciais da instância — as chaves da nuvem (Parte C).
  6. Trânsito = dados cifrados na rede (TLS). Repouso = dados cifrados no disco/objeto (KMS). Precisa dos dois (Pilar 6).
  7. Registra quem fez o quê na conta. Alertaria: novo usuário IAM, policy alterada, chave de acesso criada (Pilar 7).</details>

Checklist prático:

[ ] Fiz flaws.cloud (nível 1–3 no mínimo)
[ ] Fiz o fundamento de IAM no AWS Skill Builder ou GCP Skills Boost
[ ] Auditei os tokens/chaves do meu projeto por menor privilégio (Ex. 43)
[ ] Confirmei que meus buckets são privados
[ ] Verifiquei MFA em todas as contas de nuvem (Cloudflare/Supabase/GitHub)
[ ] Movi secrets para o cofre (fora do código)
[ ] Sei onde ficam os audit logs do meu provedor

Conclusão: 5/7 do quiz + auditoria do próprio projeto feita.


entre para marcar esta aula como concluída.

PurpleLab // plataforma de treino ofensivo + defensivo // Fase 1 — portal dinamico