Terceiro post do Nível Intermediário da série AWS IAM. Vamos aplicar tudo o que vimos até aqui em um dos usos mais frequentes e importantes das roles: dar permissões a serviços e aplicações sem expor chaves. Este é o padrão que você vai repetir dezenas de vezes na vida real.
📚 O que você vai aprender neste post:
Toda role combina duas peças que trabalham juntas — e confundir os papéis delas é fonte de muita dor de cabeça:
Uma boa analogia: a trust policy é a lista de convidados na porta (quem entra); a permission policy é o que o convidado pode fazer depois de dentro.
Vamos montar, do zero, a role de uma função Lambda que insere pedidos em uma tabela DynamoDB chamada Pedidos. Passo a passo:
A trust policy autoriza o serviço Lambda a assumir a role:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
A permission policy concede apenas a ação necessária, num recurso específico (menor privilégio em ação):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "dynamodb:PutItem", "Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/Pedidos" } ] }
Pronto: a Lambda grava na tabela Pedidos usando credenciais temporárias, sem nenhuma chave armazenada no código. Se amanhã ela também precisar ler a tabela, você adiciona dynamodb:GetItem — e só isso.
Com a EC2 há um detalhe a mais: a role é entregue à instância por meio de um instance profile — um “contêiner” que embrulha a role e é anexado à máquina. Ao criar a associação pelo console, esse instance profile é gerado automaticamente, então na prática você raramente pensa nele. Mas, ao usar Terraform, CloudFormation ou a CLI, é preciso criá-lo explicitamente — e essa é uma pegadinha frequente.
Você não gerencia nada disso manualmente. A AWS injeta as credenciais temporárias no ambiente de execução (via STS nos bastidores), e o SDK as descobre e utiliza automaticamente, seguindo a “cadeia padrão de provedores de credenciais”. Para a EC2, elas ficam disponíveis através do IMDS (o serviço de metadados da instância); para a Lambda, via variáveis de ambiente gerenciadas pela própria plataforma.
dynamodb:* ou Resource: "*" quando você sabe exatamente a tabela e a ação.Você agora entende a anatomia das policies, os tipos de política e como usar roles para dar acesso seguro a serviços — a trust policy diz quem assume, a permission policy diz o que pode fazer. Esses são os pilares operacionais do IAM no dia a dia.
Vale entender como o SDK “acha” as credenciais da role automaticamente. Ele segue uma cadeia de provedores, verificando fontes em ordem: variáveis de ambiente, arquivos de configuração, credenciais de contêiner (ECS) e, por fim, o serviço de metadados da instância (EC2). Ao rodar dentro da AWS com uma role anexada, as últimas etapas da cadeia entregam as credenciais temporárias sem que você escreva uma linha de configuração.
Esse comportamento tem uma consequência prática importante: se alguém definir chaves de acesso em variáveis de ambiente na mesma máquina, elas têm precedência sobre a role — e podem mascarar problemas ou introduzir credenciais permanentes indesejadas. Em ambientes com roles, mantenha a máquina “limpa” de chaves para que a role seja de fato usada.
Quando um serviço da AWS assume uma role em seu nome (por exemplo, o SNS invocando uma função, ou o CloudWatch executando uma ação), é boa prática restringir a confiança com as condições aws:SourceArn e aws:SourceAccount na trust policy. Elas garantem que apenas o recurso específico (e a sua conta) possa acionar aquela role, evitando que outro recurso — potencialmente de terceiros — se aproveite da relação de confiança.
Esse é o mesmo princípio do “confused deputy” que veremos no acesso cross-account, aplicado a serviços. Adotá-lo desde cedo evita uma classe inteira de configurações perigosas que passam despercebidas.
Entramos no Nível Avançado, começando por permission boundaries — como limitar o teto de privilégio de identidades com segurança. 🟠
Informações sobre o autor

Dennis Silva atua com Segurança da Informação e Cibersegurança há +18 anos e iniciou sua carreira em uma das Big Four em auditoria de sistemas.
Atualmente, atua como Consultor de Cibersegurança no time de Professional Services da AWS na América Latina (Brasil), função que exerce há mais de 4 anos, com foco no atendimento a instituições financeiras.
Trabalhou como Coordenador de Segurança da Informação na maior empresa de desenvolvimento de software na América Latina. Anteriormente, atuou como consultor de Segurança da Informação, com foco em identificar e avaliar os riscos inerentes ao negócio e validar os controles existentes por meio de testes de invasão em infraestrutura interna/externa, aplicações Web e ERPs como SAP e TOTVS.
Foi responsável pela implementação da certificação ISO/IEC 27001:2013 na maior empresa de desenvolvimento de software da América Latina, potencializando a principal oferta de comercialização de software como serviço (SaaS) em datacenter próprio.