Intermediário

Conditions e context keys

Lição 12 · Módulo 3 — Modelo de avaliação

Permissão contextual

Até aqui, as policies diziam "quem pode fazer o quê, em qual recurso". O elemento Condition adiciona uma quarta dimensão: sob quais circunstâncias.

Circunstâncias incluem: IP de origem, presença de MFA, hora do dia, tag do recurso, tag do principal, região solicitada, VPC endpoint usado, e muito mais.

Anatomia de uma Condition

JSON
1
2
3
4
5
6
7
8
"Condition": {
"StringEquals": {
"aws:RequestedRegion": ["us-east-1", "sa-east-1"]
},
"Bool": {
"aws:MultiFactorAuthPresent": "true"
}
}

Três partes:

  • Operator — StringEquals, Bool, IpAddress, DateGreaterThan, ArnLike…
  • Context key — aws:RequestedRegion, aws:MultiFactorAuthPresent…
  • Value — valor único ou lista.

Múltiplas conditions são combinadas com AND. Múltiplos valores dentro de uma condition são combinados com OR.

Global context keys

As global context keys (prefixo aws:) funcionam em qualquer serviço:

  • aws:SourceIp — IP da request. Use com operador IpAddress.
  • aws:MultiFactorAuthPresent — MFA foi usada nesta sessão?
  • aws:SecureTransport — conexão foi via HTTPS?
  • aws:RequestedRegion — em qual região foi feita a chamada?
  • aws:PrincipalTag/<key> — tag do principal que faz a request.
  • aws:ResourceTag/<key> — tag do recurso alvo.
  • aws:SourceVpc / aws:SourceVpce — VPC/VPC Endpoint da origem.
  • aws:CurrentTime — hora UTC da request.

Service-specific context keys

Cada serviço define suas próprias context keys, listadas na Service Authorization Reference. Alguns exemplos:

  • s3:prefix — prefixo que o cliente está listando.
  • ec2:InstanceType — tipo de instância sendo iniciada.
  • iam:PassedToService — para qual serviço uma role está sendo passada.
  • kms:ViaService — qual serviço está chamando o KMS.

Padrões úteis

Exigir MFA para ações destrutivas

Deny + BoolIfExists
JSON
1
2
{ "Effect": "Deny", "Action": "ec2:TerminateInstances", "Resource": "*",
"Condition": { "BoolIfExists": { "aws:MultiFactorAuthPresent": "false" } } }

Restringir por região

Deny + NotAction
JSON
1
2
{ "Effect": "Deny", "NotAction": ["iam:*","organizations:*"], "Resource": "*",
"Condition": { "StringNotEquals": { "aws:RequestedRegion": ["us-east-1","sa-east-1"] } } }

Forçar HTTPS em bucket

bucket policy
JSON
1
2
{ "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::meu-bucket/*",
"Condition": { "Bool": { "aws:SecureTransport": "false" } } }

Teste rápido

Você quer permitir ec2:RunInstances apenas para instâncias t3.micro ou t3.small. Qual condition usar?

Resumo

Conditions transformam policies estáticas em contextuais. Use global keys (aws:*) para controles transversais e service keys para controles finos. Consulte sempre a Service Authorization Reference para saber quais keys cada ação suporta.

Referência Well-Architected

Conditions são fundamentais para aplicar least privilege de forma contextual — restringindo não apenas "o que", mas também "quando" e "como".

Referências

Terminou esta lição?

Seu progresso fica salvo apenas neste navegador.