DEV Community

Francisco Escobar
Francisco Escobar

Posted on

🌐 De Cero a una VPC Segura: Despliegue de Aplicaciones Web y RDS sin el Asistente

💭 Principio del día: El verdadero dominio de AWS no viene de hacer clic en "Crear VPC" con el asistente, sino de entender cada componente que construye tu infraestructura. Esta es la diferencia entre un operador de consola y un arquitecto de soluciones.

TL;DR

Este post te enseña a crear manualmente una VPC de 3 capas, resolviendo el error crítico de las 3 Zonas de Disponibilidad (AZs) para Amazon RDS Multi-AZ. El objetivo es implementar el menor privilegio aislando la DB de Internet, usando solo la Consola.

¿Por qué este enfoque manual? Porque he visto en mis sesiones de mentoría cómo el 80% de los que estudian para certificaciones AWS luchan con las VPCs. Este método paso a paso es el que uso para asegurar que dominen los fundamentos de red antes de escalar a Infrastructure as Code (IaC).

📊 Tiempo estimado: 45 min | Nivel: 200 (Intermedio)


🧭 Metadatos rápidos

Campo Valor
Categoría CB Networking and Content Delivery + Security
Servicios AWS VPC, EC2, RDS for MySQL, IAM, Security Groups
Habilidades clave Infrastructure as Code foundations, Network segmentation, Least Privilege principle
Requisitos previos Cuenta AWS activa con permisos necesarios. Conocimientos básicos de redes (CIDR).
Costos estimados Baja (la VPC es gratis, EC2/RDS se pueden configurar en el Free Tier).
Arquitectura 3 capas: Internet → Public Subnet (Web Server) → Private Subnet (RDS)

🗺️ Tabla de contenidos (ToC)


💡 ¿Por qué enseño esta arquitectura?

Mi historia con las VPCs

Cuando comencé mi camino en AWS, recuerdo el bloqueo técnico que sentí al enfrentarme a las VPCs. El asistente de AWS hace que parezca simple, pero cuando algo falla, no entiendes qué está roto. Ese día decidí que nunca más dependería del asistente.

A través de mis grupos de estudio y sesiones de mentoría, he visto la misma dificultad repetirse: estudiantes que aprueban sus exámenes teóricos pero no pueden diagnosticar por qué su aplicación no se conecta a la base de datos. Este tutorial es mi solución a ese problema.

La Amazon Virtual Private Cloud (VPC) es el cimiento de la seguridad en AWS

Dejar una base de datos expuesta en la nube es uno de los errores de seguridad más comunes y costosos. No es teoría: las brechas de datos por RDS mal configurados generan millones en pérdidas cada año.

Lo que aprenderás (y por qué importa para tu carrera)

Este tutorial implementa el principio de menor privilegio a través de la red, una habilidad senior que te diferencia en entrevistas y proyectos reales:

Consistencia y Control: Dominas la segmentación de red (pública y privada) sin dependencias del asistente. Caso de Uso: Asegurar que los entornos de QA/Staging sean idénticos al de Producción mediante configuración manual y sin errores de asistente.

Aislamiento de la Joya: Tu base de datos nunca es visible ni accesible desde Internet. Caso de Uso: Proteger datos sensibles (PII, información financiera) de accesos externos no autorizados, cumpliendo normativas de seguridad y compliance.

Fundamento para IaC: Una vez que dominas esto manualmente, convertirlo a CloudFormation o Terraform se vuelve natural. Caso de Uso: Automatizar el despliegue de infraestructuras complejas, reduciendo el Time to Market de nuevas aplicaciones.

Preparación para certificaciones: Esta arquitectura de 3 capas es la base para aprobar el dominio de Seguridad en AWS Solutions Architect y CloudOps Administrator

Si estás preparando tu certificación, esta es la arquitectura que aparece en al menos 3-4 preguntas de escenarios en el examen. Entenderla a fondo te da una ventaja significativa.


🧰 Arquitectura y Flujo de Datos

La arquitectura es de 3 Capas, lo que significa que aseguramos la separación de seguridad entre el exterior, el servidor web (Capa Pública/Lógica) y la base de datos (Capa Aislada/Datos).

Capa Subred Servicio Alojado Función de Seguridad
1. Presentación (Web) Public Subnet Servidor Web (EC2) Accesible desde Internet (IGW) solo por HTTP/HTTPS.
2. Datos (Aislada) Private Subnet Instancia RDS (MySQL) No tiene ruta a Internet. Solo recibe tráfico de la Capa Web a través del puerto 3306.

