30 de septiembre de 2026 · 5 min de lectura

Cómo compartir archivos privados de S3 y R2 con URL prefirmadas

No todos los archivos deberían estar en un bucket público. Contratos, facturas o builds sin publicar pueden seguir siendo privados y aun así compartirse, con un enlace que solo funciona durante un tiempo limitado.

Cómo funcionan las URL prefirmadas

La URL contiene todo lo que S3 necesita para verificar la petición: la clave con la que se firmó, cuándo se firmó, cuánto tiempo es válida y una firma. Tiene este aspecto:

https://your-bucket.s3.eu-central-1.amazonaws.com/contract.pdf
  ?X-Amz-Algorithm=AWS4-HMAC-SHA256
  &X-Amz-Credential=AKIA…/20260930/eu-central-1/s3/aws4_request
  &X-Amz-Date=20260930T120000Z
  &X-Amz-Expires=3600
  &X-Amz-SignedHeaders=host
  &X-Amz-Signature=…

La firma se genera en tu ordenador. No se envía nada al proveedor hasta que alguien abre el enlace, y cambiar cualquier parte de él invalida la firma.

Crea una con la AWS CLI

aws s3 presign s3://your-bucket/contract.pdf --expires-in 86400

Ese enlace funciona durante 24 horas. Para Cloudflare R2 u otro servicio compatible con S3, apunta la CLI a su endpoint:

aws s3 presign s3://your-bucket/contract.pdf --expires-in 86400 \
  --endpoint-url https://<ACCOUNT_ID>.r2.cloudflarestorage.com

Límites que conviene conocer

  • 7 días como máximo. Signature Version 4 permite hasta 604.800 segundos, tanto en S3 como en R2.
  • Las credenciales temporales caducan antes. Una URL firmada con una sesión de STS o SSO deja de funcionar cuando caduca esa sesión, aunque pidieras más tiempo.
  • R2 necesita el dominio de la API. Las URL prefirmadas de R2 funcionan con <ACCOUNT_ID>.r2.cloudflarestorage.com, no con un dominio personalizado.
  • Cualquiera con el enlace puede usarlo. Trátalo como una contraseña hasta que caduque.
  • No se puede revocar un enlace concreto. Para cortar un enlace antes de tiempo, elimina o renombra el objeto, o desactiva la clave de acceso que lo firmó.

¿URL prefirmada o bucket público?

Usa un bucket público para los archivos que están hechos para verse y que deben seguir funcionando: capturas en la documentación, imágenes en un README. Usa URL prefirmadas para todo lo sensible o de corta duración. Mucha gente tiene un bucket de cada tipo y elige según el archivo.

Preguntas frecuentes

¿Una URL prefirmada puede durar más de 7 días?

No con Signature Version 4, que es la que usan S3 y R2. Para un acceso más largo, haz público el archivo o genera un enlace nuevo cuando caduque el anterior.

¿Por qué mi URL prefirmada devuelve SignatureDoesNotMatch?

Normalmente porque la URL se modificó después de firmarla, por ejemplo por un cliente de correo o al cambiar el host por un dominio personalizado. La región y el endpoint también tienen que coincidir con los del bucket.

¿Las URL prefirmadas funcionan con Backblaze B2 y MinIO?

Sí. Ambos admiten URL prefirmadas con Signature Version 4 a través de sus API compatibles con S3.