Qué es S3 y por qué se convirtió en un estándar
Equipo OtterStorage · 6 min de lectura ·
S3 nació como un servicio de Amazon en 2006 y, casi sin que nadie lo decidiera, terminó convirtiéndose en el idioma común del almacenamiento en la nube. Hoy, cuando una herramienta dice que es compatible con S3, sabes que tu copia de seguridad o tu pipeline de datos van a funcionar sin reescribir una línea. En esta guía desmontamos el protocolo pieza a pieza: el modelo de buckets y objetos, las operaciones de su API, las funciones avanzadas, qué significa esa "compatibilidad" y cuándo S3 no es la herramienta adecuada.
Qué es S3, en realidad
S3 son las siglas de Simple Storage Service. En origen es un producto de Amazon Web Services, pero lo que de verdad importa hoy no es el servicio sino su API: el conjunto de operaciones HTTP que un cliente usa para guardar y recuperar datos. Esa API se publicó, se documentó y se mantuvo estable durante años, y el ecosistema construyó tantas herramientas encima que dejó de ser propiedad de un proveedor para convertirse en un estándar de facto.
La idea central es radicalmente simple: subes un objeto (un fichero más sus metadatos) a un bucket (un contenedor con nombre) mediante una petición HTTP, y lo recuperas con otra. No hay un protocolo binario propietario, no hay que montar un volumen ni hablar con un kernel: todo viaja sobre HTTP/HTTPS, autenticado con un par de access keys y una firma. Esa sencillez es la razón de que prácticamente cualquier lenguaje de programación tenga un SDK para hablar S3.
Por qué se convirtió en el estándar de facto
Muchos formatos técnicos buenos han desaparecido. S3 no fue por casualidad. Tres factores se reforzaron entre sí:
- Ubicuidad de SDKs y herramientas: existe cliente S3 para Python, Go, Java, PHP, Rust, JavaScript y casi cualquier otro lenguaje, además de utilidades de línea de comandos universales como AWS CLI, MinIO Client (mc) o rclone.
- Estabilidad de la interfaz: las operaciones fundamentales apenas han cambiado en años. Un script escrito hace una década sigue funcionando, y eso genera confianza para construir encima.
- Portabilidad real: al ser un estándar abierto en la práctica, varios proveedores implementan la misma API. Cambiar de uno a otro suele reducirse a apuntar a otro endpoint, lo que mina el clásico lock-in.
El resultado es un efecto de red: cuanta más gente habla S3, más herramientas lo soportan, y más gente lo adopta. Ese círculo ha convertido al almacenamiento de objetos compatible con S3 en el formato por defecto de backups, data lakes y archivos en la nube.
El modelo: bucket, objeto y clave
Para entender S3 hay que olvidar momentáneamente el sistema de ficheros. Aquí no hay carpetas reales, ni inodos, ni rutas que el sistema operativo resuelva paso a paso. Hay tres conceptos:
- Bucket: el contenedor de nivel superior. Tiene un nombre, vive en una región (en OtterStorage, EU-MAD, EU-FRA o US-EAST) y es la unidad sobre la que se aplican permisos, versionado o reglas de retención.
- Objeto: el dato en sí, junto a sus metadatos (tipo de contenido, fecha, etiquetas, cabeceras personalizadas) y un identificador de integridad (ETag).
- Clave (key): el nombre completo del objeto dentro del bucket, por ejemplo
facturas/2026/06/F-1042.pdf. Parece una ruta de carpetas, pero es una cadena plana: el espacio de nombres es totalmente plano y las "barras" son solo una convención que las herramientas usan para simular jerarquía.
Esa diferencia es la que permite escalar sin límites prácticos. Como no hay un árbol de directorios que mantener bloqueado y consistente, el sistema reparte miles de millones de objetos entre muchas máquinas. Los objetos se tratan como unidades inmutables: no se edita un objeto "en su sitio", se sube una versión nueva. Y la durabilidad no depende de un disco concreto, sino de Erasure Coding, que trocea cada objeto en fragmentos con redundancia repartidos entre varios discos y nodos.
S3 frente al sistema de ficheros tradicional
La tabla resume las diferencias que más confunden a quien viene de un NAS o un disco local:
| Aspecto | Almacenamiento de objetos (S3) | Sistema de ficheros tradicional |
|---|---|---|
| Estructura | Espacio de nombres plano: bucket + clave | Árbol jerárquico de carpetas y subcarpetas |
| Acceso | API HTTP (GET/PUT/DELETE) con firma | Llamadas al sistema (open, read, write) o protocolos como NFS/SMB |
| Modificación | El objeto se reemplaza entero; el versionado guarda el histórico | Edición parcial in situ, byte a byte |
| Metadatos | Ricos y personalizables por objeto (etiquetas, cabeceras) | Limitados (permisos, fechas, atributos básicos) |
| Escalado | Horizontal, prácticamente ilimitado | Atado al tamaño del volumen o del array |
| Caso ideal | Backups, archivos, media, data lakes, objetos grandes | Bases de datos, ficheros que cambian poco a poco, baja latencia local |
La API: operaciones que usarás a diario
La belleza de S3 está en que su superficie básica cabe en una mano. Estos son los verbos que cubren el 90 % del trabajo, ilustrados con AWS CLI contra el endpoint de OtterStorage.
Crear, copiar, listar y borrar
Crear un bucket (mb, make bucket), subir y bajar objetos (cp), listar (ls) y borrar (rm) son las cuatro operaciones que aprenderás primero:
aws s3 mb s3://copias-prod --endpoint-url https://s3.otterstorage.io
aws s3 cp informe.pdf s3://copias-prod/facturas/2026/06/
aws s3 ls s3://copias-prod/facturas/2026/06/
aws s3 rm s3://copias-prod/facturas/2026/06/borrador.pdf
Si vienes de un disco, fíjate en un detalle clave: en OtterStorage no se cobra por peticiones (PUT, GET, LIST) ni por borrados (DELETE). Listar un bucket millones de veces o limpiar objetos no genera una factura sorpresa, algo nada habitual en la nube clásica. Tienes el paso a paso en la guía de AWS CLI y en la de crear tu primer bucket.
Junto a esas cuatro, conviene conocer dos operaciones que aparecen en cuanto el uso se vuelve serio: la carga multiparte y las URLs prefirmadas.
Multipart: subir objetos grandes sin sufrir
Un objeto puede pesar gigabytes y subirlo en una sola petición sería frágil: si la conexión falla al 90 %, empiezas de cero. Para eso existe la carga multiparte (multipart upload): el cliente trocea el fichero, sube cada parte por separado (incluso en paralelo) y una operación de complete ensambla el objeto al final. Si una parte falla, se reintenta solo esa. Las herramientas modernas activan multipart automáticamente a partir de cierto tamaño: subes una imagen de máquina virtual de 200 GB con un simple cp y el cliente hace el troceo por debajo.
URLs prefirmadas: compartir sin abrir el bucket
Las presigned URLs (URLs prefirmadas) son una de las funciones más útiles y menos conocidas. Generas un enlace temporal, firmado con tus credenciales, que concede acceso a un objeto concreto durante un tiempo limitado, sin exponer tus access keys ni hacer público el bucket:
aws s3 presign s3://copias-prod/facturas/2026/06/F-1042.pdf \
--endpoint-url https://s3.otterstorage.io \
--expires-in 3600
El resultado es una URL que cualquiera puede abrir en el navegador durante una hora. Pasado ese plazo, deja de funcionar. Es la forma estándar de servir descargas privadas, recibir subidas de terceros o integrar S3 con una aplicación web sin convertir nada en público.
Funciones avanzadas: lo que separa un juguete de producción
Sobre esas operaciones básicas, S3 define un conjunto de funciones que son las que de verdad lo hacen apto para datos serios. OtterStorage las implementa todas.
Versionado
Con el versionado activado, sobrescribir o borrar un objeto no destruye el contenido anterior: cada cambio crea una versión nueva y la antigua queda recuperable. Es la red de seguridad frente a errores humanos, scripts mal lanzados y ransomware que cifra ficheros: siempre puedes volver a la versión buena.
Reglas de ciclo de vida (lifecycle)
Las reglas de lifecycle automatizan qué pasa con los objetos según su antigüedad: caducar versiones viejas, eliminar borradores tras X días o limpiar cargas multiparte incompletas. Defines la política una vez y el sistema la aplica sin intervención.
Object Lock y Legal Hold: inmutabilidad WORM
El Object Lock implementa WORM (write once, read many): un objeto se puede leer pero no modificar ni borrar hasta que vence su retención. Tiene dos modos: Governance, que permite a usuarios con permisos especiales saltarse el bloqueo, y Compliance, donde nadie —ni el administrador— puede borrar el objeto antes de tiempo. El Legal Hold por bucket congela objetos de forma indefinida hasta que se retira la retención de forma explícita. Es la base de cualquier backup inmutable a prueba de ransomware, y exactamente lo que cubre OtterVault.
Políticas y aislamiento de credenciales
El acceso se gobierna con políticas en formato JSON, que conceden o deniegan acciones sobre recursos concretos. Este ejemplo da solo lectura sobre un prefijo del bucket:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "SoloLecturaFacturas",
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:ListBucket"],
"Resource": [
"arn:aws:s3:::copias-prod",
"arn:aws:s3:::copias-prod/facturas/*"
]
}
]
}
Además, OtterStorage permite access keys aisladas por bucket: una credencial que solo ve su bucket y nada más. Si una clave se filtra, el alcance del daño queda contenido. Lo desarrollamos en la guía de seguridad.
Qué significa "compatible con S3" y cómo evita el lock-in
Aquí está el corazón del asunto. Que un almacenamiento sea compatible con S3 significa que implementa la misma API: las mismas operaciones, el mismo esquema de firma, los mismos formatos de respuesta. Por eso tus herramientas existentes —AWS CLI, rclone, Restic, Velero, Terraform con el provider de AWS o MinIO Client— no necesitan saber que detrás no hay AWS. Lo único que cambia es el endpoint.
Migrar de un proveedor compatible a otro suele reducirse a tres cosas: cambiar la URL del endpoint, poner las nuevas access keys y copiar los datos. Con un cliente como rclone, la sincronización es un comando:
rclone sync aws-origen:mi-bucket otter-destino:mi-bucket \
--transfers 16 --checksum
Esa portabilidad es la que rompe el lock-in: ya no eliges proveedor "para siempre", lo eliges por precio, rendimiento o soberanía de datos (mantener la información en la UE, por ejemplo). Para mover el grueso de los datos sin parar el servicio existe la migración asistida de OtterBridge, y para mantener copias sincronizadas entre regiones, la replicación de OtterSync. Tienes el detalle en cómo migrar desde AWS S3.
Cuándo S3 NO es la herramienta adecuada
Ser honestos también es parte del trabajo: S3 es excelente, pero no para todo. Conviene no usar almacenamiento de objetos cuando:
- Necesitas modificar trozos de un fichero constantemente. Los objetos se reemplazan enteros; para datos que cambian byte a byte —el fichero de una base de datos en activo— quieres almacenamiento de bloque.
- Buscas latencia de microsegundos para lecturas y escrituras minúsculas. S3 es excepcional en throughput y en objetos medianos o grandes, pero cada operación es una petición HTTP; no sustituye a un disco local NVMe.
- Tu aplicación espera semántica POSIX completa (bloqueos de fichero, renombrados atómicos, permisos de usuario y grupo). Puedes montar S3 como sistema de ficheros, pero es una emulación con límites, no POSIX de verdad.
- Manejas millones de objetos diminutos a los que accedes sin parar. Funciona, pero la sobrecarga por petición y los listados pueden hacerlo menos eficiente que una solución pensada para ese patrón.
La regla práctica: si tus datos son ficheros completos que escribes una vez y lees muchas (backups, imágenes, vídeos, logs archivados, data lakes), S3 es probablemente la mejor opción. Si son datos vivos que se editan a nivel de bloque y necesitan latencia mínima, mira hacia el almacenamiento de bloque. Lo desarrollamos en object storage vs block storage.
Preguntas frecuentes
¿S3 es lo mismo que AWS? +
¿Puedo usar mis herramientas actuales con un almacenamiento compatible con S3? +
¿Para qué no debería usar S3? +
¿Quieres verlo funcionando con tus propias herramientas? Explora la documentación o consulta los precios sin coste por peticiones.
— Equipo OtterStorage