Saltar al contenido principal

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​

ConceptoDescripción
Clave PrivadaArchivo .pem que debe mantenerse secreto
Clave PúblicaInstalada en la instancia
SSHProtocolo de conexión Linux (puerto 22)
RDPProtocolo de conexión Windows (puerto 3389)
chmod 400Permisos correctos para clave privada
Instance ConnectAlternativa sin gestión de claves

Quiz de Validación​

  1. ¿Cuál es la diferencia entre clave pública y clave privada?
  2. ¿Qué usuario usar para SSH en Amazon Linux?
  3. ¿Qué comando define los permisos correctos en un archivo .pem?
  4. ¿Por qué SSH rechaza una clave con permisos "too open"?
  5. ¿Cómo recuperar la contraseña de una instancia Windows?
  6. ¿Qué alternativa permite conectarse sin gestionar claves?

Próxima sección: Security Groups