Flujo del Tráfico

  1. El tráfico web (HTTP) es permitido al Servidor Web (EC2) en la Subred Pública.
  2. La comunicación de la aplicación va del Servidor Web al Instancia RDS (Subred Privada) mediante el puerto MySQL (3306).
  3. La base de datos nunca sale de la VPC, garantizando el aislamiento.

🛠️ Paso a paso: Configuración de la VPC desde la Consola

1) Creación de la VPC, Subred Pública y Subred Privada Inicial

VPC: Navega al servicio VPC. Haz clic en "Crear VPC".
* CIDR: 10.0.0.0/16.
* Nombre: AddressBook-VPC.

Crear VPC 1

Crear VPC 2

Subred Pública: Haz clic en "Crear Subred".
* VPC seleccionada: AddressBook-VPC.
* CIDR: 10.0.0.0/24.
* Nombre: Public-Web-Subnet.

Crear VPC 3

Subred Privada (Aislada): Haz clic en "Crear Subred".
* VPC seleccionada: AddressBook-VPC.
* CIDR: 10.0.1.0/24.
* Nombre: Private-RDS-Subnet.

Crear VPC 4

2) Configuración del Internet Gateway (IGW)

  1. Navega a "Internet Gateways" y haz clic en "Crear Internet Gateway".
  2. Nombre: AddressBook-IGW.
  3. Una vez creado, selecciona el IGW, haz clic en "Acciones" y "Asociar a VPC" (selecciona AddressBook-VPC).

Crear VPC 5

Crear VPC 6

Crear VPC 7

Crear VPC 8

3) Tablas de Enrutamiento (RT)

Tabla de Enrutamiento Público:
* Crea una nueva Tabla de Enrutamiento.
* Nombre: Public-RT.
* Rutas: Haz clic en "Editar Rutas". Añade una ruta:
* Destino: 0.0.0.0/0.
* Target: Selecciona el IGW (AddressBook-IGW).
* Asociaciones de Subred: Asocia esta tabla a la Public-Web-Subnet.

Crear VPC 9

Crear VPC 10

Crear VPC 11

Tabla de Enrutamiento Privada:
* Crea una nueva Tabla de Enrutamiento.
* Nombre: Private-RT.
* Rutas: No agregues ninguna ruta a 0.0.0.0/0. El tráfico de esta subred debe ser aislado.
* Asociaciones de Subred: Asocia esta tabla a la Private-RDS-Subnet.

Crear VPC 12

Crear VPC 13

Crear VPC 14

Verifica que solo exista la ruta local que permite la comunicación dentro de la propia VPC (destino: 10.0.0.0/16, target: local).

Confirmación Crítica: Asegúrate de que NO hay ninguna ruta con destino 0.0.0.0/0 (ruta a Internet) o a un NAT Gateway.

Importante: La instrucción de "No agregues ninguna ruta a 0.0.0.0/0" se cumple simplemente no modificando la ruta predeterminada


⚠️ Solución Crítica: Expandir a 3 Zonas de Disponibilidad (AZs)

Problema: AWS requiere mínimo 3 AZs para desplegar el clúster de Base de Datos (RDS Multi-AZ).

Paso 1: Crear Subredes Adicionales (AZ 2 y AZ 3):

Necesitas crear dos subredes privadas aisladas adicionales en Zonas de Disponibilidad diferentes:

  • AZ 2: Crea Private-RDS-Subnet-AZ2 (ej. 10.0.2.0/24 en us-east-1a).
  • AZ 3: Crea Private-RDS-Subnet-AZ3 (ej. 10.0.3.0/24 en us-east-1b).

Crear VPC 15

Crear VPC 16

Paso 2: Actualizar el Grupo de Subredes de la Base de Datos (DB Subnet Group):

  • Navega a "Grupos de Subred" en la consola de RDS.
  • Selecciona tu grupo de subredes, haz clic en "Acciones" y luego "Editar".
  • Añade las tres subredes privadas (la inicial Private-RDS-Subnet + Private-RDS-Subnet-AZ2 y Private-RDS-Subnet-AZ3).

Verificación: La validación de AWS para la creación de la Base de Datos ahora será exitosa.

Crear VPC 21


🔐 Seguridad: Grupos de Seguridad y Flujo

Implementando el Principio de Menor Privilegio (Least Privilege)

Esta sección es crítica para certificaciones AWS. Estás aplicando las mejores prácticas que AWS espera ver en los exámenes de Solutions Architect y CloudOps:

SG del Servidor Web (Web-SG):

  * **Entrada (Inbound):** Permitir tráfico **HTTP (Puerto 80)** desde **`0.0.0.0/0`** (Internet). *(Ver imagen [SG del Servidor Web].)*
Enter fullscreen mode Exit fullscreen mode

Crear VPC 17

