IAM para iniciantes: o primeiro serviço que todo dev deve dominar na AWS
Antes de criar qualquer recurso na AWS, entenda quem pode fazer o quê na sua conta: conceitos, primeiros passos e boas práticas de IAM para devs iniciantes.
Antes de subir um bucket S3, uma função Lambda ou uma instância EC2, existe uma pergunta que vem primeiro: quem pode fazer o quê na sua conta? Quem responde isso é o AWS Identity and Access Management (IAM). Este é o primeiro artigo de uma série curta para devs que estão começando na AWS, e não por acaso começa por aqui: errar no IAM é o caminho mais rápido para uma conta invadida ou uma fatura inesperada.
O que é o IAM
O IAM é o serviço que controla autenticação (quem você é) e autorização (o que você pode fazer) na AWS. Toda chamada que você faz, seja pelo console, pela AWS CLI ou por um SDK, passa por ele. Se a identidade não tiver permissão para a ação, a resposta é um
AccessDenied.E uma boa notícia: o IAM, o IAM Identity Center e o AWS STS não têm custo adicional. Você paga apenas pelos outros serviços que usar com essas credenciais.
Quando usar
Sempre. Mais especificamente, você vai lidar com o IAM quando precisar:
- dar acesso ao console ou à CLI para você e para o seu time;
- permitir que uma aplicação (Lambda, EC2, ECS) acesse outro serviço, como ler arquivos do S3;
- restringir o acesso a um recurso específico, e não à conta inteira.
Conceitos-chave
- Usuário root: a identidade criada junto com a conta, com acesso total. Use só para as poucas tarefas que exigem root e proteja com MFA.
- Usuário IAM: identidade com credenciais de longo prazo (senha e/ou access keys). Hoje a AWS recomenda evitá-los para pessoas sempre que possível.
- Grupo: um conjunto de usuários IAM que compartilham permissões.
- Role (função): identidade sem senha fixa, que é "assumida" e entrega credenciais temporárias. É o jeito certo de dar permissão a aplicações.
- Policy (política): documento JSON que diz quais ações (
Action) são permitidas ou negadas (Effect) em quais recursos (Resource). - Menor privilégio: conceda só o necessário para a tarefa. Comece com políticas gerenciadas pela AWS e vá refinando.
Primeiros passos
1. Proteja o usuário root
Entre no console com o e-mail da conta, abra IAM > Painel e ative o MFA para o root. A AWS recomenda MFA resistente a phishing, como passkeys ou chaves de segurança. Não crie access keys para o root.
2. Crie uma identidade para o dia a dia
O caminho recomendado pela AWS para pessoas é o IAM Identity Center: você cria seu usuário lá, atribui um conjunto de permissões (por exemplo,
AdministratorAccess para a sua conta pessoal de estudos) e passa a entrar por um portal de acesso, com credenciais temporárias.3. Configure a AWS CLI com SSO
Com a AWS CLI v2 instalada:
1
2
3
4
5
6
aws configure sso
# informe a URL do portal de acesso, a região e escolha conta/permissões
# dê um nome ao perfil, por exemplo: estudos
aws sso login --profile estudos
aws sts get-caller-identity --profile estudosO último comando mostra qual identidade está fazendo as chamadas. Ele é o seu melhor amigo para depurar erros de permissão.
4. Escreva sua primeira policy de menor privilégio
Imagine uma aplicação que só precisa ler objetos de um bucket. Crie o arquivo
politica.json:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::meu-bucket-exemplo"
},
{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::meu-bucket-exemplo/*"
}
]
}E crie a política gerenciada pelo cliente:
1
2
3
4
aws iam create-policy \
--policy-name LeituraMeuBucketExemplo \
--policy-document file://politica.json \
--profile estudosRepare que
ListBucket age sobre o bucket e GetObject sobre os objetos (/*). Esse detalhe confunde muita gente no começo.5. Um exemplo em Python (boto3)
Um script simples de auditoria: mostra quem você é e lista os usuários IAM que ainda não têm MFA.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import boto3
from botocore.exceptions import ClientError
session = boto3.Session(profile_name="estudos")
sts = session.client("sts")
iam = session.client("iam")
def main() -> None:
identidade = sts.get_caller_identity()
print(f"Conta: {identidade['Account']} | ARN: {identidade['Arn']}")
try:
paginator = iam.get_paginator("list_users")
for pagina in paginator.paginate():
for usuario in pagina["Users"]:
nome = usuario["UserName"]
mfa = iam.list_mfa_devices(UserName=nome)["MFADevices"]
status = "OK" if mfa else "SEM MFA"
print(f"{nome}: {status}")
except ClientError as erro:
print(f"Erro ao consultar o IAM: {erro.response['Error']['Code']}")
if __name__ == "__main__":
main()Instale com
pip install boto3 e rode depois do aws sso login. Se aparecer AccessDenied, sua identidade não tem permissão para iam:ListUsers, e isso é o IAM funcionando.Custos e cuidados
- IAM é gratuito, mas uma credencial vazada pode gerar custos enormes em outros serviços. Nunca coloque access keys no código ou no Git.
- Prefira roles a access keys. Em Lambda e EC2, o SDK pega as credenciais temporárias da role sozinho.
- Revise o que não é usado. O IAM mostra a informação de "último acesso" para ajudar a remover usuários, roles e permissões parados.
- Mudanças levam alguns segundos para propagar, porque o IAM é eventualmente consistente. Não crie usuários ou roles no caminho crítico da aplicação.
- Configure um alerta de orçamento (AWS Budgets) logo no primeiro dia. Vamos falar disso no fim da série.
Próximos passos
- Explore o IAM Access Analyzer para validar suas políticas.
- Crie uma role para uma função Lambda e veja como ela recebe permissões sem nenhuma chave.
- No próximo artigo: Amazon S3, onde a policy que você escreveu hoje vai ganhar vida.
Documentação oficial
Enjoyed reading this content? Let the author know!
Your likes, comments, shares, and saves help creators reach more builders.
Loading recommendations
Loading article