Cada exportación de PDF pasa por nginx → aplicación → S3 → aplicación → cliente. La factura de cálculo aumenta y los tiempos de espera se multiplican. Generas una URL prefirmada de 15 minutos: el cliente la extrae directamente del depósito. La CPU cae, pero la URL fluye en Slack.
Prefirmado = capacidad temporal firmada HMAC. Potente, sensible.
Cuándo usar
Descargas/cargas grandes, aplicaciones móviles, socios temporales. Evite el proxy de transmisión casero.
No para sesiones de autenticación largas: utilice el rol de IAM en la aplicación.
Generación segura
Backend con credenciales mínimas s3:GetObject en el prefijo usuario/{id}/. Nunca rootear claves. Exhalación corta.
Opción: condición Nombre de archivo de disposición de contenido, encabezados SSE-KMS.
Carga directa del navegador
Flujo: el backend crea un PUT prefirmado → carga del cliente → el backend valida la etiqueta/tamaño → mueve la etiqueta “limpiar”.
Límite de tamaño mediante la condición de política "rango de longitud del contenido".
Riesgos
| Riesgo | Mitigación |
|---|---|
| URL compartida | TTL corto, metadatos de token de un solo uso |
| Enumeración | Claves UUID, no secuenciales |
| Carga de repetición | suma de comprobación + análisis de virus asíncrono |
| IAM demasiado amplio | prefijo estricto |
Observabilidad
URL de generación de registros (usuario, objeto, vencimiento). Alerta de anomalía en el volumen de descarga. Eventos de datos de CloudTrail S3 si el presupuesto.
Seguridad de URL
TTL empresarial mínimo. Objeto clave UUID. Prefijo IAM de alcance estricto. Generación de registros. Revocación = rotar IAM + invalidar las URL restantes antes de que caduquen de todos modos.
No registre cadenas de consulta con firma simple en registros de acceso público.
Fuga de prueba: compartir la URL caducada debe ser 403.
Patrones de experiencia de usuario
Descargar: GET prefirmado 5–15 min. Subir archivo grande: multiparte prefirmado + cliente de progreso.
No presignar el depósito de lista: alcance de objeto único.
Auditoría: quién generó la URL para qué ID de usuario: rastreo de abuso.
Aplicaciones móviles que incorporan enlaces prefirmados en enlaces profundos: la caducidad debe coincidir con la sesión de UX: riesgo de repetición de enlaces profundos.
Carga multiparte prefirmada: cancelar el ciclo de vida incompleto de la MPU ahorra inodo y costos.
Cumplimiento
Exportación de PII de URL prefirmada: registro de acceso + caducidad breve + auditoría de quién solicitó la exportación del RGPD.
No envíe SMS firmados sin cifrar, ni siquiera TTL cortos, ya que existe riesgo de interceptación.
Capa de aplicación secreta prefirmada de rotación de claves IAM relacionadas con la rotación.
Resumen operativo
Ancho de banda de delegados preestablecidos y acceso temporal: IAM mínimo, TTL corto, claves UUID, generación de auditoría. API CORS separada del depósito CORS.
URL filtrada = datos filtrados hasta el vencimiento: los secretos de rotación son muy serios.
Registro de decisiones de arquitectura
Cuando están prefirmadas frente a una aplicación proxy frente a cookies firmadas por CDN: latencia de compensación de documentos, costo de salida, auditoría, UX móvil. Revisar ADR anualmente o si descarga tráfico x2.
Enlace profundo móvil
TTL prefirmado = copiar UX “el enlace caduca en 15 minutos” – literal.
Revisión de seguridad
Auditoría trimestral de registros de generación prefirmados: distribución TTL, anomalías máximas de TTL.
Archivo adjunto de disposición de contenido en descarga prefirmada, menos la pestaña abierta del navegador XSS.
Condición del depósito verdadero de IAM SecureTransport: HTTPS solo prefirmado.
Monitoreo operativo
Alcance prefirmado de la revisión trimestral de IAM: permisos de filtración. Registro de auditoría TTL promedio. Firma de manipulación de URL prefirmada de prueba de lápiz: debe fallar al cerrarse. Documente las brechas entre la promesa del proveedor de hosting y la medición de campo en la revisión trimestral.
Continuación trimestral
Alcance prefirmado de la revisión trimestral de IAM: permisos de filtración. Registro de auditoría TTL promedio. Firma de manipulación de URL prefirmada de prueba de lápiz: debe fallar al cerrarse. Documente las brechas entre la promesa del proveedor de hosting y la medición de campo en la revisión trimestral.
Mantenga un runbook fechado, métricas de antes y después, revisión posterior al incidente: la disciplina acumulativa evita el pánico del viernes por la noche.
Mantenga un runbook fechado, métricas de antes y después, revisión posterior al incidente: la disciplina acumulativa evita el pánico del viernes por la noche.
Mantenga un runbook fechado, métricas de antes y después, revisión posterior al incidente: la disciplina acumulativa evita el pánico del viernes por la noche.
Mantenga un runbook fechado, métricas de antes y después, revisión posterior al incidente: la disciplina acumulativa evita el pánico del viernes por la noche.
Mantenga un runbook fechado, métricas de antes y después, revisión posterior al incidente: la disciplina acumulativa evita el pánico del viernes por la noche.
Mantenga un runbook fechado, métricas de antes y después, revisión posterior al incidente: la disciplina acumulativa evita el pánico del viernes por la noche.
ADR firmado
vs proxy vs cookies CDN. TTL = copia literal de UX. Revocación de rotación de IAM.
Decide y avanza sin puntos ciegos
- IAM mínimo en el prefijo —
s3:GetObjecto Put limitado auser/{id}/, nunca claves raíz. - TTL empresarial mínimo: minutos a horas; copiar UX “el enlace caduca en 15 minutos” literal.
- Claves de objeto UUID: sin enumeración secuencial; generación de registros sin consulta firmada en texto plano.
- PUT de carga de flujo: etag/tamaño de backend válido, escaneo asíncrono, limpieza de etiquetas.
- ADR anual: cookies prefirmadas, de aplicación proxy o firmadas por CDN según la salida y la auditoría.
Almacenamiento y salida de objetos: comparador, directorio, guías.
Preguntas frecuentes
¿GET frente a PUT prefirmado?
GET = cliente de descarga temporal. PUT = carga directa del navegador/aplicación al depósito sin pasar por su servidor.
¿Duración máxima recomendada?
Minutos a horas para el usuario de descarga. Subida multiparte: duración que cubre la sesión + margen, nunca días sin rotación.
Fuga de URL = ¿fuga de datos?
Sí hasta el vencimiento. Limite el alcance del objeto, el tipo de contenido, la suma de comprobación y revoque mediante la rotación de claves de IAM si hay una fuga grave.
¿Alternativa CDN?
Cookies de CloudFront firmadas para contenido público almacenable en caché; S3 prefirmado para acceso privado único.
Reduzca el TTL antes de optimizar el tamaño del fragmento: la fuga cuesta más que la latencia.
