Descripción general de las URL firmadas y las cookies firmadas

Las URL y cookies firmadas de Cloud CDN te permiten entregar respuestas desde las cachés de Google Cloud distribuidas en todo el mundo, incluso cuando necesitas que las solicitudes estén autorizadas.

Las URL y cookies firmadas de Cloud CDN logran objetivos similares: ambas controlan el acceso al contenido almacenado en caché. Si deseas entregar contenido desde las cachés de Google Cloud distribuidas en todo el mundo y tienes que decidir entre las URL firmadas o las cookies firmadas, considera la siguiente comparación de casos prácticos.

URL firmadas

Una URL firmada es una URL que proporciona permisos y tiempo limitados para realizar una solicitud.

Casos prácticos

En algunas situaciones, es posible que no desees solicitarles a tus usuarios una Cuenta de Google para acceder a contenido de Cloud CDN, pero que sí desees controlar el acceso mediante la lógica específica de tu aplicación.

La forma típica de abordar este caso práctico es proporcionar una URL firmada a un usuario, que le otorga acceso de lectura a ese recurso por un tiempo limitado. Debes especificar una hora de vencimiento cuando creas la URL firmada. Cualquier usuario que conozca la URL puede acceder al recurso hasta que se alcance la fecha de vencimiento de la URL o se cambie la clave usada para firmar la URL.

Usa las URL firmadas en los siguientes casos:

  • Debes restringir el acceso a archivos individuales, como a una descarga de instalación.

  • Tus usuarios usan aplicaciones cliente que no admiten cookies.

Cómo funcionan las URL firmadas

Las URL firmadas brindan a un cliente acceso temporal a un recurso privado sin necesitar autorización adicional. Para lograr esto, se genera un hash de los elementos seleccionados en una solicitud y tales elementos se firman de forma criptográfica mediante el uso de la clave altamente aleatoria que generas.

Cuando una solicitud entrega la URL firmada que proporcionaste, la solicitud se considera autorizada para recibir el contenido solicitado. Cuando Cloud CDN recibe una solicitud con una firma incorrecta para un servicio habilitado, la solicitud se rechaza y nunca va al backend a fin de que se controle.

Por lo general, cualquier persona que tenga una URL firmada puede usarla. Sin embargo, una URL firmada generalmente está diseñada para que la utilice el cliente al que se le dio la URL. Para mitigar el riesgo de que otro cliente utilice la URL, las URL firmadas caducan en el momento que elijas. Para minimizar el riesgo de que una URL firmada se comparta, configúrala para que caduque lo antes posible.

Cómo se firman las URL

Antes de que puedas firmar las URL, crea una o más claves criptográficas en un servicio de backend, bucket de backend, o ambos. Luego, generas un hash de forma criptográfica para una URL y la firmas mediante Google Cloud CLI o tu propio código.

Administra las URL firmadas

Cuando el control de URL firmadas está habilitado en un backend, Cloud CDN otorga un control especial a las solicitudes con URL firmadas. En particular, las solicitudes con un parámetro de búsqueda Signature se consideran firmadas. Cuando se recibe una solicitud de este tipo, Cloud CDN verifica lo siguiente:

  1. Que el método HTTP sea GET, HEAD, OPTIONS o TRACE.
  2. Que el parámetro Expires se establezca en una hora futura.
  3. Que la firma de la solicitud coincida con la firma procesada mediante el uso de la clave con nombre.

Si alguna de estas verificaciones falla, se entrega una respuesta 403 Forbidden. De lo contrario, la solicitud se dirige al backend o se entrega desde la memoria caché. (Las solicitudes OPTIONS y TRACE siempre se envían mediante proxy al backend directamente y no se entregan desde la caché). Todas las solicitudes firmadas válidas para una URL base particular (la parte anterior al parámetro Expires) comparten la misma entrada de caché. Las respuestas a las solicitudes firmadas y sin firmar no comparten entradas de caché. Las respuestas se almacenan en caché y se entregan hasta el plazo de vencimiento que estableciste.

El contenido que requiere solicitudes firmadas a menudo se marca como no almacenable en caché mediante el encabezado Cache-Control. Para que estos objetos sean compatibles con Cloud CDN sin requerir cambios de backend, Cloud CDN anula el encabezado Cache-Control cuando responde a solicitudes que tienen URL firmadas válidas. Cloud CDN trata el contenido como almacenable en caché y usa el parámetro max-age establecido en la configuración de Cloud CDN. La respuesta entregada seguirá teniendo los encabezados Cache-Control que generó el backend.

La URL que se muestra desde Google Cloud CLI o que genera el código personalizado puede distribuirse según tus necesidades. Recomendamos firmar solo las URL de HTTPS, ya que HTTPS proporciona un transporte seguro que evita que se intercepte el componente de firma de la URL firmada. Del mismo modo, puedes distribuir las URL firmadas a través de protocolos de transporte seguros como, por ejemplo, TLS/HTTPS.

Cookies firmadas

Una cookie firmada es una cookie que proporciona permisos y tiempo limitados para realizar solicitudes de un conjunto de archivos.

