🔐
IAM - Gestión de identidad y acceso
Usuarios, grupos, roles, políticas y permisos
⏱️ Tiempo estimado de lectura: 15 minutos
Introducción a IAM
AWS Identity and Access Management (IAM) es un servicio web que te ayuda a controlar de forma segura el acceso a los recursos de AWS. Con IAM, puedes gestionar de forma centralizada los permisos que controlan qué recursos de AWS pueden acceder los usuarios.
Puntos Clave
- ✓ IAM es global, no requiere selección de región
- ✓ Gratis de usar, sin costos adicionales
- ✓ Sigue el principio de menor privilegio
- ✓ Usa MFA para usuarios con privilegios elevados
- ✓ Nunca compartas las credenciales del usuario root
Usuarios de IAM
Un usuario de IAM es una entidad que creas en AWS para representar a una persona o aplicación que interactúa con AWS. Un usuario consta de un nombre y credenciales.
Credenciales:
- Consola: Usuario y contraseña para acceso web
- Programático: Access Key ID y Secret Access Key para CLI/SDK
- Mejores prácticas:
- Nunca usar el usuario root para tareas diarias
- Habilitar MFA para usuarios con permisos elevados
- Rotar credenciales regularmente
- No incrustar Access Keys en código
Credenciales:
- Consola: Usuario y contraseña para acceso web
- Programático: Access Key ID y Secret Access Key para CLI/SDK
- Mejores prácticas:
- Nunca usar el usuario root para tareas diarias
- Habilitar MFA para usuarios con permisos elevados
- Rotar credenciales regularmente
- No incrustar Access Keys en código
Puntos Clave
- ✓ Cada usuario tiene credenciales únicas
- ✓ Máximo 5,000 usuarios por cuenta AWS
- ✓ Un usuario puede pertenecer a hasta 10 grupos
- ✓ Las políticas se pueden adjuntar directamente a usuarios (no recomendado)
💻 Comandos AWS CLI para gestión de usuarios
# Crear un nuevo usuario
aws iam create-user --user-name developer-juan
# Crear access keys para acceso programático
aws iam create-access-key --user-name developer-juan
# Listar todos los usuarios
aws iam list-users Grupos de IAM
Los grupos son colecciones de usuarios que comparten los mismos permisos. Los grupos simplifican la gestión de permisos al permitirte especificar permisos para múltiples usuarios a la vez.
Características:
- Los grupos solo pueden contener usuarios, no otros grupos
- Un usuario puede pertenecer a múltiples grupos
- Los usuarios no necesitan pertenecer a ningún grupo
- Un grupo puede tener múltiples políticas adjuntas
Características:
- Los grupos solo pueden contener usuarios, no otros grupos
- Un usuario puede pertenecer a múltiples grupos
- Los usuarios no necesitan pertenecer a ningún grupo
- Un grupo puede tener múltiples políticas adjuntas
Puntos Clave
- ✓ Los grupos no se pueden anidar
- ✓ Usa grupos para gestionar permisos a escala
- ✓ Organiza grupos por función laboral (Developers, Admins, QA)
- ✓ Aplica políticas a grupos, no a usuarios individuales
💻 Gestión de grupos con AWS CLI
# Crear un grupo
aws iam create-group --group-name Developers
# Agregar usuario a grupo
aws iam add-user-to-group --user-name developer-juan --group-name Developers
# Adjuntar política a grupo
aws iam attach-group-policy --group-name Developers --policy-arn arn:aws:iam::aws:policy/PowerUserAccess Políticas de IAM
Las políticas de IAM son documentos JSON que definen permisos. Especifican qué acciones están permitidas o denegadas en qué recursos de AWS.
Tipos de políticas:
- Gestionadas por AWS: Creadas y gestionadas por AWS
- Gestionadas por el cliente: Creadas por ti, reutilizables
- En línea: Relación 1:1 con una entidad (no recomendado)
Tipos de políticas:
- Gestionadas por AWS: Creadas y gestionadas por AWS
- Gestionadas por el cliente: Creadas por ti, reutilizables
- En línea: Relación 1:1 con una entidad (no recomendado)
Puntos Clave
- ✓ Effect: Allow o Deny
- ✓ Action: Operaciones permitidas/denegadas
- ✓ Resource: Recursos AWS específicos (ARN)
- ✓ Condition: Condiciones opcionales para aplicar política
- ✓ Principal: Quién puede asumir el rol (en políticas de confianza)
💻 Estructura básica de una política IAM
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::mi-bucket/*"
}
]
} 💻 Ejemplo de política para acceso de solo lectura a S3
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowS3ReadOnly",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::mi-bucket",
"arn:aws:s3:::mi-bucket/*"
]
}
]
} Roles de IAM
Un rol de IAM es una identidad de AWS con políticas de permisos que determinan lo que la identidad puede y no puede hacer en AWS. A diferencia de un usuario, un rol está diseñado para ser asumido por cualquiera que lo necesite.
Casos de uso comunes:
- Servicios AWS: EC2 accediendo a S3, Lambda accediendo a DynamoDB
- Cross-Account Access: Cuenta A accediendo recursos en Cuenta B
- Federación: Usuarios externos (Google, SAML) accediendo a AWS
- Usuarios temporales: Acceso limitado por tiempo
¿Por qué usar roles en lugar de credenciales?
- Credenciales temporales que rotan automáticamente
- No necesitas gestionar/rotar Access Keys manualmente
- Más seguros: sin exposición de credenciales a largo plazo
Casos de uso comunes:
- Servicios AWS: EC2 accediendo a S3, Lambda accediendo a DynamoDB
- Cross-Account Access: Cuenta A accediendo recursos en Cuenta B
- Federación: Usuarios externos (Google, SAML) accediendo a AWS
- Usuarios temporales: Acceso limitado por tiempo
¿Por qué usar roles en lugar de credenciales?
- Credenciales temporales que rotan automáticamente
- No necesitas gestionar/rotar Access Keys manualmente
- Más seguros: sin exposición de credenciales a largo plazo
Puntos Clave
- ✓ Los roles no tienen credenciales a largo plazo
- ✓ Proporciona credenciales temporales (STS)
- ✓ Pueden ser asumidos por usuarios, servicios o aplicaciones
- ✓ Política de confianza define quién puede asumir el rol
- ✓ Política de permisos define qué puede hacer el rol
💻 Política de confianza permitiendo a EC2 asumir el rol
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
} 💻 Creación de rol para EC2
# Crear un rol
aws iam create-role --role-name EC2-S3-ReadOnly-Role --assume-role-policy-document file://trust-policy.json
# Adjuntar política de permisos
aws iam attach-role-policy --role-name EC2-S3-ReadOnly-Role --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
# Crear instance profile (necesario para EC2)
aws iam create-instance-profile --instance-profile-name EC2-S3-Profile
# Asociar rol a instance profile
aws iam add-role-to-instance-profile --instance-profile-name EC2-S3-Profile --role-name EC2-S3-ReadOnly-Role Multi-Factor Authentication (MFA)
MFA añade una capa extra de seguridad requiriendo que los usuarios proporcionen dos o más factores de verificación para acceder a AWS.
Tipos de MFA:
- Virtual MFA: Apps como Google Authenticator, Authy, Microsoft Authenticator
- Hardware MFA: Dispositivos físicos como YubiKey
- U2F Security Key: Llaves USB como YubiKey
Cuándo usar MFA:
- SIEMPRE en el usuario root
- Usuarios con permisos administrativos
- Usuarios con acceso a datos sensibles
- Acceso a la consola AWS
Tipos de MFA:
- Virtual MFA: Apps como Google Authenticator, Authy, Microsoft Authenticator
- Hardware MFA: Dispositivos físicos como YubiKey
- U2F Security Key: Llaves USB como YubiKey
Cuándo usar MFA:
- SIEMPRE en el usuario root
- Usuarios con permisos administrativos
- Usuarios con acceso a datos sensibles
- Acceso a la consola AWS
Puntos Clave
- ✓ MFA combina algo que sabes (contraseña) + algo que tienes (token)
- ✓ Protege contra compromiso de contraseñas
- ✓ Virtual MFA es gratis y fácil de configurar
- ✓ Puedes forzar MFA mediante políticas de IAM
💻 Política que fuerza MFA para todas las acciones
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "*",
"Resource": "*",
"Condition": {
"BoolIfExists": {
"aws:MultiFactorAuthPresent": "false"
}
}
}
]
} Mejores Prácticas de IAM
Seguir las mejores prácticas de IAM es crucial para mantener una cuenta AWS segura.
Top 10 Mejores Prácticas:
1. Bloquear el usuario root: Habilita MFA y no uses root para tareas diarias
2. Principio de menor privilegio: Otorga solo los permisos necesarios
3. Usa grupos: Asigna permisos a grupos, no a usuarios individuales
4. Políticas gestionadas: Usa políticas gestionadas en lugar de inline
5. Roles para aplicaciones: Usa roles IAM, no credenciales hardcoded
6. Rotar credenciales: Rota access keys y contraseñas regularmente
7. Habilita MFA: Especialmente para usuarios privilegiados
8. Usa condiciones: Restringe acceso por IP, hora, MFA, etc.
9. Audita permisos: Revisa políticas con IAM Access Analyzer
10. Monitorea actividad: Usa CloudTrail para auditar llamadas API
Top 10 Mejores Prácticas:
1. Bloquear el usuario root: Habilita MFA y no uses root para tareas diarias
2. Principio de menor privilegio: Otorga solo los permisos necesarios
3. Usa grupos: Asigna permisos a grupos, no a usuarios individuales
4. Políticas gestionadas: Usa políticas gestionadas en lugar de inline
5. Roles para aplicaciones: Usa roles IAM, no credenciales hardcoded
6. Rotar credenciales: Rota access keys y contraseñas regularmente
7. Habilita MFA: Especialmente para usuarios privilegiados
8. Usa condiciones: Restringe acceso por IP, hora, MFA, etc.
9. Audita permisos: Revisa políticas con IAM Access Analyzer
10. Monitorea actividad: Usa CloudTrail para auditar llamadas API
Puntos Clave
- ✓ La seguridad es responsabilidad compartida
- ✓ Usa AWS Security Hub para recomendaciones
- ✓ Implementa separación de responsabilidades
- ✓ Documenta tus políticas y roles
- ✓ Usa tags para organizar recursos IAM