Documentacion Proyecto 1 - Arthaudcom/SeguridadEnLaCloudProyecto1 GitHub Wiki

Configuración de la Infraestructura en GCP

☁️ Servicios Utilizados

  • Compute Engine: Para desplegar el backend (FastAPI) y frontend (React).
  • Cloud SQL: Para la base de datos PostgreSQL.
  • Cloud Storage: Para almacenamiento de archivos estáticos.
  • VPC (Virtual Private Cloud): Para gestionar redes internas y reglas de firewall.

🛠 Pasos de Configuración

🔹 1. Configurar Compute Engine

gcloud compute instances create backend-instance \
  --machine-type=e2-medium \
  --image-family=debian-11 \
  --image-project=debian-cloud \
  --tags=http-server,https-server

🔹 2. Configurar PostgreSQL en Cloud SQL

Para la base de datos del proyecto, se utilizó Cloud SQL con PostgreSQL como el motor de base de datos. La configuración se realizó en los siguientes pasos:

2.1. Creación de la instancia de Cloud SQL

  • Ingresar a la Consola de Google Cloud.
  • Navegar a SQL en el menú lateral.

Posteriormente, se crea la instancia, seleccionando PostgreSQL como el motor de base de datos. Luego se configuraron los siguientes parámetros: ID de la instancia: blog-db. Se estableció la contraseña. Región y zona: Se seleccionó la región más cercana para optimizar la latencia. Configuración de máquina: Se eligió una máquina con 4 CPU virtuales y 16GB. Almacenamiento: Se configuró con 10 GB de SSD.

🔹 3. Configurar Docker Compose para Desplegar la Aplicación

🔹 4. Configurar reglas de firewall

🔗 Documentación de la API

🚀 Descripción

Esta API proporciona los servicios para gestionar usuarios, publicaciones, etiquetas y calificaciones.

📑 Endpoints Principales

🔹 Autenticación

  • POST /users/register → Registrar un usuario
  • POST /users/login → Iniciar sesión

🔹 Gestión de Publicaciones

  • POST /posts/ → Crear una publicación
  • GET /posts/ → Obtener todas las publicaciones

🔹 Gestión de Etiquetas

  • POST /tags/ → Crear una etiqueta
  • GET /tags/ → Listar todas las etiquetas

📖 Documentación Interactiva

🗄️ Esquema de la Base de Datos

📌 Modelo Relacional

🔹 Tablas Principales

Usuarios (users)

Campo Tipo Descripción
id INT Identificador único
username STRING Nombre de usuario único
email STRING Correo electrónico único

Publicaciones (posts)

Campo Tipo Descripción
id INT ID de la publicación
title STRING Título de la publicación
content STRING Contenido del post

Tags (tags)

Campo Tipo Descripción
id INT ID del tag
name STRING Nombre del tag

Ratings (ratings)

Campo Tipo Descripción
id INT ID del rating
score FLOAT Puntaje numerico
user_id INT ID del puntaje del usuario
post_id INT ID del post del puntaje

🎨 Decisiones de Diseño

📌 Arquitectura del Proyecto

  • Backend: FastAPI por su rapidez y compatibilidad con OpenAPI.
  • Frontend: React con Nginx para servir contenido estático.
  • Base de Datos: PostgreSQL por su robustez en sistemas relacionales.

🔹 Decisiones de Diseño del Código

  • Se usan esquemas Pydantic para validar los datos.
  • Se aplica inyección de dependencias en FastAPI.
  • Se usa Docker Compose para gestionar múltiples servicios.

🔒 Decisiones de Seguridad

🔹 1. Autenticación y Autorización

  • Uso de JWT para gestionar sesiones de usuarios.

🔹 2. Protección contra SQL Injection

  • Uso de SQLAlchemy ORM en lugar de consultas directas.

🔹 3. Reglas de Firewall en GCP

gcloud compute firewall-rules create allow-http \
  --allow tcp:80 --target-tags=http-server