Volver al blog

Cómo compartir archivos de S3 sin hacerlos públicos

Uno de los escenarios mas habituales cuando trabajas con AWS S3 es necesitar compartir un archivo con alguien que no tiene acceso a tu cuenta de AWS. Un cliente que necesita descargar un entregable, un compañero de equipo que necesita un asset, un colaborador externo que tiene que revisar un documento. La tentación de hacer el bucket público para que “funcione rápido” es grande, pero las consecuencias pueden ser serias: facturas inesperadas por descargas no controladas, exposición de datos sensibles o incluso brechas de seguridad.

En esta guía te explico las formas correctas de compartir archivos de S3 sin abrir tu bucket al mundo, desde la línea de comandos hasta herramientas que lo hacen por ti.

El problema: buckets públicos

Cuando haces un bucket o un objeto público en S3, cualquier persona con la URL puede acceder a ese contenido. No hay autenticación, no hay límite de descargas, no hay control. Esto puede parecer inofensivo si solo quieres compartir una imagen, pero los riesgos son reales:

  • Facturas sorpresa. Si alguien descubre la URL y la comparte, podrías acabar pagando gigabytes de egress que no esperabas. Los bots y crawlers también generan tráfico.
  • Exposición de datos. Un bucket público mal configurado puede exponer archivos que no deberían ser accesibles: documentos internos, backups, datos de usuarios.
  • Cumplimiento normativo. Si trabajas con datos personales (RGPD, HIPAA, etc.), tener un bucket público puede suponer una infracción directa.

AWS lo sabe, y por eso desde 2023 todos los buckets nuevos se crean con acceso público bloqueado por defecto. Pero sigue habiendo muchas formas de saltarse esa protección, intencionadamente o no.

La regla de oro es simple: nunca hagas público un bucket si puedes evitarlo. Y casi siempre puedes evitarlo.

Opción 1: URLs prefirmadas con la CLI de AWS

Las URLs prefirmadas (presigned URLs) son la forma nativa y mas elegante de compartir archivos de S3 sin cambiar los permisos del bucket. Funcionan así: generas una URL temporal que incluye una firma criptográfica. Quien tenga esa URL puede descargar el archivo durante un periodo de tiempo limitado. Pasado ese tiempo, la URL deja de funcionar.

Para generar una URL prefirmada con la CLI de AWS:

aws s3 presign s3://mi-bucket/ruta/al/archivo.pdf --expires-in 3600

El parametro --expires-in define la duración en segundos. En este ejemplo, la URL será válida durante una hora (3600 segundos). El máximo es de 7 días (604800 segundos) cuando usas credenciales IAM normales, o 12 horas con credenciales de sesión temporal (STS).

Ventajas:

  • El bucket permanece privado. No cambias ningún permiso.
  • La URL caduca automáticamente.
  • Funciona con AWS S3, Cloudflare R2, DigitalOcean Spaces y Wasabi.

Limitaciones:

  • Necesitas tener la CLI configurada y saber el path exacto del archivo.
  • No puedes proteger la URL con contraseña ni limitar el número de descargas.
  • Si compartes la URL, cualquiera que la tenga puede descargar el archivo hasta que expire.
  • Para compartir múltiples archivos necesitas generar una URL para cada uno.

Las URLs prefirmadas son la base sobre la que se construyen soluciones mas completas, como veremos mas adelante.

Opción 2: Políticas de bucket con condiciones

Si necesitas un acceso mas estructurado y permanente (por ejemplo, permitir que una aplicación externa acceda a ciertos archivos), puedes usar políticas de bucket con condiciones.

Una política de bucket es un documento JSON que define quién puede hacer qué con los objetos del bucket. Lo interesante es que puedes añadir condiciones para restringir el acceso:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowSpecificReferer",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::mi-bucket/publico/*",
      "Condition": {
        "StringLike": {
          "aws:Referer": "https://mi-web.com/*"
        }
      }
    }
  ]
}

Este ejemplo permite leer objetos de la carpeta publico/ solo si la petición viene con un header Referer que coincida con tu dominio. No es un mecanismo de seguridad robusto (el Referer se puede falsificar), pero añade una capa de protección útil contra el acceso casual.

Ventajas:

  • Control granular sobre quién puede acceder a qué.
  • No necesitas generar URLs para cada archivo.
  • Puedes combinar múltiples condiciones (IP, VPC, hora del día, etc.).

Limitaciones:

  • Requiere conocimientos de políticas IAM y JSON.
  • Es fácil cometer errores que dejen el bucket mas abierto de lo previsto.
  • No sirve para compartir archivos puntuales con personas concretas.

Opción 3: CloudFront con acceso restringido (OAC)

Si necesitas servir contenido de S3 a muchos usuarios de forma rápida y segura, la combinación de CloudFront con Origin Access Control (OAC) es la solución recomendada por AWS.

