AWS IAM Policy Generator: Políticas de IAM, de bucket S3 e de confiança com privilégio mínimo — em JSON ou Terraform.
Roda no seu navegador — nada do que você cola sai desta página. Como comprovamos isso
Playground do AWS IAM Policy Generator
s3:ListBucket acts on the bucket ARN and s3:GetObject on object ARNs (bucket/*), so they need separate resources — granting both on one ARN leaves one of them with no effect.
Selected: s3:ListBucket
Filled from the AWS ARN format of each action's resource type until you edit it. Replace every ${…} placeholder.
Results update as you type — press Enter to run now.
Policy JSON
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ListBucket",
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::example-bucket"
},
{
"Sid": "ReadObjects",
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::example-bucket/*"
}
]
}Action data: AWS Service Reference, retrieved 2026-10-04
Escolha um serviço, as ações e os recursos sobre os quais elas atuam, adicione condições e receba uma política de identidade do IAM, uma política de bucket S3 ou uma política de confiança de função válida, em JSON e como aws_iam_policy_document do Terraform — com o tamanho verificado contra a cota da AWS e um aviso em cada curinga, tudo calculado no seu navegador, sem cadastro.
A lacuna
"Action": "*" funciona. Esse é o problema.
A AWS avalia três tipos de política que você vai escrever à mão. Uma política de identidade é anexada a um usuário, grupo ou função e diz o que esse principal pode fazer, por isso não tem elemento Principal. Uma política baseada em recursos — uma política de bucket S3, uma política de chave KMS, uma política de fila SQS — é anexada ao recurso e precisa dizer em Principal a quem se aplica. Uma política de confiança é a política baseada em recursos de uma função: ela decide quem pode assumir a função, normalmente com sts:AssumeRole ou, para GitHub Actions e outros provedores OIDC, com sts:AssumeRoleWithWebIdentity.
Privilégio mínimo significa conceder só as ações que uma carga de trabalho chama, e só nos recursos que ela usa. Uma política com curingas passa em todos os testes e reprova na auditoria: as solicitações são negadas por padrão, um Deny explícito vence qualquer Allow, e tudo o que uma política permite uma credencial vazada também pode fazer. Restringir é trabalhoso porque as ações atuam sobre tipos de recurso diferentes — s3:ListBucket no ARN do bucket, s3:GetObject em bucket/*.
As políticas também têm limites de tamanho, contados sem espaços em branco: 6.144 caracteres para uma política gerenciada pelo cliente; para políticas em linha, 2.048 caracteres no total por usuário, 5.120 por grupo e 10.240 por função; e 20 KB para uma política de bucket S3. Uma política que cresceu declaração por declaração falha no deploy, não na revisão.
O gerador verifica a gramática, as cotas e os excessos de permissão comuns; ele não simula a avaliação da AWS. Confirme o acesso efetivo com o IAM Access Analyzer ou o simulador de políticas do IAM antes da produção.
O pipeline
Como funciona.
Quatro passos determinísticos rodam a cada mudança — todos dentro da aba do seu navegador, com dados de ações tirados da AWS Service Reference.
-
Escolha as ações.
Escolha um serviço e filtre as ações por nível de acesso — List, Read, Write, Permissions management, Tagging. A lista de ações vem da AWS Service Reference e é entregue junto com a página.
-
Restrinja os recursos.
Cada ação informa os tipos de recurso sobre os quais atua; o formato de ARN desse tipo é preenchido, então você substitui marcadores em vez de digitar ARNs de memória.
-
Monte e verifique.
As declarações viram um documento com Version 2012-10-17. Os Sids precisam ser alfanuméricos e únicos, uma política de bucket exige um Principal e uma política de identidade não pode ter um, e cada operador de condição é validado.
-
Meça e avise.
A política minificada é medida contra a cota escolhida, e ações curinga, Resource "*" em ações de escrita, ações de gerenciamento de permissões e um Principal "*" sem condição são sinalizados. Nada sai da aba.
Referência de políticas
Um bucket, somente leitura, dois formatos.
O primeiro preset como o painel o gera: as mesmas duas declarações como JSON de política e como fonte de dados do Terraform.
Política de identidade em JSON
s3:ListBucket atua sobre o bucket e s3:GetObject sobre os objetos dele, então cada declaração leva o próprio ARN. Minificada, ela ocupa 248 dos 6.144 caracteres que uma política gerenciada permite.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ListBucket",
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::example-bucket"
},
{
"Sid": "ReadObjects",
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::example-bucket/*"
}
]
} A mesma política no Terraform
Passe data.aws_iam_policy_document.policy.json para um recurso aws_iam_policy ou aws_iam_role_policy.
data "aws_iam_policy_document" "policy" {
statement {
sid = "ListBucket"
effect = "Allow"
actions = ["s3:ListBucket"]
resources = ["arn:aws:s3:::example-bucket"]
}
statement {
sid = "ReadObjects"
effect = "Allow"
actions = ["s3:GetObject"]
resources = ["arn:aws:s3:::example-bucket/*"]
}
} Próximo passo
Faz deploy pelo GitHub Actions? Deixe as access keys de lado.
Uma política de confiança OIDC permite que um workflow assuma uma função com credenciais de curta duração, presa a um repositório e uma branch. O guia (em inglês) passa pelo provedor de identidade, pela política de confiança, pelo configure-aws-credentials e pela mesma configuração no Terraform.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::123456789012:oidc-provider/token.actions.githubusercontent.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"token.actions.githubusercontent.com:aud": "sts.amazonaws.com"
},
"StringLike": {
"token.actions.githubusercontent.com:sub": "repo:my-org/my-repo:ref:refs/heads/main"
}
}
}
]
} FAQ
Suas perguntas, respondidas.
Toque em uma pergunta para expandir a resposta.
O que é uma política do IAM, e qual a diferença entre políticas baseadas em identidade e baseadas em recursos?
Uma política do IAM é um documento JSON que diz quais ações são permitidas ou negadas em quais recursos, opcionalmente sob condições. Uma política baseada em identidade é anexada a um usuário, grupo ou função e concede as permissões a essa identidade, por isso não tem o elemento Principal. Uma política baseada em recursos é anexada ao próprio recurso — um bucket do S3, uma fila do SQS, uma chave do KMS — e precisa indicar o Principal ao qual se aplica. Quando as duas se aplicam a uma solicitação na mesma conta, a AWS as combina, e um Deny explícito em qualquer uma delas sempre prevalece.
Qual a diferença entre uma política do IAM e uma política de bucket do S3?
O elemento Principal. Uma política do IAM é anexada a um usuário, grupo ou função, então o principal está implícito e o elemento não é permitido. Uma política de bucket é anexada ao bucket, então cada declaração precisa dizer a quem se aplica — outra conta, o ARN de uma função, um serviço como cloudfront.amazonaws.com ou "*" para todos. O gerador aplica isso nos dois sentidos: exige um Principal no modo bucket, rejeita no modo identidade e avisa quando uma declaração de bucket concede Principal "*" sem Condition.
Como escrevo uma política do IAM de privilégio mínimo?
Conceda só as ações que a carga de trabalho realmente chama, e só nos recursos que ela usa: ações específicas em vez de s3:* ou *, e ARNs reais em Resource em vez de "*". Adicione condições onde elas restringem mais o acesso, por exemplo aws:SourceVpce, aws:PrincipalOrgID ou uma tag do recurso. Depois deixe a AWS revisar o resultado: o IAM Access Analyzer valida uma política em relação às boas práticas da AWS e pode gerar uma política com as ações que uma função de fato usou, com base no histórico do CloudTrail. O gerador sinaliza ações curinga, Resource "*" em ações de escrita e de gerenciamento de permissões, e Allow com NotAction.
Quais são os limites de tamanho das políticas do IAM e de bucket?
Uma política gerenciada pelo cliente pode ter no máximo 6.144 caracteres. Políticas em linha são limitadas por identidade, somando todas as políticas em linha anexadas a ela: 2.048 caracteres para um usuário, 10.240 para uma função e 5.120 para um grupo. O IAM não conta espaços em branco nesses limites, por isso o medidor de tamanho mede o JSON minificado. Uma política de bucket do S3 tem um limite próprio de 20 KB, e nenhum desses limites de caracteres pode ser aumentado por solicitação de cota.
Como uso a política gerada com o Terraform?
A aba Terraform escreve as mesmas declarações como um bloco data "aws_iam_policy_document", que o Terraform converte em JSON ao planejar. Referencie o atributo json dele onde uma política for esperada: policy = data.aws_iam_policy_document.example.json em um aws_iam_policy para uma política gerenciada, em um aws_iam_role_policy para uma política em linha de função ou em um aws_s3_bucket_policy para uma política de bucket. Se preferir manter o JSON bruto, jsonencode() ou um heredoc também funcionam, mas a fonte de dados mantém a política em HCL, onde os diffs ficam limpos.
De onde vem a lista de ações?
Da AWS Service Reference, os arquivos JSON legíveis por máquina que a AWS publica para cada serviço com suas ações, tipos de recurso e chaves de condição. A página informa a data em que os dados foram obtidos, e a lista cobre 12 serviços muito usados: S3, EC2, Lambda, DynamoDB, IAM, CloudWatch Logs, SQS, SNS, KMS, STS, Secrets Manager e ECR. Cada ação traz seu nível de acesso — Read, List, Write, Permissions management ou Tagging — e os tipos de recurso aos quais pode ser restrita, que é o que alimenta os modelos de ARN e os avisos. Para qualquer outro serviço, a lista de referência é a Service Authorization Reference da documentação da AWS.
O que é uma política de confiança?
Uma política de confiança é a política baseada em recursos anexada a uma função do IAM que diz quem pode assumi-la; as políticas de permissões da função dizem depois o que esse principal pode fazer ao assumi-la. Para o GitHub Actions com OIDC, a política de confiança permite sts:AssumeRoleWithWebIdentity ao principal federado token.actions.githubusercontent.com, com condições que exigem que a claim aud seja sts.amazonaws.com e que a claim sub corresponda ao seu repositório, por exemplo repo:my-org/my-repo:ref:refs/heads/main — ou, para repositórios criados após 15 de julho de 2026, a forma imutável repo:my-org@<owner-id>/my-repo@<repo-id>:ref:refs/heads/main. Sem a condição em sub, qualquer repositório do GitHub poderia assumir a função. A política de confiança de uma função tem limite padrão de 2.048 caracteres, ajustável até 8.192.
Minha política sai do navegador em algum momento?
Não. O gerador roda 100% no cliente: o catálogo de ações vem com a página e cada política é montada na aba do seu navegador. Nada é enviado a um servidor, não há conta nem cadastro, e o link de compartilhamento codifica sua política no fragmento da URL, que os navegadores nunca enviam a um servidor.
More free, private DevOps tools.
O AWS IAM Policy Generator é uma das ferramentas do OpsCanopy — uma copa crescente de validadores, conversores e testadores no navegador que nunca tocam um servidor.
Mais em Segurança
Começando com AWS? Leia o guia de AWS →
42 ferramentas gratuitas, todas capazes de funcionar offline — o opscanopy.com não exige cadastro e não envia nada.
Mais para proteger um pipeline: o JWT Decoder e o Certificate Decoder, ou explore o diretório de ferramentas.
O gerador verifica a estrutura, as cotas e os excessos de permissão comuns, mas não avalia SCPs, limites de permissões nem políticas de sessão — teste com o IAM Access Analyzer antes do deploy. OpsCanopy é gratuito e aberto.