Pares de Claves y Autenticación
¿Cómo Acceder a una Instancia EC2?
Para conectarse a una instancia EC2, necesita un mecanismo de autenticación. AWS utiliza pares de claves SSH para Linux y contraseñas para Windows.
┌─────────────────────────────────────────────────────────────┐
│ AUTENTICACIÓN EC2 │
├─────────────────────────────────────────────────────────────┤
│ │
│ LINUX WINDOWS │
│ ───── ─────── │
│ │
│ ┌──────────┐ ┌──────────┐ │
│ │ Clave SSH│ │ Contraseña│ │
│ │ (RSA/ED) │ │ │ │
│ └────┬─────┘ └────┬─────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌──────────┐ ┌──────────┐ │
│ │ SSH │ │ RDP │ │
│ │ Puerto 22│ │ Puerto 3389│ │
│ └────┬─────┘ └────┬─────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌──────────────────────────────────────────┐ │
│ │ Instancia EC2 │ │
│ └──────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
Pares de Claves SSH (Linux)
¿Qué es un Par de Claves?
Un par de claves está compuesto por dos partes:
┌─────────────────────────────────────────────────────────────┐
│ PAR DE CLAVES SSH │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ CLAVE PRIVADA │ │
│ │ (mi-clave.pem) │ │
│ │ │ │
│ │ • Archivo que USTED guarda en su computadora │ │
│ │ • ¡NUNCA compartir ni publicar! │ │
│ │ • Sirve para probar su identidad │ │
│ │ • Si se pierde = no hay acceso a la instancia │ │
│ │ │ │
│ │ Formato: archivo .pem (Linux/Mac) o .ppk (PuTTY) │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ CLAVE PÚBLICA │ │
│ │ (instalada en la instancia) │ │
│ │ │ │
│ │ • Instalada automáticamente por AWS al lanzar │ │
│ │ • Almacenada en ~/.ssh/authorized_keys │ │
│ │ • Puede compartirse sin riesgo │ │
│ │ • Permite verificar la clave privada │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 🔐 Principio: Lo que se cifra con la pública solo │
│ puede descifrarse con la privada correspondiente │
│ │
└─────────────────────────────────────────────────────────────┘
Analogía: Candado y Llave
┌─────────────────────────────────────────────────────────────┐
│ ANALOGÍA: CANDADO Y LLAVE │
├─────────────────────────────────────────────────────────────┤
│ │
│ CLAVE PÚBLICA = CANDADO ABIERTO │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 🔓 Puede dar candados abiertos a cualquiera. │ │
│ │ Ellos pueden cerrar cajas con ellos, │ │
│ │ pero no abrirlas. │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ CLAVE PRIVADA = LLAVE ÚNICA DEL CANDADO │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 🔑 Solo USTED tiene la llave que abre │ │
│ │ esos candados. Si la pierde, │ │
│ │ nadie puede abrir las cajas. │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ APLICACIÓN: │
│ • Instancia EC2 = Caja cerrada con su candado │
│ • Conexión SSH = Usar su llave para entrar │
│ │
└─────────────────────────────────────────────────────────────┘
Crear un Par de Claves
Vía la Consola AWS
1. EC2 → Network & Security → Key Pairs
2. Create key pair
3. Nombre: "mi-clave-ec2"
4. Tipo: RSA (o ED25519)
5. Formato: .pem (Linux/Mac) o .ppk (PuTTY/Windows)
6. Create key pair
7. ⬇️ El archivo .pem se descarga automáticamente
8. ⚠️ ¡GUÁRDELO CUIDADOSAMENTE! ¡AWS no lo almacena!
Vía AWS CLI
# Crear un par de claves
aws ec2 create-key-pair \
--key-name mi-clave-ec2 \
--query 'KeyMaterial' \
--output text > mi-clave-ec2.pem
# Definir los permisos (Linux/Mac)
chmod 400 mi-clave-ec2.pem
Conectarse por SSH
Linux / macOS
# Sintaxis básica
ssh -i /ruta/a/clave.pem usuario@ip-publica
# Ejemplo concreto
ssh -i ~/Downloads/mi-clave-ec2.pem ec2-user@52.1.2.3
# Usuarios por defecto según la AMI:
# Amazon Linux, RHEL : ec2-user
# Ubuntu : ubuntu
# Debian : admin o debian
# CentOS : centos o ec2-user
# SUSE : ec2-user o root
Windows con PuTTY
1. Descargar PuTTY y PuTTYgen
2. Convertir .pem a .ppk:
• Abrir PuTTYgen
• Load → Seleccionar el .pem
• Save private key → mi-clave.ppk
3. Conectarse con PuTTY:
• Host Name: ec2-user@52.1.2.3
• Connection → SSH → Auth → Browse → mi-clave.ppk
• Open
Windows con OpenSSH (Windows 10+)
# Windows 10/11 tiene SSH integrado
ssh -i C:\Users\yo\mi-clave-ec2.pem ec2-user@52.1.2.3
Errores Comunes
Error: "Permission denied"
┌─────────────────────────────────────────────────────────────┐
│ ERROR: PERMISSION DENIED │
├─────────────────────────────────────────────────────────────┤
│ │
│ Mensaje: │
│ Permission denied (publickey,gssapi-keyex,gssapi-with-mic)│
│ │
│ Posibles causas: │
│ │
│ 1. Clave incorrecta │
│ → Verifique que es el par de claves correcto │
│ │
│ 2. Usuario incorrecto │
│ → ec2-user para Amazon Linux, ubuntu para Ubuntu │
│ │
│ 3. Security Group │
│ → Puerto 22 cerrado o IP de origen incorrecta │
│ │
│ 4. Instancia aún no lista │
│ → Espere a que los status checks pasen │
│ │
└─────────────────────────────────────────────────────────────┘
Error: "Permissions too open"
┌─────────────────────────────────────────────────────────────┐
│ ERROR: PERMISSIONS TOO OPEN │
├─────────────────────────────────────────────────────────────┤
│ │
│ Mensaje: │
│ WARNING: UNPROTECTED PRIVATE KEY FILE! │
│ Permissions 0644 for 'mi-clave.pem' are too open. │
│ │
│ Solución (Linux/Mac): │
│ chmod 400 mi-clave.pem │
│ │
│ Explicación: │
│ • 400 = solo lectura para el propietario │
│ • SSH rechaza claves legibles por otros │
│ • Protección contra robo de clave │
│ │
└─────────────────────────────────────────────────────────────┘
Error: "Connection timeout"
┌─────────────────────────────────────────────────────────────┐
│ ERROR: CONNECTION TIMEOUT │
├─────────────────────────────────────────────────────────────┤
│ │
│ Posibles causas: │
│ │
│ 1. Security Group │
│ → Puerto 22 no abierto │
│ → Su IP no está autorizada │
│ │
│ 2. Sin IP pública │
│ → Instancia en subnet privada │
│ → Elastic IP no asociada │
│ │
│ 3. NACL bloqueando │
│ → Verifique las reglas de red del subnet │
│ │
│ 4. Instancia no running │
│ → Verifique el estado de la instancia │
│ │
└─────────────────────────────────────────────────────────────┘
Autenticación Windows (RDP)
Recuperar la Contraseña
┌─────────────────────────────────────────────────────────────┐
│ CONEXIÓN WINDOWS - RDP │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. Espere 4+ minutos después del lanzamiento │
│ (Windows debe generar la contraseña) │
│ │
│ 2. EC2 → Instances → Seleccionar la instancia │
│ │
│ 3. Actions → Security → Get Windows password │
│ │
│ 4. Suba su archivo .pem (clave privada) │
│ │
│ 5. Haga clic en "Decrypt Password" │
│ │
│ 6. Copie la contraseña mostrada │
│ │
│ 7. Conéctese con Remote Desktop: │
│ • Dirección: IP pública de la instancia │
│ • Usuario: Administrator │
│ • Contraseña: la descifrada │
│ │
└─────────────────────────────────────────────────────────────┘
Gestión de Claves
Buenas Prácticas
┌─────────────────────────────────────────────────────────────┐
│ BUENAS PRÁCTICAS - CLAVES SSH │
├─────────────────────────────────────────────────────────────┤
│ │
│ ✅ QUÉ HACER: │
│ │
│ • Usar una clave diferente por entorno │
│ - clave-dev.pem │
│ - clave-staging.pem │
│ - clave-prod.pem │
│ │
│ • Almacenar las claves en un lugar seguro │
│ - Gestor de contraseñas (1Password, etc.) │
│ - Bóveda empresarial (Vault) │
│ │
│ • Definir los permisos correctos │
│ - chmod 400 en los archivos .pem │
│ │
│ • Usar claves ED25519 (más seguras que RSA) │
│ │
│ ❌ QUÉ EVITAR: │
│ │
│ • Compartir claves por email o Slack │
│ • Hacer commit de claves en Git │
│ • Usar la misma clave para todo │
│ • Dejar claves no utilizadas │
│ │
└─────────────────────────────────────────────────────────────┘
Alternativa: EC2 Instance Connect
AWS ofrece una alternativa a las claves SSH: EC2 Instance Connect
┌─────────────────────────────────────────────────────────────┐
│ EC2 INSTANCE CONNECT │
├─────────────────────────────────────────────────────────────┤
│ │
│ Conexión SSH vía la consola AWS sin gestionar claves │
│ │
│ Cómo usarlo: │
│ 1. EC2 → Instances → Seleccionar la instancia │
│ 2. Connect → EC2 Instance Connect │
│ 3. Connect │
│ 4. ¡Un terminal se abre en el navegador! │
│ │
│ Ventajas: │
│ • No hay claves que gestionar │
│ • Acceso desde cualquier lugar │
│ • Trazabilidad vía CloudTrail │
│ │
│ Desventajas: │
│ • Requiere acceso de red a la instancia │
│ • No permite transferencia de archivos (scp) │
│ • No es ideal para automatización │
│ │
└─────────────────────────────────────────────────────────────┘
Alternativa: AWS Systems Manager Session Manager
┌─────────────────────────────────────────────────────────────┐
│ SESSION MANAGER │
├─────────────────────────────────────────────────────────────┤
│ │
│ ¡Conexión SSH sin puerto 22 abierto! │
│ │
│ Cómo funciona: │
│ • Agente SSM instalado en la instancia │
│ • Conexión vía AWS Console o CLI │
│ • Pasa por las API de AWS, no por SSH directo │
│ │
│ Ventajas: │
│ • No es necesario abrir el puerto 22 │
│ • No hay clave SSH que gestionar │
│ • Logs de todas las sesiones │
│ • Acceso a instancias privadas │
│ │
│ aws ssm start-session --target i-0123456789abcdef0 │
│ │
└─────────────────────────────────────────────────────────────┘
Resumen
| Concepto | Descripción |
|---|---|
| Clave Privada | Archivo .pem que debe mantenerse secreto |
| Clave Pública | Instalada en la instancia |
| SSH | Protocolo de conexión Linux (puerto 22) |
| RDP | Protocolo de conexión Windows (puerto 3389) |
| chmod 400 | Permisos correctos para clave privada |
| Instance Connect | Alternativa sin gestión de claves |
Quiz de Validación
- ¿Cuál es la diferencia entre clave pública y clave privada?
- ¿Qué usuario usar para SSH en Amazon Linux?
- ¿Qué comando define los permisos correctos en un archivo .pem?
- ¿Por qué SSH rechaza una clave con permisos "too open"?
- ¿Cómo recuperar la contraseña de una instancia Windows?
- ¿Qué alternativa permite conectarse sin gestionar claves?
Próxima sección: Security Groups