Introducción#
Amazon Web Services (AWS) no es ni un protocolo ni una sola aplicación. Al igual que AD engloba varios protocolos bajo un mismo ecosistema, AWS es un conjunto de tecnologías y servicios gestionados en la nube.
Para que los usuarios pudiesen conectarse remotamente con las aplicaciones propietarias de Amazon, este creó una API a través de la cual los clientes se comunican con los servidores que alquilan.
Para “conectarse a AWS”, un usuario no usa un protocolo de red especial, como puede pasar con AD (Kerberos, SMB, etc.), sino que toda la comunicación con servicios de AWS funciona sobre HTTP(S) con APIs REST.
Generalmente, las comunicaciones pueden realizarse a través del navegador o con la herramienta de CLI
aws. En este segundo caso,awssimplemente convierte los parámetros que se le pasan por la terminal en una solicitud HTTP con el formato del API correspondiente.
LocalStack#
Si un equipo está desarrollando una aplicación que usa AWS, usarla les cuesta dinero porque Amazon cobra por cada petición a la API, y además requiere internet. Para solucionar esto está LocalStack.
LocalStack es una herramienta (y aplicación) de código abierto escrita principalmente en Python que simula la nube de AWS localmente. Se encarga de levantar un servidor local (normalmente en localhost:4566) y simular el resto de servicios.
Puertos usados#
En AWS Real#
En AWS real, para acceder a diferentes servicios, no se usan puertos diferentes, todo se hace mediante el puerto 443 (HTTPS). Amazon sabe a qué servicio quiere acceder el usuario en función del subdominio que solicita en la cabecera Host.
P.ej, si la solicitud va hacia sqs.us-east-1.amazonaws.com:443 o hacia s3.amazonaws.com:443, aunque el usuario no lo indique, el load balancer hará que los accesos vayan a servidores de SQS y S3, respectivamente.
En LocalStack#
Históricamente, LocalStack levantaba puertos independientes para cada servicio simulado (SQS, S3, EventBridge, etc.). Como todos se ejecutaban en localhost y no se podían usar subdominios fácilmente como con AWS real sin modificar configuraciones del sistema, los desarrolladores decidieron usar un puerto distinto para cada servicio. S3 usaba el puerto 4572, SQS el 4576, y así con otros.
En la actualidad esto ha cambiado y ahora LocalStack usa un único puerto (4566) que se encarga de redirigir las solicitudes automáticamente a sus respectivos servicios específicos.
Como en realidad LocalStack es una aplicación entera que simula toda la infraestructura, estas “redirecciones” son simplemente llamadas a funciones internas de LocalStack. En lugar de tener una app dedicada a S3 como AWS, LocalStack la implementa como una función, y así con todos los otros servicios.
Para saber a qué servicio redirigir (teniendo en cuenta que ahora no podemos contar con subdominios o la cabecera Host porque la solicitud va hacia 127.0.0.1 y no hacia un dominio), LocalStack lo infiere a partir del contenido de la solicitud:
- Hay parámetros GET (como
Action=ListQueues) que identifican unívocamente a servicios específicos (en este caso SQS). - Si está, la cabecera X-Amz-Target contiene el servicio a usar.
- Si se firman las solicitudes, el header
Authorizationcontiene el servicio a usar. - Si hay otros datos, como p.ej un path a un archivo, LocalStack puede deducir que se trata de S3.
Servicios#
Mensajería y Comunicaciones#
Estos son servicios que permiten que diferentes partes de una aplicación se comuniquen entre sí, normalmente de forma asíncrona.
SQS (Simple Queue Service)#
SQS (Simple Queue Service) es el servicio de colas de mensajes, actúa como un buzón temporal entre servicios. Un componente (productor) manda un mensaje a la cola y lo deja ahí. El otro componente (worker), hace un polling constante y, cuando tiene tiempo, procesa el mensaje.
Si un usuario consigue meter un mensaje malicioso en una cola y el código del worker tiene una vulnerabilidad, es posible que ese worker lo lea y lo ejecute, consiguiendo RCE. Las acciones interesantes suelen ser ListQueues, GetQueueUrl y SendMessage.
Para listar las colas disponibles con aws:
| |
SNS (Simple Notification Service)#
Servicio de publicación y suscripción. Se manda un mensaje a un tema (topic) y SNS lo reparte automáticamente a todos los clientes suscritos a dicho tema.
EventBridge#
EventBridge es principalmente un bus de eventos. Reacciona a eventos de otros servicios AWS (cuando se sube un objeto a S3, cuando hay un cambio de estado en EC2, etc.). Una de sus funciones es ejecutar tareas programadas, como cron.
Seguridad e Identidad#
IAM (Identity and Access Management)#
Se encarga de definir quién tiene acceso a qué recursos en base a usuarios y roles. Es el equivalente de forma conceptual a AD para permisos en la nube.
Unas credenciales estáticas de IAM (de un usuario normal estático) están formadas por una clave de acceso (Access Key) y una clave secreta (Secret Key). Unas credenciales temporales emitidas por STS tienen además un token de sesión (Session Token.)
STS (Security Token Service)#
Emite credenciales temporales y valida si el token de seguridad enviado en la petición HTTP es válido para poder asumir un rol específico.
Si un servicio necesita hacer algo, le pide a STS unas credenciales temporales (Formado por Access Key, Secret Key y Token de Sesión). Normalmente, las peticiones a la API real de AWS deben ir firmadas criptográficamente con esas credenciales, aunque en simuladores del entorno AWS (como LocalStack) esto suele no ser necesario en redes internas.
Almacenamiento#
S3 (Simple Storage Service)#
Es el disco duro de la nube. Funciona mediante Buckets (carpetas raíz) y Objetos (los archivos de dentro).
En S3, un objeto está definido por un archivo y por sus metadatos, en conjunto.
Los objetos se guardan en Buckets, que son directorios de alto nivel, los contenedores raíz donde se almacenan los objetos. En estos buckets no existen los subdirectorios, todos los buckets tienen una estructura plana, esto significa que las rutas que aparecen en los nombres de los objetos forman parte del nombre del propio objeto.
P.ej, un objeto “2026/enero/database.db.bak” es en sí el nombre del archivo “2026/enero/database.db.bak”, no hay un directorio “2026” ni otro “enero” dentro de este. En general, si una app (como aws) nos deja tratar esos “subdirectorios” como tal, se tratará de una abstracción hecha por la aplicación.
Para conectarnos a S3 y listar buckets:
| |
EBS (Elastic Block Store)#
Servicio de almacenamiento en bloque. Son discos duros virtuales que se conectan a los servidores para instalar Sistemas Operativos o bases de datos.
Computación#
EC2 (Elastic Compute Cloud)#
El equivalente en la nube a levantar una máquina virtual. El usuario gestiona el SO, el software, etc.
Lambda#
Es computación sin gestionar el servidor. El cliente sube un snippet de código y AWS lo ejecuta cuando ocurre un evento (p.ej, cuando llega un mensaje a SQS o cuando se sube un objeto a S3). No hace falta gestionar ningún SO ni servidor entero.
Redes#
VPC (Virtual Private Cloud)#
Es una red privada virtual dentro de AWS. El usuario aquí define subredes, tablas de enrutamiento y firewalls igual que se haría en un centro de datos físico.
Route 53#
Es el servicio DNS de AWS. Sirve para registrar dominios y enrutar el tráfico de internet hacia ellos.

