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 usuarioPOST /users/login
→ Iniciar sesión
🔹 Gestión de Publicaciones
POST /posts/
→ Crear una publicaciónGET /posts/
→ Obtener todas las publicaciones
🔹 Gestión de Etiquetas
POST /tags/
→ Crear una etiquetaGET /tags/
→ Listar todas las etiquetas
📖 Documentación Interactiva
- Swagger UI: http://127.0.0.1:8000/docs
🗄️ Esquema de la Base de Datos
📌 Modelo Relacional
🔹 Tablas Principales
users
)
Usuarios (Campo | Tipo | Descripción |
---|---|---|
id | INT | Identificador único |
username | STRING | Nombre de usuario único |
STRING | Correo electrónico único |
posts
)
Publicaciones (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