Campos de uma policy — cheatsheet
Consulta rápida de todos os elementos JSON de uma policy IAM.
Esqueleto básico
A estrutura mínima de uma policy identity-based:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "RotuloOpcional",
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::bucket/*"
}
]
} Tabela de referência rápida
| Campo | Obrigatório? | Tipo | Descrição curta |
|---|---|---|---|
Version | Sim | String fixa | Sempre "2012-10-17" |
Id | Não | String | ID opcional (usado em algumas resource policies) |
Statement | Sim | Objeto ou array | As declarações da policy |
Sid | Não | String | Rótulo legível do statement |
Effect | Sim | "Allow" ou "Deny" | Concede ou nega |
Principal | Só em resource-based | Objeto, string ou "*" | Quem pode executar a ação |
NotPrincipal | Não | Objeto | Todos exceto estes principals |
Action | Sim (ou NotAction) | String ou array | Ações permitidas/negadas |
NotAction | Alternativa a Action | String ou array | Todas as ações exceto estas |
Resource | Sim em identity-based | ARN ou array de ARNs | Recursos alvo |
NotResource | Alternativa a Resource | ARN ou array | Todos os recursos exceto estes |
Condition | Não | Objeto aninhado | Restrições contextuais (MFA, IP, tags, região…) |
Version
Valores válidos: "2012-10-17" (atual) · "2008-10-17" (legado).
Define a versão da linguagem. Sempre use "2012-10-17" em policies novas — features como variáveis (${aws:username}) e wildcards só funcionam nela.
Id
Onde aparece: algumas resource policies (SQS, SNS). Ignorado em identity-based.
É apenas uma string identificadora da policy inteira. Raramente usado na prática.
Statement
Valor: um objeto ou um array de objetos. Cada objeto é avaliado independentemente.
Não há ordem nem prioridade entre statements. O resultado final é determinístico — um Deny qualquer vence todos os Allows.
Sid
Valor: string alfanumérica, única dentro da policy.
Apenas rótulo legível, ignorado pela avaliação. Aparece em logs e ajuda a identificar qual statement causou uma decisão.
Effect
Valores válidos: "Allow" ou "Deny". Case-sensitive.
Regra de ouro: Deny sempre vence Allow. E ausência de Allow = Deny implícito.
Principal / NotPrincipal
Onde aparece: apenas em resource-based policies.
Formatos de valor:
{ "AWS": "arn:aws:iam::111:user/alice" }— IAM User ou Role específico{ "AWS": "arn:aws:iam::111:root" }— qualquer identidade da conta 111{ "Service": "lambda.amazonaws.com" }— serviço AWS{ "Federated": "arn:aws:iam::111:saml-provider/MyIdP" }— IdP federado{ "CanonicalUser": "..." }— usuário canônico (legado S3)"*"— qualquer um, incluindo anônimo
Action / NotAction
Formato: servico:Operacao (PascalCase do lado direito).
String ou array. Aceita wildcards * e ?.
Exemplos de Action
"s3:GetObject"— uma ação específica["s3:GetObject", "s3:ListBucket"]— várias ações"s3:*"— todas as ações do S3"s3:Get*"— todas do S3 que começam com Get"*"— todas de todos os serviços (admin)
Lista completa de ações por serviço: Service Authorization Reference.
Resource / NotResource
Formato: ARN completo ou lista. Aceita wildcard *.
Estrutura do ARN:
arn:aws:<servico>:<regiao>:<account-id>:<recurso> Exemplos
"arn:aws:s3:::meu-bucket"— bucket específico"arn:aws:s3:::meu-bucket/*"— objetos dentro do bucket"arn:aws:ec2:us-east-1:111:instance/*"— todas as instâncias na região/conta"*"— qualquer recurso (válido só para ações globais)
Em resource-based policies, Resource é opcional — o recurso é implicitamente aquele onde a policy está anexada.
Condition
Estrutura:
"Condition": {
"<operador>": {
"<context-key>": "<valor>"
}
} Operadores comuns
StringEquals,StringNotEquals,StringLikeNumericEquals,NumericLessThan,NumericGreaterThanDateGreaterThan,DateLessThanBool,BoolIfExistsIpAddress,NotIpAddressArnLike,ArnEquals
Context keys frequentes
aws:MultiFactorAuthPresent— MFA foi usada?aws:SourceIp— IP de origemaws:RequestedRegion— região da requestaws:SecureTransport— conexão HTTPS?aws:PrincipalTag/<key>— tag do principalaws:ResourceTag/<key>— tag do recurso