Deny por padrão e explicit deny
Lição 9 · Módulo 3 — Modelo de avaliação
A regra de ouro da AWS
O modelo de autorização da AWS tem duas regras inamovíveis:
- Deny por padrão — se nada concede, a request é negada.
- Explicit deny vence — um
Denyexplícito sempre supera qualquerAllow.
Entender essas duas regras resolve 80% das dúvidas de "por que minha policy não está funcionando".
O fluxograma oficial
Para cada request, a AWS executa este fluxograma:
- Existe algum Deny explícito em qualquer policy aplicável? → Deny.
- Existe algum Allow aplicável? → Allow.
- Caso contrário → Deny (implicit).
Quando usar Deny explícito
Deny explícito é a ferramenta para exceções negativas — "permita tudo, exceto isto":
- Proibir ações destrutivas mesmo para admins (
ec2:TerminateInstancessem MFA). - Bloquear regiões específicas (
aws:RequestedRegion). - Forçar uso de TLS (
aws:SecureTransport). - Impedir alteração de logs (
s3:DeleteObjectno bucket de CloudTrail).
Implicit deny — o caso silencioso
Implicit deny é o que acontece quando você simplesmente não escreveu uma policy que cobre aquela ação/recurso. Não tem mensagem especial, não tem log diferente. Do ponto de vista do usuário, parece igual a um Deny explícito.
Para debugar, use o IAM Policy Simulator
ou o campo errorMessage do CloudTrail — ele diz qual policy decidiu o Deny.
Teste rápido
Um usuário tem AdministratorAccess + uma policy com Deny s3:DeleteObject em * com Condition aws:MultiFactorAuthPresent=false. Ele chamou DeleteObject com MFA ativa. Resultado?
A mesma policy, mas ele chama DeleteObject SEM MFA. Resultado?
Laboratório — ataque e defesa
Escreva uma policy que permita tudo em S3, mas bloqueie
a exclusão de objetos no bucket logs-imutaveis e no seu conteúdo.
Use dois statements: um Allow amplo + um Deny específico.
Laboratório — escreva a policy
Permita toda ação S3 em qualquer recurso, EXCETO s3:DeleteObject no bucket 'logs-imutaveis' e seus objetos.
Ver solução de referência
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PermitirS3",
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
},
{
"Sid": "ProtegerLogs",
"Effect": "Deny",
"Action": "s3:DeleteObject",
"Resource": "arn:aws:s3:::logs-imutaveis/*"
}
]
} Resumo
Deny por padrão é o piso; explicit deny é o teto. Entre eles, a união dos Allows define o que é possível. Use Deny explícito com parcimônia, para proteger o que é crítico mesmo contra humanos com poder demais.
Referência Well-Architected
Esta lição fundamenta as boas práticas de gestão de permissões do Well-Architected Framework — dominar a avaliação é pré-requisito para qualquer design de permissões seguro.
Referências
Terminou esta lição?
Seu progresso fica salvo apenas neste navegador.