Use Cases

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

TarefaContribuição do Claude Code
Geração de políticasGera políticas de menor privilégio apenas com uma descrição
Revisão de segurançaIdentifica problemas e sugere correções para políticas existentes
Design de papéisProjeta estrutura de papéis para toda a arquitetura
Implementação CDKGera automaticamente código TypeScript IAM
Design de SCPGera 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

Referências

#claude-code #aws #iam #security #typescript #infrastructure

Leve seu fluxo no Claude Code a outro nível

50 modelos de prompt testados em campo, prontos para colar direto no Claude Code.

Grátis

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.

Masa

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.