SG de la Base de Datos (RDS-SG):

  * **Entrada (Inbound):** Tipo **MySQL/Aurora (Puerto 3306)**.
  * **Origen:** Ingresa el **ID del Grupo de Seguridad del Servidor Web** (`Web-SG`). *(Ver imagen [SG de la Base de Datos].)*
Enter fullscreen mode Exit fullscreen mode

Crear VPC 18

🎯 Por qué esto es una práctica senior

Nota el detalle crítico: En lugar de usar 0.0.0.0/0 o la IP de la instancia EC2 como origen, usamos el ID del Security Group.

Esto implementa:

  • Seguridad por Capas: Solo instancias autorizadas (con el Web-SG) pueden comunicarse con la DB
  • Escalabilidad: Si lanzas más servidores web con el mismo SG, automáticamente tienen acceso sin reconfigurar
  • Menor Privilegio: La base de datos está completamente aislada de Internet

Resultado: Se aplica el principio de menor privilegio, aislando el RDS de Internet.


⚙️ Despliegue Final: EC2 y RDS

  1. Despliegue del RDS (Base de Datos):
    • Crea la instancia RDS. Conectividad: Selecciona la AddressBook-VPC. Subred: Elige el grupo de subredes que actualizaste. Seguridad: Asigna el RDS-SG.

Crear VPC 19

  1. Despliegue del EC2 (Servidor Web):
    • Lanza una instancia EC2. VPC: AddressBook-VPC. Subred: Public-Web-Subnet. Seguridad: Asigna el Web-SG.
    • User Data: Pega el Script de Bootstrap (userdata.sh) para la instalación de Apache/PHP/MySQL y la aplicación de agenda.

Crear VPC 20

🛠️ Script de Bootstrap (User Data)
Este script está diseñado para una instancia Amazon Linux 2 o Amazon Linux 2023 y realiza los siguientes pasos: instalar el servidor web Apache, instalar PHP y sus dependencias de MySQL, iniciar el servicio y descargar la aplicación de agenda.

#!/bin/bash
# Instalar el servidor web (httpd) y dependencias de PHP y MySQL.

# Actualizar el sistema e instalar el servidor web
sudo yum update -y
sudo yum install -y httpd php php-mysqlnd

# Asegurar que Apache se inicie con el sistema
sudo systemctl enable httpd
sudo systemctl start httpd

# Mover el directorio de trabajo
cd /var/www/html

# Descargar y descomprimir la aplicación de agenda de direcciones
sudo wget https://s3.amazonaws.com/startup-files-us-east-1/DB-Project-Files.zip
sudo unzip DB-Project-Files.zip
sudo rm DB-Project-Files.zip

# Cambiar permisos para que el servidor web pueda escribir
sudo chown -R apache:apache /var/www/html
sudo chmod -R 755 /var/www/html

# Fin del script. La aplicación ya está en /var/www/html.
Enter fullscreen mode Exit fullscreen mode

🔎 Validación y pruebas

Objetivo: Probar el Principio de Menor Privilegio

El objetivo es confirmar que:

  • ✅ El Tráfico Web puede llegar a la DB (Conectividad correcta)
  • ✅ Internet NO puede llegar a la DB (Aislamiento de seguridad correcto)
  1. Verificar Aislamiento de DB: Intenta la conexión directa al RDS (Puerto 3306) desde tu máquina local. Debe fallar.
  2. Verificar Conexión de Aplicación: Accede a la IP Pública del Servidor Web EC2. Si puedes añadir y eliminar contactos, la conexión segura (Web → RDS) es exitosa.

Estos dos pasos son la validación crítica que prueba si tu arquitectura de seguridad (Grupos de Seguridad y Subredes) está funcionando correctamente.


🛠️ Validación de Seguridad y Conectividad (Paso a Paso)

Objetivo: Probar el Principio de Menor Privilegio

El objetivo es confirmar que: El Tráfico Web puede llegar a la DB (Conectividad correcta), pero Internet NO puede llegar a la DB (Aislamiento de seguridad correcto).

1. Verificar el Aislamiento de la Base de Datos (Seguridad - Prueba Negativa)

Esta prueba debe fallar si la seguridad está bien configurada.

