Diseno experimento para el requisito Seguridad S5 - JohannPaezU/MISW4501-MediSupply GitHub Wiki
| Título del experimento | Experimento de Seguridad |
|---|---|
| Propósito del experimento | El objetivo del experimento es confirmar que nuestra arquitectura promueve la confidencialidad e integridad de la información, asegurando que solo las personas autorizadas puedan acceder y modificar los datos del inventario de productos médicos. |
| Resultados esperados | Se espera que solo las personas autorizadas puedan ver y modificar la información del inventario, garantizando así la confidencialidad e integridad de los datos. De esta forma, se validará que la arquitectura implementada cumple con las medidas de seguridad necesarias para proteger la información del inventario. |
| Recursos requeridos | Python, FastAPI, SQLAlchemy, Pydantic, Uvicorn, Git, GitHub. |
| Elementos de arquitectura involucrados | • ASR involucrado: https://proyecto-final-grupo-009.atlassian.net/browse/SCRUM-49 • Modelo de componentes: https://github.com/JohannPaezU/MISW4501-MediSupply/wiki/Modelo-de-componentes-S4 • Modelo de datos: https://github.com/JohannPaezU/MISW4501-MediSupply/wiki/Modelo-de-datos-S4 |
| Esfuerzo estimado | Se espera realizar el experimento en 6 días con 2.5 horas/hombre por día. |
| Punto de sensibilidad | La decisión crítica que se implementará es el uso de un autorizador para permitir que solo los usuarios o servicios con los permisos adecuados accedan o soliciten recursos mediante el API Gateway para asegurar la confidencialidad e integridad de la información. |
|---|---|
| Historia de arquitectura asociada | https://proyecto-final-grupo-009.atlassian.net/browse/SCRUM-49 |
| Nivel de incertidumbre | El nivel de incertidumbre es medio ya que podríamos necesitar más mecanismos de control como revocar el acceso o manejo de log de eventos para poder garantizar aún más la confidencialidad e integridad de la información. |
| Estilos de Arquitectura asociados al experimento | Análisis (Atributos de calidad que favorece y desfavorece) |
|---|---|
| Estilo de arquitectura de microservicios. |
Favorece: ✓ Desacoplamiento ✓ Alta cohesión ✓ Confidencialidad ✓ Integridad Desfavorece: ✓ Latencia |
| Tácticas de Arquitectura asociadas al experimento | Descripción |
|---|---|
| Resistir ataques: Autenticación (Autenticar actores) | Tendremos un componente de Registro para que los usuarios puedan registrarse en el sistema, mientras que, el inicio de sesión, el código OTP y el token JWT estarán a cargo de un componente Autorizador. Finalmente tendremos un componente Gestor de Inventario que ofrecerá la información confidencial del inventario de productos a la que se quiere acceder siempre y cuando se envíe un token JWT válido generado por el Autorizador en cada petición. |
| Microservicio | Propósito y comportamiento esperado | Tecnología Asociada |
|---|---|---|
| Registro | El propósito de este componente es ofrecer dos endpoints: el primero para que el usuario pueda registrarse y el segundo para poder obtener la contraseña encriptada necesaria para el endpoint de inicio de sesión. Además, se encargará de almacenar la información del registro de los usuarios. | • Python • FastAPI • SQLAlchemy • Pydantic |
| Autorizador | El propósito de este componente es ofrecer tres endpoints: el primero para que el usuario pueda iniciar sesión y obtener un código OTP, el segundo para validar el código OTP y de ser válido obtener un token JWT de sesión y el tercero para verificar la validez del token JWT de sesión. | • Python • FastAPI • Pydantic |
| Gestor de Inventario | El propósito de este componente es ofrecer los endpoints necesarios para acceder a la información del inventario de productos médicos siempre y cuando el usuario esté autenticado con un token JWT. | • Python • FastAPI • SQLAlchemy • Pydantic |
| Conector | Comportamiento deseado en el experimento | Tecnología Asociada |
|---|---|---|
| Registro – almacenamiento de usuarios | El componente de registro se comunicará con el almacenamiento para guardar la información de los usuarios registrados. | Python FastAPI |
| Inicio de sesión - Autenticador | Al iniciar sesión, se utilizará el componente autenticador para generar un código OTP y posteriormente un token JWT que servirá para hacer peticiones al componente Gestor de Inventario. | Python FastAPI |
| Gestor de Inventario - Autenticador | Al hacer una consulta de información del inventario, se utilizará el componente Autenticador para verificar que el token JWT enviado en la petición sea válido y no haya expirado. | Python FastAPI |
| Tecnología asociada con el experimento | Justificación |
|---|---|
| Lenguajes de programación: Python | Es un lenguaje de programación conocido por su simplicidad y legibilidad. Es ideal para desarrollar prototipos rápidos y mantener un código limpio y estructurado. |
| Plataforma de despliegue | Equipo local (localhost). |
| Bases de datos: SQLite | Es una base de datos ligera y fácil de integrar, perfecta para proyectos pequeños o experimentos. Permite trabajar con bases de datos relacionales sin necesidad de un servidor de base de datos separado. |
| Herramientas de análisis | • Excel • Archivos de logs de ejecución de la consola. |
| Librerías: FastAPI, SQLAlchemy, Pydantic |
FastAPI: Es un framework web moderno y de alto rendimiento para crear APIs con Python. Proporciona validación automática de datos, documentación interactiva automática (Swagger), y es ideal para desarrollar APIs REST de manera rápida y eficiente. SQLAlchemy: Es una biblioteca de mapeo objeto-relacional (ORM) para Python que facilita la interacción con bases de datos relacionales desde Python de una manera más orientada a objetos. Simplifica el manejo de consultas SQL y la manipulación de datos en la base de datos. Pydantic: Es una biblioteca de validación de datos que utiliza type hints de Python. Se integra perfectamente con FastAPI para la validación automática de datos de entrada y salida. |
| Frameworks de desarrollo | FastAPI: Es un framework web moderno, rápido y de alto rendimiento para crear APIs con Python. Incluye características como validación automática de datos, documentación interactiva automática, soporte nativo para async/await, y es ideal para desarrollar microservicios y APIs REST de manera eficiente. |
-
Preparación y Configuración del Ambiente (7h)
Instalación de librerías, configuración de la base de datos para usuarios/inventario y puesta a punto de logs de seguridad. -
Desarrollo de Microservicios (22h)
Implementación del Registro (usuarios), Autorizador (OTP, JWT) y Gestor de Inventario con validación de tokens en cada operación. -
Integración de Componentes (9h)
Flujo completo de autenticación y autorización: registro → login con OTP → generación y validación de JWT → acceso controlado al inventario. -
Pruebas (12h)
Pruebas de simulaciones de intrusión (intentos con credenciales inválidas, tokens caducados o manipulados). -
Monitoreo y Validación de Seguridad (6h)
Registro y análisis de accesos, validación de intentos fallidos y simulación de ataques básicos como fuerza bruta simple. -
Análisis de Resultados y Documentación (4h)
Consolidación de métricas de confidencialidad e integridad, redacción del reporte y hallazgos clave.
