Access Keys y Gestión de Credenciales
Entiende los tipos de credenciales AWS y las mejores prácticas para gestionarlas.
1Tipos de Credenciales en AWS
AWS utiliza diferentes tipos de credenciales según el contexto de acceso:
1. Contraseña + MFA (Console)
Para acceso a la consola web de AWS.
2. Access Keys (API/CLI/SDK)
Para acceso programático a AWS.
3. Signing Certificates (Menos común)
Para servicios específicos como CloudFront signed URLs.
4. SSH Keys
Para acceso a instancias EC2 y CodeCommit.
5. Credenciales Temporales (STS)
Generadas por roles IAM, expiran automáticamente.
2Access Keys en Detalle
¿Qué son?
Las Access Keys son un par de credenciales para acceso programático:
- Access Key ID: Identificador público (empieza con AKIA...)
- Secret Access Key: Clave secreta (solo visible al crearla)
Dónde se usan:
- AWS CLI
- SDKs (boto3, aws-sdk-js, etc.)
- Herramientas de terceros
- Aplicaciones que llaman a APIs de AWS
⚠️ Peligros de Access Keys:
❌ Hardcodeadas en código → Se suben a GitHub
❌ En archivos de configuración → Se exponen en backups
❌ Compartidas entre equipos → Sin accountability
❌ Nunca rotadas → Mayor ventana de exposición
Alternativa preferida: IAM Roles
En lugar de Access Keys, usa roles siempre que sea posible:
- EC2 → Instance Profile
- Lambda → Execution Role
- ECS → Task Role
- Usuarios → AssumeRole con credenciales temporales
3Mejores Prácticas para Access Keys
1. No crear Access Keys para Root
La cuenta root nunca debería tener Access Keys. Si existen, elimínalas.
2. Rotar Access Keys regularmente
Proceso de rotación:
- Crear nueva Access Key (puedes tener 2 activas)
- Actualizar aplicaciones para usar la nueva
- Verificar que la vieja no se usa (CloudTrail)
- Desactivar la vieja
- Después de un tiempo, eliminarla
3. Usar credenciales temporales cuando sea posible
aws sts assume-role \
--role-arn arn:aws:iam::123456789012:role/MyRole \
--role-session-name my-session
Las credenciales temporales:
- Expiran automáticamente (1-12 horas)
- No necesitan rotación manual
- Se pueden restringir por sesión
4. No compartir Access Keys
Cada usuario/aplicación debe tener sus propias credenciales para:
- Auditoría individual
- Revocación sin afectar a otros
- Principio de mínimo privilegio
5. Monitorear uso de Access Keys
- CloudTrail para auditar acciones
- IAM Credential Report para ver estado
- Access Analyzer para detectar anomalías
4IAM Credential Report
¿Qué es?
Reporte CSV que muestra el estado de todas las credenciales en la cuenta.
Información incluida:
| Campo | Descripción |
|---|---|
user | Nombre del usuario |
password_enabled | Si tiene contraseña de consola |
password_last_used | Última vez que usó la consola |
mfa_active | Si tiene MFA activado |
access_key_1_active | Si la key 1 está activa |
access_key_1_last_used | Última vez que se usó |
access_key_1_last_rotated | Última rotación |
access_key_2_* | Mismos campos para key 2 |
Casos de uso:
Auditoría de seguridad:
- ¿Qué usuarios no tienen MFA?
- ¿Qué keys no se han rotado en >90 días?
- ¿Qué usuarios no han accedido en >90 días?
Cómo obtenerlo:
- IAM Console → Credential Report → Download
- CLI:
aws iam generate-credential-report+get-credential-report
5AWS STS y Credenciales Temporales
AWS Security Token Service (STS)
STS genera credenciales temporales para:
- Asumir roles (AssumeRole)
- Federación de identidades
- Acceso cross-account
Componentes de credenciales temporales:
{
"AccessKeyId": "ASIA...",
"SecretAccessKey": "...",
"SessionToken": "...",
"Expiration": "2024-01-15T18:00:00Z"
}
Operaciones comunes de STS:
| Operación | Uso |
|---|---|
AssumeRole | Asumir rol en la misma u otra cuenta |
AssumeRoleWithSAML | Federación con proveedor SAML |
AssumeRoleWithWebIdentity | Federación con IdP web (Google, etc.) |
GetSessionToken | Credenciales temporales con MFA |
GetFederationToken | Para federation proxy |
Duración de credenciales:
| Tipo | Duración |
|---|---|
| Role sessions | 1 hora (default), hasta 12 horas |
| Federation tokens | Hasta 36 horas |
| GetSessionToken | Hasta 36 horas |
6Detección de Credenciales Expuestas
AWS detecta credenciales expuestas
Si AWS detecta Access Keys en repositorios públicos (GitHub, etc.):
- Envía alerta al propietario de la cuenta
- Puede aplicar una política restrictiva automáticamente
Qué hacer si se exponen credenciales:
Inmediatamente:
- Desactivar las Access Keys expuestas
- Revisar CloudTrail para ver si fueron usadas
- Rotar cualquier secreto que pudiera haberse accedido
Investigación:
- ¿Qué recursos se accedieron?
- ¿Se crearon recursos no autorizados?
- ¿Se modificaron políticas?
Remediación:
- Eliminar recursos no autorizados
- Crear nuevas credenciales
- Implementar controles para evitar repetición
Herramientas de detección:
- git-secrets: Pre-commit hook para detectar secrets
- truffleHog: Escanea repositorios
- AWS Secrets Detection en CodeGuru: Detecta en code reviews
7Credenciales en el Examen
Puntos clave:
- Root nunca debe tener Access Keys
- Roles > Access Keys (credenciales temporales)
- Rotar Access Keys regularmente
- IAM Credential Report para auditoría
- STS para credenciales temporales
- No hardcodear credenciales en código
Preguntas típicas:
"¿Cuál es la forma más segura de dar acceso a AWS desde una aplicación en EC2?" → Usar un IAM Role (Instance Profile) en lugar de Access Keys
"¿Cómo verificar que todos los usuarios tienen MFA activado?" → IAM Credential Report
"¿Qué hacer si descubres Access Keys expuestas en GitHub?" → Desactivar inmediatamente, revisar CloudTrail, rotar credenciales
"¿Qué servicio genera credenciales temporales para asumir roles?" → AWS STS (Security Token Service)
"¿Por qué son preferibles las credenciales temporales?" → Expiran automáticamente, reducen riesgo de exposición
Puntos Clave para el Examen
- Access Keys: Par de credenciales para acceso programático
- Root nunca debe tener Access Keys
- Roles > Access Keys (credenciales temporales)
- Rotar Access Keys cada 90 días (mínimo)
- IAM Credential Report: Auditoría de todas las credenciales
- STS: Genera credenciales temporales para roles
- Credenciales expuestas: Desactivar inmediatamente