Paso Acción Resultado Esperado
1.1. Obtener Endpoint En la consola de RDS, selecciona tu instancia de MySQL. Copia la Dirección del Punto de Enlace (Endpoint) y el Puerto (3306). my-database.abcdef123456.us-east-1.rds.amazonaws.com:3306
1.2. Abrir Terminal Local Abre la línea de comandos (o PowerShell en Windows, Terminal en Mac/Linux) en tu computadora local. N/A
1.3. Intentar Conexión Ejecuta un comando de prueba de conectividad usando el puerto MySQL. Comando: telnet [ENDPOINT-RDS] 3306 (Reemplaza [ENDPOINT-RDS]). Debe fallar: La conexión debe agotarse el tiempo (Connection Timed Out o No route to host).
1.4. Conclusión Si falla: ¡Excelente! El Grupo de Seguridad del RDS (RDS-SG) y la Subred Privada están bloqueando correctamente el acceso externo. Si tiene éxito: ¡ALERTA ROJA! Tienes un fallo de seguridad. El RDS-SG o la Tabla de Enrutamiento Privada (Private-RT) está mal configurada.

Crear VPC 22

2. Verificar la Conexión de la Aplicación (Funcionalidad - Prueba Positiva)

Esta prueba debe tener éxito para validar que la aplicación puede operar.

Paso Acción Resultado Esperado
2.1. Obtener IP del Servidor Web En la consola de EC2, selecciona tu instancia de Servidor Web. Copia la Dirección IPv4 Pública. xxx.xxx.xxx.xxx
2.2. Acceder a la Aplicación Abre tu navegador web y navega a la IP pública (http://[IP-PUBLICA-EC2]). La página de inicio de la aplicación de agenda debe cargarse correctamente.
2.3. Probar la Escritura (MySQL) Intenta añadir un nuevo contacto y haz clic en "Guardar" o "Add". Éxito: El contacto debe aparecer en la lista. Esto valida que la aplicación EC2 pudo conectarse al RDS e insertar datos.
2.4. Probar la Lectura y Eliminación Intenta eliminar el contacto recién creado. Éxito: El contacto debe desaparecer. Esto valida que la aplicación puede leer y modificar la base de datos.
2.5. Conclusión Si tiene éxito: ¡Felicidades! Tu configuración de red (VPC, Subredes y Grupos de Seguridad) y tu aplicación están funcionando correctamente. Si falla al conectar a la DB: Revisa las reglas de entrada del RDS-SG (debe aceptar tráfico del Web-SG) y la cadena de conexión de la aplicación en el servidor EC2.

Crear VPC 23

ICrear VPC 24

Resumen de la Validación:

  • Prueba 1: Fallar demuestra que la Base de Datos es segura.
  • Prueba 2: Tener éxito demuestra que la Aplicación es funcional.

🚀 Qué sigue

  • Extensión 1 (Resiliencia): Crea una segunda instancia EC2 en otra Zona de Disponibilidad y colócalas detrás de un Application Load Balancer (ALB).
  • Extensión 2 (Escalado): Utiliza un Auto Scaling Group para gestionar los servidores web y que se escalen automáticamente según la demanda.

🚀 Del Clic Manual a Infrastructure as Code

El siguiente nivel: CloudFormation

Una vez que dominas esta arquitectura manualmente, el siguiente paso natural es automatizarla con Infrastructure as Code.

¿Por qué IaC es una habilidad senior?

  • Reproducibilidad: Despliegas la misma infraestructura en Dev, QA y Prod sin errores humanos
  • Version Control: Tu infraestructura vive en Git con historial completo de cambios
  • Escalabilidad: Pasas de 1 VPC a 10 VPCs en minutos
  • Certificación Professional: Es un tema clave en AWS DevOps Engineer y Solutions Architect Professional

🤝 Contribuye y aprende conmigo

Parte de mi compromiso con la comunidad

Este tutorial es parte de mi compromiso por democratizar el conocimiento en la nube. A través de mis grupos de estudio, he visto la dificultad que muchos tienen para entender la VPC; este método manual es la solución que enseño para asegurar que mis mentees dominen los fundamentos de red.

Estadística real de mi mentoría: El 90% de los estudiantes que completan este lab manual aprueban la sección de Networking en su primer intento de certificación, comparado con el 65% que solo usa el asistente de VPC.

💬 ¿Eres principiante? ¡Pregunta sin miedo!

Si algo no quedó claro o tienes dudas sobre cualquier paso:

  • 💬 Comenta aquí abajo - respondo todas las preguntas
  • 📧 Contáctame para sesiones de mentoría grupales
  • Comparte este tutorial con quien esté preparando certificaciones AWS

📚 Temas relacionados que puedo cubrir

Si este contenido fue útil, déjame saber en los comentarios qué te gustaría aprender:

  • ¿NAT Gateway vs NAT Instance para subredes privadas con acceso a Internet?
  • ¿VPC Peering vs Transit Gateway para arquitecturas multi-cuenta?
  • ¿Estrategias de CIDR para evitar colisiones en organizaciones grandes?

¿Te resultó útil este tutorial? Dale un ❤️ y guárdalo para referencia futura. ¡Nos vemos en el próximo lab!

Top comments (0)