AWS IAM Explicado: Usuarios, Grupos, Politicas, MFA y Mejores Practicas
Aprende los fundamentos de AWS IAM: usuarios, grupos, politicas JSON, configuracion de MFA, seguridad de la cuenta root y el principio de menor privilegio.
AWS Identity and Access Management (IAM) es el sistema de seguridad central de AWS. Controla quién puede hacer qué en tu cuenta de AWS. Sin un IAM apropiado, tu infraestructura está en riesgo: costos descontrolados, brechas de datos o incluso compromiso completo de la cuenta.
En esta guía (Parte 1 de la serie AWS IAM), cubriremos los fundamentos: usuarios, grupos, políticas, MFA, seguridad de cuenta root y mejores prácticas.
¿Qué es IAM?
IAM te permite gestionar el acceso a servicios y recursos de AWS de forma segura. Con IAM, puedes:
- Crear usuarios y grupos: Organizar acceso para personas y aplicaciones.
- Definir permisos: Especificar quién puede realizar qué acciones en qué recursos.
- Habilitar MFA: Agregar autenticación de dos factores para seguridad extra.
- Gestionar credenciales: Crear access keys, passwords y tokens de seguridad.
IAM es global — no es específico de una región. Los usuarios, grupos y políticas se aplican a través de todas las regiones de AWS.
Conceptos Core
1. Usuarios
Un usuario de IAM representa a una persona o aplicación que interactúa con AWS. Cada usuario tiene:
- Un nombre de usuario único
- Credenciales (password para console, access keys para CLI/SDK)
- Permisos (vía políticas)
Creando un Usuario
AWS Console:
- Navega a IAM → Users → Add users
- Ingresa nombre de usuario (ej.
john.doe) - Selecciona tipo de acceso:
- Programmatic access: Genera access keys para CLI/SDK
- AWS Management Console access: Habilita login de console con password
- Adjunta políticas o agrega a grupos
- Revisa y crea
AWS CLI:
aws iam create-user --user-name john.doe
aws iam create-login-profile --user-name john.doe --password "TempPassword123!" --password-reset-required
aws iam attach-user-policy --user-name john.doe --policy-arn arn:aws:iam::aws:policy/ReadOnlyAccess
2. Grupos
Un grupo es una colección de usuarios de IAM. Los grupos facilitan gestionar permisos para múltiples usuarios a la vez.
Ejemplo: Organizando Usuarios
Developers Group
├── john.doe
├── jane.smith
└── alice.wang
Admins Group
├── admin1
└── admin2
Los grupos heredan políticas adjuntas, así que todos los usuarios en Developers obtienen los mismos permisos.
Creando un Grupo
aws iam create-group --group-name Developers
aws iam attach-group-policy \
--group-name Developers \
--policy-arn arn:aws:iam::aws:policy/PowerUserAccess
aws iam add-user-to-group --group-name Developers --user-name john.doe
3. Políticas
Una política es un documento JSON que define permisos. Las políticas especifican:
- Effect:
AllowoDeny - Action: Qué operaciones están permitidas (ej.
s3:GetObject,ec2:StartInstance) - Resource: En qué recursos de AWS se aplica la acción (ARN)
- Condition: Restricciones opcionales (ej. requiere MFA, permite solo desde ciertas IPs)
Ejemplo de Política: Acceso Read-Only a S3
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"
]
}
]
}
Esto permite listar y leer objetos de my-bucket, pero no escribir o eliminar.
Tipos de Políticas
- Managed Policies: Pre-built por AWS (ej.
AdministratorAccess,ReadOnlyAccess) o creadas por ti (customer managed). - Inline Policies: Embebidas directamente en un usuario, grupo o role específico. Más difíciles de reutilizar.
Regla general: Usa managed policies para reutilización y mantenimiento más fácil. Usa inline policies solo para permisos muy específicos únicos a una identidad.
4. Root User vs IAM Users
La cuenta root es la identidad creada cuando abres primero una cuenta de AWS. Tiene acceso completo ilimitado a todos los recursos.
Por Qué NO Usar la Cuenta Root Diariamente
- Sin restricciones: No puedes limitar permisos de root, incluso con políticas.
- Riesgo de seguridad: Si las credenciales de root se comprometen, un atacante tiene control total.
- Sin auditoría: Difícil rastrear qué hizo root vs usuarios de IAM.
Mejores Prácticas para Root
- Habilita MFA en root inmediatamente.
- Nunca compartas credenciales de root.
- Crea usuarios de IAM para tareas diarias (incluso para ti mismo).
- Usa root solo para tareas que lo requieren (ej. cerrar la cuenta, cambiar plan de soporte).
Autenticación Multi-Factor (MFA)
MFA agrega una capa de seguridad requiriendo un segundo factor además del password:
- Algo que sabes: Password
- Algo que tienes: Dispositivo MFA (app de teléfono, hardware token, etc.)
Habilitando MFA
Para cuenta root:
- IAM Console → Dashboard → Activate MFA on your root account
- Elige tipo de dispositivo (virtual MFA app recomendada)
- Escanea código QR con app de autenticador (Google Authenticator, Authy, etc.)
- Ingresa dos códigos MFA consecutivos para confirmar
Para usuarios de IAM:
# Crear dispositivo MFA virtual
aws iam create-virtual-mfa-device \
--virtual-mfa-device-name john-mfa \
--outfile /tmp/QRCode.png \
--bootstrap-method QRCodePNG
# Habilitar MFA para usuario
aws iam enable-mfa-device \
--user-name john.doe \
--serial-number arn:aws:iam::123456789012:mfa/john-mfa \
--authentication-code-1 123456 \
--authentication-code-2 789012
Enforzando MFA con Políticas
Puedes requerir MFA para acciones sensibles:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "*",
"Resource": "*",
"Condition": {
"BoolIfExists": {
"aws:MultiFactorAuthPresent": "false"
}
}
}
]
}
Esto niega todas las acciones a menos que el usuario haya autenticado con MFA.
Políticas de Password
Configura requisitos de password para usuarios de IAM:
AWS Console:
- IAM → Account settings → Password policy
- Configura:
- Longitud mínima de password
- Requiere números, símbolos, mayúsculas, minúsculas
- Expiración de password (ej. cada 90 días)
- Prevenir reutilización de passwords
AWS CLI:
aws iam update-account-password-policy \
--minimum-password-length 14 \
--require-symbols \
--require-numbers \
--require-uppercase-characters \
--require-lowercase-characters \
--allow-users-to-change-password \
--max-password-age 90 \
--password-reuse-prevention 5
Principio de Menor Privilegio
Siempre otorga el mínimo de permisos necesarios para realizar una tarea. Comienza con cero permisos y agrega solo lo que se necesita.
Ejemplo: Developer Role
En lugar de AdministratorAccess:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:Describe*",
"ec2:StartInstances",
"ec2:StopInstances",
"s3:GetObject",
"s3:PutObject",
"logs:*"
],
"Resource": "*"
}
]
}
Esto otorga solo lo necesario para desarrollo diario: read EC2, start/stop instances, read/write S3, full CloudWatch Logs.
Mejores Prácticas de IAM
- Nunca uses la cuenta root para tareas diarias.
- Habilita MFA para root y todos los usuarios de IAM.
- Crea usuarios de IAM individuales (sin cuentas compartidas).
- Usa grupos para asignar permisos (no adjuntes políticas directamente a usuarios).
- Otorga menor privilegio: Comienza restrictivo, agrega permisos según sea necesario.
- Rota credenciales regularmente: Access keys, passwords.
- Usa roles para aplicaciones (no embebas access keys en código).
- Habilita CloudTrail para auditoría y logging.
- Revisa permisos periódicamente: Elimina usuarios y permisos no utilizados.
- Usa AWS Organizations para gestionar múltiples cuentas.
Ejemplo: Configuración Segura para un Equipo Pequeño
# 1. Habilitar MFA en root (manual vía console)
# 2. Crear grupos
aws iam create-group --group-name Admins
aws iam create-group --group-name Developers
aws iam create-group --group-name ReadOnly
# 3. Adjuntar políticas a grupos
aws iam attach-group-policy --group-name Admins --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
aws iam attach-group-policy --group-name Developers --policy-arn arn:aws:iam::aws:policy/PowerUserAccess
aws iam attach-group-policy --group-name ReadOnly --policy-arn arn:aws:iam::aws:policy/ReadOnlyAccess
# 4. Crear usuarios
aws iam create-user --user-name alice
aws iam create-user --user-name bob
aws iam create-user --user-name charlie
# 5. Agregar usuarios a grupos
aws iam add-user-to-group --group-name Admins --user-name alice
aws iam add-user-to-group --group-name Developers --user-name bob
aws iam add-user-to-group --group-name ReadOnly --user-name charlie
# 6. Crear login profiles (contraseñas)
aws iam create-login-profile --user-name alice --password "SecurePass1!" --password-reset-required
aws iam create-login-profile --user-name bob --password "SecurePass2!" --password-reset-required
aws iam create-login-profile --user-name charlie --password "SecurePass3!" --password-reset-required
# 7. Habilitar MFA para cada usuario (manual vía console o via scripts)
Auditoría y Monitoreo
Usa IAM Access Analyzer para identificar recursos compartidos externamente:
aws accessanalyzer create-analyzer --analyzer-name my-analyzer --type ACCOUNT
Usa IAM Credential Report para auditar usuarios:
aws iam generate-credential-report
aws iam get-credential-report
Esto muestra cuándo se crearon usuarios, última vez que se usaron passwords/access keys, estado de MFA, etc.
Conclusión
IAM es la fundación de seguridad de AWS. En esta Parte 1, cubrimos:
- Usuarios: Identidades individuales con credenciales.
- Grupos: Colecciones de usuarios para gestión más fácil de permisos.
- Políticas: Documentos JSON que definen permisos.
- Root vs IAM Users: Nunca uses root diariamente.
- MFA: Habilítalo en todas partes.
- Password Policies: Enforza passwords fuertes.
- Menor Privilegio: Otorga solo permisos necesarios.
En Parte 2, cubriremos IAM Roles, cómo difieren de usuarios, y cómo usarlos para EC2, Lambda, acceso cross-account y más.
Puntos clave para recordar:
- Habilita MFA en root hoy.
- Crea usuarios de IAM para todo el mundo, incluyéndote a ti.
- Usa grupos + managed policies para permisos.
- Revisa y audita permisos regularmente.
IAM es poderoso, pero con gran poder viene gran responsabilidad. Configúralo correctamente desde el principio, y tu infraestructura de AWS será segura y escalable.