Lab: Diseño de un Esquema VPC
Objetivo del Lab
En este laboratorio, usted va a diseñar y documentar una arquitectura VPC completa en papel o con una herramienta de diagramas. Es un ejercicio fundamental porque en la empresa, siempre deberá planificar antes de crear.
La capacidad de dibujar y explicar una arquitectura de red es esencial para cualquier profesional cloud.
Parte 1: Escenario
Contexto
Usted es arquitecto cloud en TechnoShop, una empresa de comercio electrónico. Se le pide diseñar la infraestructura AWS para su nueva aplicación.
Requisitos
┌─────────────────────────────────────────────────────────────┐
│ REQUISITOS TECHNOSHOP │
├─────────────────────────────────────────────────────────────┤
│ │
│ APLICACIÓN │
│ • Sitio web accesible desde Internet │
│ • Servidores de aplicación (API backend) │
│ • Base de datos MySQL │
│ │
│ SEGURIDAD │
│ • Base de datos NO accesible desde Internet │
│ • Servidores de aplicación protegidos │
│ • Solo el Load Balancer expuesto a Internet │
│ │
│ DISPONIBILIDAD │
│ • Aplicación disponible incluso si una AZ falla │
│ • Mínimo 2 zonas de disponibilidad │
│ │
│ RED │
│ • Los servidores de aplicación deben poder descargar │
│ actualizaciones desde Internet │
│ │
└─────────────────────────────────────────────────────────────┘
Parte 2: Ejercicio de Diseño
Paso 1: Definir el CIDR del VPC
Elija un rango de direcciones para su VPC:
Preguntas para hacerse:
- ¿Cuántas direcciones IP necesita?
- ¿Qué rango RFC 1918 utilizar?
- ¿Qué prefijo CIDR elegir?
Su respuesta:
VPC CIDR : ________________
Justificación : ________________
💡 Solución sugerida
VPC CIDR : 10.0.0.0/16
Justificación :
- 65,536 direcciones = más que suficiente
- Rango 10.x.x.x = estándar para empresas
- /16 permite crear muchas subredes /24
Paso 2: Planificar las Subredes
Complete la siguiente tabla:
| Nombre | Tipo | AZ | CIDR | Uso |
|---|---|---|---|---|
| public-1a | Pública | us-east-1a | ? | ? |
| public-1b | Pública | us-east-1b | ? | ? |
| private-app-1a | Privada | us-east-1a | ? | ? |
| private-app-1b | Privada | us-east-1b | ? | ? |
| private-db-1a | Privada | us-east-1a | ? | ? |
| private-db-1b | Privada | us-east-1b | ? | ? |
💡 Solución sugerida
| Nombre | Tipo | AZ | CIDR | Uso |
|---|---|---|---|---|
| public-1a | Pública | us-east-1a | 10.0.1.0/24 | ALB, NAT GW |
| public-1b | Pública | us-east-1b | 10.0.2.0/24 | ALB, NAT GW |
| private-app-1a | Privada | us-east-1a | 10.0.11.0/24 | Servidores App |
| private-app-1b | Privada | us-east-1b | 10.0.12.0/24 | Servidores App |
| private-db-1a | Privada | us-east-1a | 10.0.21.0/24 | MySQL Principal |
| private-db-1b | Privada | us-east-1b | 10.0.22.0/24 | MySQL Réplica |
Paso 3: Definir las Tablas de Rutas
Para cada tipo de subred, defina las rutas:
Tabla de Rutas Pública:
| Destino | Destino (Target) |
|---|---|
| ? | ? |
| ? | ? |
Tabla de Rutas Privada App (1a):
| Destino | Destino (Target) |
|---|---|
| ? | ? |
| ? | ? |
Tabla de Rutas Privada DB:
| Destino | Destino (Target) |
|---|---|
| ? | ? |
💡 Solución sugerida
Tabla de Rutas Pública:
| Destino | Destino (Target) |
|---|---|
| 10.0.0.0/16 | local |
| 0.0.0.0/0 | igw-xxx |
Tabla de Rutas Privada App (1a):
| Destino | Destino (Target) |
|---|---|
| 10.0.0.0/16 | local |
| 0.0.0.0/0 | nat-1a |
Tabla de Rutas Privada DB:
| Destino | Destino (Target) |
|---|---|
| 10.0.0.0/16 | local |
| (Sin ruta a Internet) | - |
Paso 4: Dibujar la Arquitectura
Dibuje el esquema completo de la arquitectura. Utilice:
- Draw.io (gratuito)
- Lucidchart
- Papel y lápiz
Elementos a incluir:
- VPC con su CIDR
- Todas las subredes con sus CIDR
- Internet Gateway
- NAT Gateways (¿dónde colocarlas?)
- Load Balancer (¿dónde colocarlo?)
- Instancias EC2 (servidores app)
- Base de datos
- Flechas de tráfico
💡 Esquema Solución
┌─────────────────────────────────────────────────────────────────────────┐
│ ARQUITECTURA TECHNOSHOP │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ INTERNET │
│ │ │
│ │ │
│ ┌──────▼──────┐ │
│ │ IGW │ │
│ └──────┬──────┘ │
│ │ │
│ ┌──────────────────────────────┼──────────────────────────────┐ │
│ │ VPC │ (10.0.0.0/16) │ │
│ │ │ │ │
│ │ ┌──────────────────────────┼────────────────────────────┐ │ │
│ │ │ │ │ │ │
│ │ │ ┌───────────────────────▼───────────────────────┐ │ │ │
│ │ │ │ APPLICATION LOAD BALANCER │ │ │ │
│ │ │ │ (alb-web) │ │ │ │
│ │ │ └───────────────────────┬───────────────────────┘ │ │ │
│ │ │ │ │ │ │
│ │ │ ┌─────────────────┐ │ ┌─────────────────┐ │ │ │
│ │ │ │ PUBLIC 1a │ │ │ PUBLIC 1b │ │ │ │
│ │ │ │ 10.0.1.0/24 │ │ │ 10.0.2.0/24 │ │ │ │
│ │ │ │ │ │ │ │ │ │ │
│ │ │ │ ┌─────────────┐ │ │ │ ┌─────────────┐ │ │ │ │
│ │ │ │ │ NAT GW 1a │ │ │ │ │ NAT GW 1b │ │ │ │ │
│ │ │ │ └──────┬──────┘ │ │ │ └──────┬──────┘ │ │ │ │
│ │ │ └────────┼────────┘ │ └────────┼────────┘ │ │ │
│ │ │ │ │ │ │ │ │
│ │ └───────────┼──────────────┼──────────────┼──────────────┘ │ │
│ │ │ │ │ │ │
│ │ ┌───────────┼──────────────┼──────────────┼──────────────┐ │ │
│ │ │ │ │ │ │ │ │
│ │ │ ┌────────▼────────┐ │ ┌────────▼────────┐ │ │ │
│ │ │ │ PRIVATE APP 1a │◄────┴────►│ PRIVATE APP 1b │ │ │ │
│ │ │ │ 10.0.11.0/24 │ │ 10.0.12.0/24 │ │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ │ ┌───────────┐ │ │ ┌───────────┐ │ │ │ │
│ │ │ │ │ EC2 App 1 │ │ │ │ EC2 App 2 │ │ │ │ │
│ │ │ │ └─────┬─────┘ │ │ └─────┬─────┘ │ │ │ │
│ │ │ └────────┼────────┘ └────────┼────────┘ │ │ │
│ │ │ │ │ │ │ │
│ │ └───────────┼─────────────────────────────┼───────────────┘ │ │
│ │ │ │ │ │
│ │ ┌───────────┼─────────────────────────────┼───────────────┐ │ │
│ │ │ │ │ │ │ │
│ │ │ ┌────────▼────────┐ ┌────────▼────────┐ │ │ │
│ │ │ │ PRIVATE DB 1a │ │ PRIVATE DB 1b │ │ │ │
│ │ │ │ 10.0.21.0/24 │ │ 10.0.22.0/24 │ │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ │ ┌───────────┐ │ │ ┌───────────┐ │ │ │ │
│ │ │ │ │ MySQL │◄────────────►│ │ MySQL │ │ │ │ │
│ │ │ │ │ Principal│ Replicación │ │ Standby │ │ │ │ │
│ │ │ │ └───────────┘ │ │ └───────────┘ │ │ │ │
│ │ │ └─────────────────┘ └─────────────────┘ │ │ │
│ │ │ │ │ │
│ │ └──────────────────────────────────────────────────────────┘ │ │
│ │ │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────────────────┘
Parte 3: Preguntas de Análisis
Pregunta 1: Flujo de Tráfico
Describa el camino del tráfico para un usuario que accede al sitio web:
Usuario → ? → ? → ? → Base de datos
💡 Respuesta
Usuario
→ Internet
→ IGW
→ ALB (subred pública)
→ EC2 App (subred privada app)
→ MySQL (subred privada db)
Pregunta 2: Actualización de Software
¿Cómo puede un servidor de aplicación descargar una actualización desde Internet?
💡 Respuesta
El servidor de aplicación está en una subred privada. Utiliza el NAT Gateway:
- EC2 App envía una solicitud hacia Internet
- El tráfico sigue la ruta 0.0.0.0/0 → NAT Gateway
- NAT Gateway traduce la IP privada en IP pública (Elastic IP)
- El tráfico pasa por el IGW hacia Internet
- La respuesta regresa por el mismo camino
Pregunta 3: Falla de AZ
¿Qué sucede si la zona us-east-1a falla?
💡 Respuesta
Impacto:
- EC2 App 1a: no disponible
- NAT GW 1a: no disponible
- MySQL Principal (si está en 1a): cambia a Standby
Lo que sigue funcionando:
- ALB redirige a EC2 App 1b
- NAT GW 1b gestiona el tráfico saliente de 1b
- MySQL Standby toma el relevo
Lección: La arquitectura multi-AZ asegura la continuidad del servicio.
Pregunta 4: Seguridad
¿Por qué la base de datos está en una subred sin acceso a Internet?
💡 Respuesta
Razones de seguridad:
- Superficie de ataque reducida: Sin IP pública = sin acceso directo
- Defensa en profundidad: Incluso si un atacante compromete la app, no puede exfiltrar directamente los datos
- Cumplimiento: Requisitos PCI-DSS, HIPAA, etc.
- Principio de menor privilegio: La base de datos no necesita Internet
Parte 4: Entregable
Cree un Documento
Genere un documento PDF o Word que contenga:
-
Página de título: Nombre del proyecto, su nombre, fecha
-
Tabla de direccionamiento IP:
- VPC CIDR
- Todas las subredes con sus CIDR
-
Esquema de arquitectura:
- Diagrama claro y legible
- Leyenda de los componentes
-
Tablas de ruteo:
- Una tabla por tipo de subred
- Con justificaciones
-
Análisis de seguridad:
- ¿Qué componentes están expuestos?
- ¿Cómo están protegidos los demás?
-
Análisis de disponibilidad:
- ¿Cómo gestiona la arquitectura una falla de AZ?
Criterios de Evaluación
| Criterio | Puntos |
|---|---|
| CIDR correcto y justificado | /10 |
| Subredes bien planificadas | /20 |
| Rutas correctas | /20 |
| Esquema claro y completo | /25 |
| Análisis de seguridad | /15 |
| Análisis de disponibilidad | /10 |
| Total | /100 |
Bonus: Comandos CLI
Si desea crear esta arquitectura con LocalStack, aquí están los comandos:
# Crear el VPC
aws --endpoint-url=http://localhost:4566 ec2 create-vpc \
--cidr-block 10.0.0.0/16 \
--tag-specifications 'ResourceType=vpc,Tags=[{Key=Name,Value=technoshop-vpc}]'
# Crear las subredes públicas
aws --endpoint-url=http://localhost:4566 ec2 create-subnet \
--vpc-id vpc-xxx \
--cidr-block 10.0.1.0/24 \
--availability-zone us-east-1a \
--tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=public-1a}]'
# Crear el Internet Gateway
aws --endpoint-url=http://localhost:4566 ec2 create-internet-gateway \
--tag-specifications 'ResourceType=internet-gateway,Tags=[{Key=Name,Value=technoshop-igw}]'
# ... continuar con los demás recursos
Resumen
Este laboratorio le ha permitido:
- ✅ Comprender el proceso de diseño VPC
- ✅ Planificar un direccionamiento IP coherente
- ✅ Definir tablas de ruteo apropiadas
- ✅ Analizar la seguridad y la disponibilidad
- ✅ Documentar una arquitectura cloud
Próxima semana: Seguridad de Red