Claude Code × AWS IAM Guia Completo | Gere Políticas de Menor Privilégio Automaticamente
Otimize o design de políticas AWS IAM com Claude Code. Geração automática de políticas de menor privilégio, revisão de segurança de políticas existentes e implementação com CDK—com exemplos de código reais.
O design de políticas IAM é “discreto mas catastrófico quando mal feito”. Políticas com abuso de curingas (*) são focos de incidentes de segurança. Porém, escrever políticas de menor privilégio do zero demanda tempo.
Eu opero uma arquitetura serverless combinando Lambda, S3, DynamoDB e CloudWatch em produção. Ao delegar o design e a revisão de políticas IAM ao Claude Code, reduzi o tempo de trabalho em aproximadamente 70%. Este artigo explica os passos práticos.
Fundamentos do IAM em 3 Minutos
Estrutura de uma Política
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:PutObject"],
"Resource": "arn:aws:s3:::my-bucket/*",
"Condition": {
"StringEquals": {
"s3:prefix": ["uploads/"]
}
}
}
]
}
- Effect: Allow (Permitir) ou Deny (Negar)
- Action: As ações de API a permitir/negar
- Resource: ARN do recurso alvo (mais específico = mais seguro)
- Condition: Condições adicionais (restrições de IP, MFA obrigatório, etc.)
Princípio do Menor Privilégio
“Permitir apenas as operações necessárias, apenas nos recursos necessários” é a regra de ouro do IAM.
❌ Perigoso: Abuso de curingas
Action: "*"
Resource: "*"
✅ Seguro: Especificar concretamente
Action: ["s3:GetObject", "s3:PutObject"]
Resource: "arn:aws:s3:::my-uploads-bucket/user-files/*"
Passo 1: Descrever o Caso de Uso e Gerar Automaticamente uma Política
Gerando uma Política para Lambda
claude -p "
Gere a política IAM mínima necessária em JSON para a seguinte função Lambda.
[Processamento Lambda]
- Ler imagens do bucket S3 'user-uploads-prod'
- Salvar imagens processadas em 'user-thumbnails-prod'
- Registrar resultados na tabela DynamoDB 'image-metadata'
- Notificar o tópico SNS 'alert-topic' em caso de erro
- Escrever logs no CloudWatch Logs
[Restrições]
- Operações de exclusão não são necessárias
- Usar ID de conta 123456789012, região ap-northeast-1 para ARNs de recursos
- Sem restrição de IP via Condition (desnecessário para Lambda)
"
Exemplo gerado:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "S3ReadSourceBucket",
"Effect": "Allow",
"Action": ["s3:GetObject"],
"Resource": "arn:aws:s3:::user-uploads-prod/*"
},
{
"Sid": "S3WriteThumbnailBucket",
"Effect": "Allow",
"Action": ["s3:PutObject"],
"Resource": "arn:aws:s3:::user-thumbnails-prod/*"
},
{
"Sid": "DynamoDBWriteMetadata",
"Effect": "Allow",
"Action": ["dynamodb:PutItem", "dynamodb:UpdateItem"],
"Resource": "arn:aws:dynamodb:ap-northeast-1:123456789012:table/image-metadata"
},
{
"Sid": "SNSPublishAlert",
"Effect": "Allow",
"Action": ["sns:Publish"],
"Resource": "arn:aws:sns:ap-northeast-1:123456789012:alert-topic"
},
{
"Sid": "CloudWatchLogs",
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:ap-northeast-1:123456789012:log-group:/aws/lambda/*"
}
]
}
Passo 2: Revisão de Segurança de Políticas Existentes
Peça ao Claude Code para revisar políticas existentes em busca de problemas.
claude -p "
Revise a seguinte política IAM do ponto de vista de segurança.
Identifique problemas específicos e forneça sugestões concretas de remediação.
$(cat policy.json)
"
Problemas típicos identificados pelo Claude Code:
Problema 1: Resource: "*" concede acesso total ao S3
→ Especificar buckets alvo e prefixos explicitamente
Problema 2: s3:DeleteObject está incluído mas não é necessário pelo processo
→ Remover a operação de exclusão
Problema 3: iam:PassRole é permitido com recurso curinga
→ Restringir PassRole apenas a ARNs de papéis específicos (risco de escalada de privilégios)
Problema 4: Ativação do CloudTrail não pode ser confirmada
→ Recomendar ativar o registro de operações IAM
Passo 3: Automatizando o Design de Papéis
Design de Papéis Abrangendo Múltiplos Serviços
claude -p "
Projete todos os papéis IAM necessários para a seguinte arquitetura:
[Arquitetura]
- API Gateway → Lambda (autenticação)
- Lambda → DynamoDB (leitura/escrita de dados de usuário)
- Lambda → S3 (armazenamento de arquivos)
- Lambda → SES (envio de e-mail)
- CloudWatch Events → Lambda (processamento em lote)
- CodePipeline → S3, CodeBuild, Lambda (implantação)
[Formato de saída]
- Nome e propósito de cada papel
- Trust Policy
- Access Policy
- Saída como código TypeScript AWS CDK
"
Implementação CDK dos Papéis
// lib/iam-stack.ts
import * as cdk from "aws-cdk-lib";
import * as iam from "aws-cdk-lib/aws-iam";
import * as lambda from "aws-cdk-lib/aws-lambda";
export class IamStack extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// Papel de execução Lambda (menor privilégio)
const lambdaRole = new iam.Role(this, "ApiLambdaRole", {
assumedBy: new iam.ServicePrincipal("lambda.amazonaws.com"),
roleName: "api-lambda-role",
description: "Papel de menor privilégio para API Lambda",
});
// Permissões de leitura/escrita DynamoDB (apenas tabela específica)
lambdaRole.addToPolicy(
new iam.PolicyStatement({
sid: "DynamoDBAccess",
effect: iam.Effect.ALLOW,
actions: [
"dynamodb:GetItem",
"dynamodb:PutItem",
"dynamodb:UpdateItem",
"dynamodb:Query",
],
resources: [
`arn:aws:dynamodb:${this.region}:${this.account}:table/users`,
`arn:aws:dynamodb:${this.region}:${this.account}:table/users/index/*`,
],
})
);
// Permissões de escrita S3 (apenas bucket e prefixo específicos)
lambdaRole.addToPolicy(
new iam.PolicyStatement({
sid: "S3FileUpload",
effect: iam.Effect.ALLOW,
actions: ["s3:PutObject", "s3:GetObject"],
resources: [
`arn:aws:s3:::user-files-${this.account}/uploads/*`,
],
})
);
// Permissões de envio de e-mail SES
lambdaRole.addToPolicy(
new iam.PolicyStatement({
sid: "SESSendEmail",
effect: iam.Effect.ALLOW,
actions: ["ses:SendEmail", "ses:SendRawEmail"],
resources: ["*"],
conditions: {
StringEquals: {
"ses:FromAddress": "[email protected]",
},
},
})
);
// Permissões de escrita no CloudWatch Logs
lambdaRole.addManagedPolicy(
iam.ManagedPolicy.fromAwsManagedPolicyName(
"service-role/AWSLambdaBasicExecutionRole"
)
);
}
}
Passo 4: Revisão dos Resultados do IAM Access Analyzer
Peça ao Claude Code para revisar a saída do IAM Access Analyzer.
# Obter resultados do Access Analyzer
aws accessanalyzer list-findings --analyzer-arn arn:aws:access-analyzer:... \
--output json > analyzer-findings.json
claude -p "
Leia os seguintes resultados do IAM Access Analyzer e:
1. Classifique por severidade (HIGH/MEDIUM/LOW)
2. Identifique itens que requerem remediação imediata
3. Forneça etapas de remediação específicas para cada um
$(cat analyzer-findings.json)
"
Passo 5: Design de SCPs (Proteções em Nível Organizacional)
Ao usar AWS Organizations, use SCPs (Service Control Policies) para estabelecer proteções para contas inteiras.
claude -p "
Projete um SCP para aplicar a contas AWS de produção.
Deve satisfazer os seguintes requisitos:
1. Desabilitar todas as regiões exceto ap-northeast-1 (Tóquio) e us-east-1 (Virgínia)
2. Proibir operações API pela conta root
3. Proibir desabilitar ou excluir CloudTrail
4. Proibir desabilitar GuardDuty
5. Proibir alterações em um papel IAM específico ('OrganizationAdminRole')
"
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyUnsupportedRegions",
"Effect": "Deny",
"Action": "*",
"Resource": "*",
"Condition": {
"StringNotEquals": {
"aws:RequestedRegion": ["ap-northeast-1", "us-east-1"]
},
"ArnNotLike": {
"aws:PrincipalARN": [
"arn:aws:iam::*:role/OrganizationAdminRole"
]
}
}
},
{
"Sid": "DenyCloudTrailModification",
"Effect": "Deny",
"Action": [
"cloudtrail:DeleteTrail",
"cloudtrail:StopLogging",
"cloudtrail:UpdateTrail"
],
"Resource": "*"
}
]
}
4 Armadilhas Comuns
1. iam:PassRole com excesso de privilégios
// ❌ Perigoso: qualquer papel pode ser passado
{
"Action": "iam:PassRole",
"Resource": "*"
}
// ✅ Seguro: apenas papel específico
{
"Action": "iam:PassRole",
"Resource": "arn:aws:iam::123456789:role/MyLambdaRole",
"Condition": {
"StringEquals": {
"iam:PassedToService": "lambda.amazonaws.com"
}
}
}
2. Uso excessivo de Políticas Gerenciadas pela AWS
Políticas gerenciadas como AmazonS3FullAccess são convenientes mas incluem muito mais permissões do que o necessário. Se Lambda apenas lê do S3, use uma política personalizada com apenas s3:GetObject.
3. Misturando Políticas Inline com Políticas Gerenciadas Personalizadas
Políticas inline não podem ser reutilizadas e são difíceis de rastrear. Padronize em políticas gerenciadas e controle versões.
4. Requisito de MFA Faltante via Conditions
Sempre exija MFA ao alternar para papéis de administrador.
{
"Condition": {
"BoolIfExists": {
"aws:MultiFactorAuthPresent": "true"
}
}
}
Resumo
| Tarefa | Contribuição do Claude Code |
|---|---|
| Geração de políticas | Gera políticas de menor privilégio apenas com uma descrição |
| Revisão de segurança | Identifica problemas e sugere correções para políticas existentes |
| Design de papéis | Projeta estrutura de papéis para toda a arquitetura |
| Implementação CDK | Gera automaticamente código TypeScript IAM |
| Design de SCP | Gera políticas guardrail em nível organizacional |
IAM não é “configurar e esquecer”—revisões regulares são essenciais. Criar o hábito de ter o Claude Code revisando políticas existentes mensalmente é uma forma simples de reduzir continuamente o risco de segurança.
Artigos Relacionados
- Guia Completo de Melhores Práticas de Segurança do Claude Code
- Claude Code × AWS Lambda Guia Completo
- Claude Code × AWS DynamoDB Guia Completo
Referências
Leve seu fluxo no Claude Code a outro nível
50 modelos de prompt testados em campo, prontos para colar direto no Claude Code.
PDF gratuito: Cheatsheet do Claude Code em 5 minutos
Basta informar seu e-mail e enviamos na hora o cheatsheet em uma página A4.
Cuidamos dos seus dados pessoais e nunca enviamos spam.
Sobre o autor
Masa
Engenheiro apaixonado por Claude Code. Mantém o claudecode-lab.com, uma mídia tech em 10 idiomas com mais de 2.000 páginas.
Artigos relacionados
Claude Code × Amazon Bedrock Guia Completo | Executando Claude em Produção com AWS
Guia completo para usar Amazon Bedrock com Claude Code. De autenticação IAM, streaming, integração com Lambda, implementação RAG até otimização de custos — baseado na experiência real de produção de Masa.
Claude Code × AWS CodePipeline/CodeBuild Guia Completo | Construção Automática de Pipeline CI/CD
Construa CI/CD automaticamente com AWS CodePipeline e CodeBuild usando Claude Code. Exemplos reais de código para design de pipeline, geração de buildspec.yml, automação de testes e infraestrutura CDK.
Claude Code × AWS CloudWatch Guia Completo | Análise de Logs, Alarmes e Dashboards Automáticos
Otimize o AWS CloudWatch com o Claude Code. Código prático para análise de padrões de logs, configuração automática de alarmes, dashboards de métricas e investigação de incidentes.