El flujo es el siguiente:

  1. Tu bucket de S3 permanece completamente privado.
  2. Creas una distribución de CloudFront que apunta al bucket.
  3. Configuras un OAC para que solo CloudFront pueda leer los objetos.
  4. Los usuarios acceden al contenido a través de la URL de CloudFront, nunca directamente a S3.

Opcionalmente puedes añadir:

  • Signed URLs o signed cookies para restringir el acceso a usuarios autenticados.
  • WAF (Web Application Firewall) para filtrar tráfico malicioso.
  • Restricciones geográficas para limitar el acceso por país.

Ventajas:

  • El contenido se sirve desde los edge locations de CloudFront, con baja latencia global.
  • El bucket nunca se expone directamente a internet.
  • Puedes combinar con signed URLs y WAF para control total.

Limitaciones:

  • Configuración compleja que requiere conocimientos de CloudFront, IAM y OAC.
  • Añade costes adicionales (CloudFront cobra por peticiones y transferencia).
  • Es excesivo si solo necesitas compartir archivos puntuales con un puñado de personas.
  • Solo funciona con AWS. No es una opción para R2, Spaces ni Wasabi.

Opción 4: Nubbo, la forma sencilla

Si lo que necesitas es compartir archivos de forma segura sin lidiar con la CLI, políticas de bucket ni infraestructura adicional, Nubbo lo resuelve con unos pocos clics.

Nubbo se conecta a tu bucket de AWS S3 (y también a Cloudflare R2, DigitalOcean Spaces y Wasabi) y te permite compartir archivos de forma segura sin modificar los permisos de tu almacenamiento. Así funciona:

  1. Navega hasta el archivo que quieres compartir usando el explorador de archivos.
  2. Haz clic derecho y selecciona Compartir.
  3. Configura las opciones de protección: contraseña, fecha de expiración y límite de descargas.
  4. Copia el enlace y envíalo a quien necesites.

Cuando el destinatario abre el enlace, Nubbo genera una URL prefirmada temporal que apunta directamente a tu proveedor cloud. La descarga ocurre entre el navegador del destinatario y tu bucket. Los archivos nunca pasan por los servidores de Nubbo.

También puedes compartir carpetas enteras. El destinatario ve un explorador de solo lectura donde puede navegar subcarpetas y descargar archivos individuales.

¿Qué ventajas tiene frente a las opciones anteriores?

  • No necesitas la CLI ni conocimientos técnicos.
  • Protección con contraseña, algo que las URLs prefirmadas de S3 no ofrecen de forma nativa.
  • Límite de descargas para controlar exactamente cuántas veces se puede acceder al archivo.
  • Fecha de expiración configurable.
  • Panel de seguimiento donde puedes ver descargas, visualizaciones y revocar el acceso en cualquier momento.
  • Multi-proveedor: funciona igual con S3, R2, Spaces y Wasabi.

Ademas de la compartición de archivos, Nubbo ofrece funcionalidades adicionales que complementan tu flujo de trabajo:

  • Galerías de fotos y vídeos para compartir colecciones visuales con marca personalizada y marca de agua.
  • Solicitudes de archivos para recibir entregas de terceros directamente en tu bucket.
  • Seguridad reforzada con cifrado AES-256-GCM para credenciales y autenticación de dos factores (2FA).
  • Etiquetas, papelera de reciclaje, reproductor multimedia y atajos de teclado.

Tabla resumen de opciones

MétodoDificultadContraseñaExpiraciónLímite descargasMulti-proveedor
URL prefirmada (CLI)MediaNoSiNoSi*
Política de bucketAltaNoNoNoNo
CloudFront + OACAltaNo (sin signed URLs)Con signed URLsNoNo
NubboBajaSiSiSiSi

*Depende del proveedor y su CLI.

¿Cual es la mejor opción?

Como en casi todo, depende de tu situación:

  • Si eres desarrollador y necesitas generar una URL rápida para un archivo puntual, la CLI con presign es lo mas directo.
  • Si necesitas un acceso estructurado y permanente para una aplicación, las políticas de bucket te dan el control necesario.
  • Si sirves contenido a gran escala y necesitas CDN con seguridad, CloudFront + OAC es el camino.
  • Si quieres compartir archivos de forma segura con clientes o colaboradores sin complicaciones técnicas, Nubbo lo hace sencillo y funciona con AWS S3, Cloudflare R2, DigitalOcean Spaces y Wasabi.

Lo importante es que, sea cual sea el método que elijas, mantengas tus buckets privados. Los atajos de hoy pueden convertirse en los problemas de mañana.


¿Quieres compartir tus archivos de S3 sin hacerlos públicos? Crea tu cuenta gratis y empieza a compartir con enlaces seguros en minutos.