Claude Code × AWS IAM Guía Completa | Genera Políticas de Mínimo Privilegio Automáticamente
Optimiza el diseño de políticas AWS IAM con Claude Code. Generación automática de políticas de mínimo privilegio, revisión de seguridad de políticas existentes e implementación con CDK—todo con ejemplos de código reales.
El diseño de políticas IAM es “discreto pero catastrófico cuando se hace mal”. Las políticas con abuso de comodines (*) son caldos de cultivo para incidentes de seguridad. Sin embargo, escribir políticas de mínimo privilegio desde cero lleva tiempo.
Opero una arquitectura serverless combinando Lambda, S3, DynamoDB y CloudWatch en producción. Al delegar el diseño y la revisión de políticas IAM a Claude Code, reduje el tiempo de trabajo en aproximadamente un 70%. Este artículo explica los pasos prácticos.
Conceptos básicos de IAM en 3 minutos
Estructura de una 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) o Deny (Denegar)
- Action: Las acciones de API a permitir/denegar
- Resource: ARN del recurso objetivo (más específico = más seguro)
- Condition: Condiciones adicionales (restricciones de IP, MFA requerido, etc.)
Principio de mínimo privilegio
“Permite solo las operaciones necesarias, en solo los recursos necesarios” es la regla de oro de IAM.
❌ Peligroso: Abuso de comodines
Action: "*"
Resource: "*"
✅ Seguro: Especificar concretamente
Action: ["s3:GetObject", "s3:PutObject"]
Resource: "arn:aws:s3:::my-uploads-bucket/user-files/*"
Step 1: Describir el caso de uso y generar automáticamente una política
Generación de una política para Lambda
claude -p "
Genera la política IAM mínima requerida en JSON para la siguiente función Lambda.
[Procesamiento Lambda]
- Leer imágenes del bucket S3 'user-uploads-prod'
- Guardar imágenes procesadas en 'user-thumbnails-prod'
- Registrar resultados en la tabla DynamoDB 'image-metadata'
- Notificar al topic SNS 'alert-topic' en caso de error
- Escribir logs en CloudWatch Logs
[Restricciones]
- Las operaciones de eliminación no son necesarias
- Usar ID de cuenta 123456789012, región ap-northeast-1 para ARNs de recursos
- Sin restricción de IP por Condition (no necesario para Lambda)
"
Ejemplo generado:
{
"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/*"
}
]
}
Step 2: Revisión de seguridad de políticas existentes
Pida a Claude Code revisar las políticas existentes en busca de problemas.
claude -p "
Revisa la siguiente política IAM desde una perspectiva de seguridad.
Identifica problemas específicos y proporciona sugerencias de remediación concretas.
$(cat policy.json)
"
Problemas típicos que Claude Code detecta:
Problema 1: Resource: "*" otorga acceso completo a S3
→ Especificar buckets objetivo y prefijos explícitamente
Problema 2: s3:DeleteObject está incluido pero no es requerido por el proceso
→ Eliminar la operación de borrado
Problema 3: iam:PassRole está permitido con recurso comodín
→ Restringir PassRole solo a ARNs de roles específicos (riesgo de escalación de privilegios)
Problema 4: No se puede confirmar la habilitación de CloudTrail
→ Recomendar habilitar el registro de operaciones IAM
Step 3: Automatización del diseño de roles
Diseño de roles abarcando múltiples servicios
claude -p "
Diseña todos los roles IAM necesarios para la siguiente arquitectura:
[Arquitectura]
- API Gateway → Lambda (autenticación)
- Lambda → DynamoDB (lectura/escritura de datos de usuario)
- Lambda → S3 (almacenamiento de archivos)
- Lambda → SES (envío de correos)
- CloudWatch Events → Lambda (procesamiento por lotes)
- CodePipeline → S3, CodeBuild, Lambda (despliegue)
[Formato de salida]
- Nombre y propósito de cada rol
- Trust Policy
- Access Policy
- Salida como código TypeScript de AWS CDK
"
Implementación CDK de los roles
// 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);
// Rol de ejecución Lambda (mínimo privilegio)
const lambdaRole = new iam.Role(this, "ApiLambdaRole", {
assumedBy: new iam.ServicePrincipal("lambda.amazonaws.com"),
roleName: "api-lambda-role",
description: "Rol de mínimo privilegio para API Lambda",
});
// Permisos de lectura/escritura DynamoDB (solo tabla 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/*`,
],
})
);
// Permisos de escritura S3 (solo bucket y prefijo 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/*`,
],
})
);
// Permisos de envío de correo SES
lambdaRole.addToPolicy(
new iam.PolicyStatement({
sid: "SESSendEmail",
effect: iam.Effect.ALLOW,
actions: ["ses:SendEmail", "ses:SendRawEmail"],
resources: ["*"],
conditions: {
StringEquals: {
"ses:FromAddress": "[email protected]",
},
},
})
);
// Permisos de escritura en CloudWatch Logs
lambdaRole.addManagedPolicy(
iam.ManagedPolicy.fromAwsManagedPolicyName(
"service-role/AWSLambdaBasicExecutionRole"
)
);
}
}
Step 4: Revisión de resultados de IAM Access Analyzer
Pida a Claude Code revisar la salida de IAM Access Analyzer.
# Recuperar resultados de Access Analyzer
aws accessanalyzer list-findings --analyzer-arn arn:aws:access-analyzer:... \
--output json > analyzer-findings.json
claude -p "
Lee los siguientes resultados de IAM Access Analyzer y:
1. Clasifica por severidad (HIGH/MEDIUM/LOW)
2. Identifica elementos que requieren remediación inmediata
3. Proporciona pasos de remediación específicos para cada uno
$(cat analyzer-findings.json)
"
Step 5: Diseño de SCPs (Barreras de protección a nivel organizacional)
Al usar AWS Organizations, use SCPs (Service Control Policies) para establecer barreras de protección para cuentas completas.
claude -p "
Diseña un SCP para aplicar a cuentas AWS de producción.
Debe satisfacer los siguientes requisitos:
1. Deshabilitar todas las regiones excepto ap-northeast-1 (Tokio) y us-east-1 (Virginia)
2. Prohibir operaciones API por la cuenta root
3. Prohibir deshabilitar o eliminar CloudTrail
4. Prohibir deshabilitar GuardDuty
5. Prohibir cambios a un rol 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 errores comunes a evitar
1. iam:PassRole con exceso de privilegios
// ❌ Peligroso: cualquier rol puede ser pasado
{
"Action": "iam:PassRole",
"Resource": "*"
}
// ✅ Seguro: solo rol específico
{
"Action": "iam:PassRole",
"Resource": "arn:aws:iam::123456789:role/MyLambdaRole",
"Condition": {
"StringEquals": {
"iam:PassedToService": "lambda.amazonaws.com"
}
}
}
2. Abuso de políticas administradas por AWS
Las políticas administradas como AmazonS3FullAccess son convenientes pero incluyen muchos más permisos de los necesarios. Si Lambda solo lee de S3, usa una política personalizada con solo s3:GetObject.
3. Mezcla de políticas inline y políticas administradas personalizadas
Las políticas inline no pueden reutilizarse y son difíciles de rastrear. Estandariza en políticas administradas y gestiona versiones.
4. Requisito de MFA faltante a través de Conditions
Siempre exige MFA al cambiar a roles de administrador.
{
"Condition": {
"BoolIfExists": {
"aws:MultiFactorAuthPresent": "true"
}
}
}
Resumen
| Tarea | Contribución de Claude Code |
|---|---|
| Generación de políticas | Genera políticas de mínimo privilegio solo con una descripción |
| Revisión de seguridad | Identifica problemas y sugiere correcciones para políticas existentes |
| Diseño de roles | Diseña la estructura de roles para toda la arquitectura |
| Implementación CDK | Genera automáticamente código TypeScript IAM |
| Diseño de SCP | Genera políticas guardrail a nivel organizacional |
IAM no es “configurar y olvidar”—las revisiones regulares son esenciales. Desarrollar el hábito de que Claude Code revise las políticas existentes mensualmente es una forma sencilla de reducir continuamente el riesgo de seguridad.
Artículos relacionados
- Guía completa de mejores prácticas de seguridad de Claude Code
- Claude Code × AWS Lambda Guía completa
- Claude Code × AWS DynamoDB Guía completa
Referencias
Lleva tu flujo con Claude Code al siguiente nivel
50 plantillas de prompts probadas en producción, listas para copiar y pegar en Claude Code.
PDF gratuito: Hoja de trucos de Claude Code en 5 minutos
Solo deja tu correo y te enviaremos al instante la hoja de trucos en una página A4.
Cuidamos tus datos personales y nunca enviamos spam.
Sobre el autor
Masa
Ingeniero apasionado por Claude Code. Dirige claudecode-lab.com, un medio tecnológico en 10 idiomas con más de 2.000 páginas.
Artículos relacionados
Claude Code × Amazon Bedrock Guía Completa | Ejecutar Claude en Producción con AWS
Guía completa para usar Amazon Bedrock con Claude Code. Desde autenticación IAM, streaming, integración con Lambda, implementación RAG hasta optimización de costos, basada en la experiencia real de producción de Masa.
Claude Code × AWS CodePipeline/CodeBuild Guía Completa | Construcción automática de pipelines CI/CD
Construye automáticamente CI/CD con AWS CodePipeline y CodeBuild usando Claude Code. Ejemplos reales de diseño de pipelines, generación de buildspec.yml, automatización de pruebas e infraestructura CDK.
Claude Code × AWS CloudWatch Guía Completa | Análisis de Logs, Alarmas y Dashboards Automáticos
Optimiza AWS CloudWatch con Claude Code. Código práctico para análisis de patrones de logs, configuración automática de alarmas, dashboards de métricas e investigación de incidentes.