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á testoupub-...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.254 → credenciais 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:
- Explique o modelo de responsabilidade compartilhada. O que é seu proteger?
- Qual a pergunta central do IAM, e o que é "menor privilégio"?
- Por que "está na AWS" não significa "está seguro"?
- O que é o ataque de bucket público e como evitá-lo?
- Por que um SSRF é especialmente grave na nuvem?
- Qual a diferença entre criptografia em trânsito e em repouso?
- Para que serve o audit log (CloudTrail) e que evento sensível você alertaria?
- 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).
- "Quem pode fazer o quê?" Menor privilégio = cada identidade recebe só o mínimo necessário, nada além (A.2).
- Porque a maioria dos vazamentos é erro de configuração do cliente (bucket público, credencial vazada), não falha do provedor (A.1).
- 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).
- 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). - Trânsito = dados cifrados na rede (TLS). Repouso = dados cifrados no disco/objeto (KMS). Precisa dos dois (Pilar 6).
- 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.