Escenario para el desarollo del trabajo

Objetivo:

Diseñar, implementar y documentar una arquitectura segura en AWS para una aplicación web de comercio electrónico, aplicando los principios y prácticas aprendidas en el curso Cloud Security Foundations.

Requisitos del proyecto:

El estudiante deberá desplegar una solución segura en AWS usando AWS Academy Learner Lab. La solución debe incluir lo siguiente:

1. Arquitectura de Red Segura (VPC y Subredes)

Crear una VPC personalizada con un rango CIDR definido por el estudiante.

Se creó la VPC-app-web con el rango de direcciones CIDR 1.0.0.0/16, la cual permite hasta 65536 direcciones IPv4.

Configurar al menos dos zonas de disponibilidad (AZs) para lograr alta disponibilidad.

  • Crear subredes públicas y subredes privadas distribuidas entre las AZs:
  • Las subredes públicas albergarán los servidores web.
  • Las subredes privadas albergarán las instancias de base de datos.

Se crean 2 subredes 2 públicas y 2 privadas distribuidas (una pública y una privada) en 2 zonas de disponibilidad diferentes (1a,1b) como se indica en la arquitectura. Cada subred tiene disponibles aproximadamente 251 direcciones ya que AWS reserva 5 direcciones por defect: Dirección de red, Dirección de broadcast (aunque no se usa realmente en AWS), Gateway de la subred (primer IP usable), Dos IPs más reservadas por AWS para fines internos (DNS y futuras expansiones).

2. Recursos de Cómputo (EC2)

  • Implementar al menos dos instancias EC2 en subredes públicas, cada una alojando una aplicación web simple (por ejemplo, un servidor Apache o NGINX con una página HTML o PHP).

  • Implementar al menos una instancia EC2 en una subred privada con una base de datos (por ejemplo, MySQL o PostgreSQL).

Código para instalar MySQL


#!/bin/bash
yum update -y
yum install -y mariadb-server
systemctl start mariadb
systemctl enable mariadb

Para instalar los servidores en las instancias EC2, se procederá a conectarse a la instancia mediante SSH. Para ello, debe garantizarse que las instancias puedan salir a internet. Se crea una puerta de enlace a internet:

Se procede a asociar la VPC con la subred pública de la zona a:

Se agrega la ruta hacia Internet:

Se procede a hacer la instalación de Apache


#!/bin/bash

# Actualizar los paquetes del sistema
sudo dnf update -y

# Instalar Apache (httpd)
sudo dnf install -y httpd

# Iniciar el servicio Apache
sudo systemctl start httpd

# Habilitar el servicio para que inicie automáticamente al arrancar
sudo systemctl enable httpd

# Crear una página HTML de prueba
echo "<h1>Servidor Web 1 funcionando correctamente</h1>" | sudo tee /var/www/html/index.html

Se verifica el estado del servidor:

Se verifica la conexión al servidor:

Se hace el mismo procedimiento para la instancia 2 y se asocia a la puerta de enlace para que pueda enrutarse a internet y se instala el servidor Apache de la misma forma en que se instaló para el servidor 1:

Se verifica ingresando desde el navegador:

  • Asegurarse de que las instancias de base de datos no sean accesibles desde Internet pero que puedan salir a internet para realizar actualizaciones.

Pra garantizar la salida a Internet desde una subred privada, se configura una compuerta NAT o NAT Gateway.

Se asocia la NAT con una tabla de enrutamiento para la subred privada:

Se procede a asociar la subred privada:

3. Seguridad de Red

  • Configurar Grupos de Seguridad (Security Groups) para controlar el tráfico hacia y desde las instancias EC2.

Grupo de seguridad del servidor 1:

Grupo de seguridad del servidor 2:

  • Configurar Listas de Control de Acceso a la Red (ACLs) para aplicar políticas adicionales a nivel de subred.

ACL de subredes públicas:

ACL de subredes privadas:

  • Asegurarse de que solo el puerto 80 (HTTP) esté accesible públicamente para las instancias web y el puerto 22 (SSH) esté accesible solo desde una IP o un rango de IPs específico.

Se corrobora que se pueda conectar a los servidores 1-2 a través del puerto 80:

Se corrobora la conexión con SSH:

  • Permitir acceso al puerto de la base de datos solo desde las instancias web.

Se genera la conexión a la instancia que aloja la base de datos a través de SSH desde la instancia 1:

Se genera la conexión a la instancia que aloja la base de datos a través de SSH desde la instancia 2:

4. Gestión de Identidades (IAM)

  • Crear al menos tres usuarios IAM con permisos diferenciados, por ejemplo:
  • Usuario de desarrollador: acceso limitado a EC2 y S3.
  • Usuario de administrador de seguridad: acceso a IAM, CloudTrail y políticas.
  • Usuario de auditoría: acceso de solo lectura a todos los servicios.
  • Aplicar políticas personalizadas o administradas según corresponda.

En este punto no se puede avanzar ya que no se tienen permisos para usar este servicio.

5. Almacenamiento Seguro (S3)

  • Crear al menos dos buckets S3:
  • Uno para alojar archivos estáticos de la aplicación web.
  • Otro para almacenamiento de logs de auditoría (por ejemplo, logs de acceso o aplicación).

  • Configurar políticas de bucket y/o políticas IAM para controlar el acceso.

No se tienen los permisos para crear políticas de seguridad en el bucket. - Habilitar versionado y cifrado del lado del servidor en al menos un bucket.

Pese a no tener permisos se logró subir archivos al bucket.

Minutos después se subió nuevamente uno de los archivos y se registró en el control de versiones.

Se intentó crear una regla para que cada vez que se suba un archivo a S3 se envíe una notificación al correo electrónico integrando SNS con EventBridge, sin embargo, no fue posible pese a que se creó la regla de manera satisfactoria.

Para solucionar la notificación vía correo electrónico, se creó una notificación enlazando S3 con SNS para todos los eventos de tipo PutObject.

Adicionalmente, se configuró en CloudTrail un registro de seguimiento al bucket S3 de material estático.

Se pueden apreciar los registros almacenados en el bucket de S3 creado para el almacenamiento de los logs de CloudTrail.

Por último, en la carpeta de logs que se requería inicialmente se pudieron almacenar los logs generados por las actividades en el bucket de S3 para los archivos estáticos.

6. Diagrama de Arquitectura

  • Diseñar un diagrama de arquitectura de la solución, utilizando una herramienta como Lucidchart, draw.io, o AWS Architecture Icons.
  • El diagrama debe reflejar todos los componentes implementados: VPC, subredes, instancias EC2, base de datos, buckets S3, usuarios IAM, zonas de disponibilidad, NACLs, Security Groups, etc.