Parte: 10 — Seguridad en la nube y contenedores · Fuente: AWS IAM User Guide y AWS Well-Architected: Identity and Access Management ⏱️ Duración estimada: 120 min · Nivel: Intermedio
Dominar la gestión de identidad y acceso (IAM) como el verdadero perímetro de la nube: cómo se modelan usuarios, grupos, roles y políticas; cómo se evalúa una petición; y cómo aplicar privilegio mínimo evitando las rutas de escalada de privilegios que buscan los atacantes.
Al finalizar, el alumno podrá:
iam:PassRole, iam:CreatePolicyVersion, etc.).| # | Tema | Por qué importa |
|---|---|---|
| 1 | Principals: usuarios, grupos, roles | Base del modelo de acceso |
| 2 | Políticas de identidad vs de recurso | Definen permisos desde dos lados |
| 3 | Roles asumibles y STS | Credenciales temporales en lugar de claves largas |
| 4 | Lógica de evaluación de permisos | Predecir si una acción se permite o deniega |
| 5 | Privilegio mínimo y límites de permisos | Reducen el blast radius |
| 6 | Escalada de privilegios IAM | Rutas que convierten un permiso menor en admin |
| 7 | Federación y SSO | Centralizar identidades corporativas |
Effect, Action, Resource y Condition. Clave: define permisos de forma declarativa.sts:AssumeRole: acción que cambia de identidad. Clave: base de la federación y de muchas rutas de escalada.iam:PassRole + ec2:RunInstances equivalen a admin.aws, az, gcloud) con una cuenta de laboratorio.# Enumerar usuarios y sus claves de acceso (AWS)
aws iam list-users
aws iam list-access-keys --user-name lab-user
# Simular si una acción está permitida
aws iam simulate-principal-policy \
--policy-source-arn arn:aws:iam::123456789012:user/lab-user \
--action-names s3:DeleteBucket
⚠️ Contenido con componente ofensivo. Ejecuta todo exclusivamente en tu propia cuenta de laboratorio.
lab-user sin permisos y un rol lab-admin-role con AdministratorAccess.lab-user una política que solo permita iam:PassRole y ec2:RunInstances.pmapper graph create y luego pmapper query "who can do iam:* with *". Observa cómo el usuario aparente-mínimo puede escalar a admin lanzando una instancia con el rol admin.lab-admin-role y obtén sus credenciales temporales desde el servicio de metadatos.lab-user y añade una Condition que restrinja qué roles puede pasar (iam:PassedToService). Repite el ataque y verifica que ahora falla.prowler aws -c iam_* y revisa hallazgos de claves inactivas y políticas con comodín *.Deny explícito y un Allow simultáneos.Condition que exija MFA para acciones destructivas.Parte de una política demasiado amplia ("Action": "*", "Resource": "*") y refactorízala a
privilegio mínimo para un caso de uso concreto (una app que lee de una tabla y escribe en una cola).
Criterio de aceptación: la política final solo incluye las acciones estrictamente necesarias sobre
los ARNs concretos, incluye al menos una Condition, y simulate-principal-policy confirma que las
acciones legítimas se permiten y una acción no relacionada se deniega.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
AccessDenied inesperado |
SCP u organización deniega arriba; revisa políticas heredadas y deny explícitos. |
Política con "Action": "*" en producción |
Privilegio excesivo; refactoriza a acciones concretas y usa Access Analyzer. |
| Claves de acceso en el código | Credenciales estáticas filtrables; migra a roles y rota/revoca de inmediato. |
iam:PassRole sin condición |
Ruta de escalada; restringe con Condition sobre servicio y rol destino. |
| Usuarios inactivos con claves activas | Falta de revisión; deshabilita credenciales sin uso > 90 días. |
❓ ¿Rol o usuario para una aplicación? Siempre rol. Un rol da credenciales temporales que rotan solas; una clave de usuario es un secreto permanente que, si se filtra, sirve al atacante indefinidamente.
❓ ¿Qué pasa si una política de identidad permite algo y una de recurso lo deniega? Gana el deny. La evaluación combina todas las políticas aplicables y cualquier deny explícito prevalece sobre cualquier allow.
❓ ¿Cómo aplico privilegio mínimo sin frenar al equipo? Empieza permisivo pero mide: usa Access Analyzer/policy usage para ver qué se usa realmente y recorta lo no utilizado. Itera en vez de adivinar.
Clase 221 — Fundamentos de seguridad en la nube y responsabilidad compartida