Casos de uso

Usa cookies firmadas en los siguientes casos:

  • Debes proporcionar acceso a varios archivos restringidos.

  • Deseas evitar cambiar las URL actuales.

  • Deseas evitar actualizar las URL cada vez que actualizas la autorización para acceder al contenido.

Transmisión de contenido multimedia mediante HLS y DASH

Si entregas contenido de video y audio mediante los protocolos de HTTP Live Streaming (HLS) o Dynamic Adaptive Streaming over HTTP (DASH), por lo general, debes generar un manifiesto que contiene una lista de URL para segmentos de video y audio. Es posible que tengas varias instancias de cada segmento para proporcionar diferentes codificaciones (códec, tasa de bits, resolución) a un cliente.

Aunque puedes usar las URL firmadas de Cloud CDN para firmar y autorizar el acceso a cada una de estas URL, generar de forma dinámica todas las combinaciones posibles por cada uno de los usuarios es una tarea pesada y aumenta la carga de origen y la complejidad de la aplicación.

Las cookies firmadas están diseñadas para abordar este problema. Puedes proporcionarle al usuario una cookie firmada que lo autorice a acceder a cualquier contenido que coincida con una política (prefijo de URL y fecha de vencimiento) sin tener que generar o firmar tu manifiesto de medios de forma individual. Puedes actualizar el acceso de los usuarios de forma periódica a través de la API de fetch() de JavaScript en la navegación de páginas o en otros mecanismos de segundo plano en aplicaciones nativas. La posibilidad de actualizar el acceso de los usuarios también te permite usar horas de vencimiento reducidas, lo que dificulta que los usuarios compartan contenido protegido.

Puedes emitir estas cookies a usuarios con varios clientes de navegador y otros clientes que “hablan” en HTTP, como ExoPlayer de Google y AVPlayer de iOS.

Descargas binarias (videojuegos)

Al igual que con la transmisión de contenido multimedia, si proporcionas descargas de clientes de videojuegos, puedes dividir los parches de varios gigabytes o los datos de videojuegos en fragmentos más pequeños para admitir el almacenamiento en caché, la invalidación y la simultaneidad más específicos.

Por lo general, estos fragmentos se enumeran en un manifiesto. Las cookies firmadas te permiten autorizar el acceso a esas descargas solo para los usuarios autenticados sin necesidad de modificar el manifiesto y (como con las URL firmadas) sin renunciar a los beneficios del almacenamiento en caché de Cloud CDN.

Cómo funcionan las cookies firmadas

La configuración y emisión de cookies firmadas requiere tres pasos:

  • Crear una clave de firma para un servicio de backend determinado
  • Crear un valor de cookie con el prefijo de URL permitido, el vencimiento, el nombre de la clave y la firma criptográfica
  • Emitir la cookie en el código de la aplicación

Cloud CDN valida estas cookies firmadas cuando se incluyen en las solicitudes.

Puedes evitar que los usuarios eludan los controles de cookies firmadas cuando usas un bucket de Cloud Storage. Para hacerlo, debes quitar la función allUsers y otorgar acceso de lectura de la cuenta de servicio de Cloud CDN al bucket a fin de restringir el acceso al bucket subyacente.

De manera similar, tus instancias de máquina virtual (VM) deben validar las firmas en cada solicitud firmada que entregan.

Advertencias y limitaciones

  • Eres el único responsable del consentimiento y el cumplimiento de la privacidad que se necesitan para las cookies firmadas. Tú eres el que administra y emite las cookies firmadas, no Google.

  • Si usas URL y cookies firmadas a fin de controlar el acceso a los mismos archivos, y un usuario usa una URL firmada para solicitar un archivo, Cloud CDN determina si debe mostrar el archivo al usuario solo en función de la URL firmada. Cloud CDN solo considera las cookies firmadas si la URL no está firmada.

  • Si configuraste tu servicio para solicitudes firmadas y la URL incluye Signature como parámetro de búsqueda, Cloud CDN intenta interpretar la URL como una URL firmada. Si Cloud CDN intenta tratar la URL como una URL firmada y esa no es tu intención, es probable que la URL no sea válida, por lo que Cloud CDN la rechaza.

  • Por lo general, los navegadores y otros clientes aplican límites al tamaño de las cookies (4 KB por cookie) y un recuento total de 50 por dominio, según RFC 6265. Ten en cuenta la carga útil total de cookies que se envía desde el dominio.

  • Se aplican los límites y las restricciones de Cloud CDN, incluido un máximo de tres claves de solicitudes firmadas por backend.

  • Las solicitudes firmadas no se cobran de manera diferente que las solicitudes de Cloud CDN existentes. Sin embargo, las solicitudes con errores (rechazadas), como las que tienen firmas vencidas o no válidas, siguen generando cargos de búsqueda en caché.

¿Qué sigue?

  • Para determinar el acceso de los usuarios a URL específicas, consulta Usa URL firmadas.
  • Para determinar el acceso de los usuarios a un prefijo de URL específico, consulta Usa cookies firmadas.