Uso de cookies firmadas - Amazon CloudFront

Uso de cookies firmadas

Las cookies firmadas de CloudFront le permiten controlar quién puede acceder al contenido cuando no desea cambiar las URL actuales o cuando desea proporcionar acceso a varios archivos restringidos, por ejemplo, todos los archivos del área de suscriptores de un sitio web. En este tema se explica qué tomar en cuenta al utilizar cookies firmadas y describe cómo configurarlas mediante políticas predefinidas o personalizadas.

Decisión de utilizar políticas predefinidas o personalizadas para cookies firmadas

Al crear una cookie firmada, se escribe una instrucción de política en formato JSON que especifica las restricciones en la cookie firmada, por ejemplo, el tiempo de validez de la cookie. Puede utilizar políticas predefinidas o personalizadas. En la siguiente tabla se comparan las políticas predefinidas y las personalizadas:

Descripción Política predefinida Política personalizada

Puede reutilizar la instrucción de la política con varios archivos. Para reutilizar la instrucción de política, debe utilizar caracteres comodín en el objeto Resource. Para obtener más información, consulte Valores que se especifican en la instrucción de política de una política personalizada para cookies firmadas).

No

Puede especificar la fecha y la hora a la que los usuarios pueden empezar a obtener acceso a su contenido.

No

Sí (opcional)

Puede especificar la fecha y la hora a la que los usuarios dejan de obtener acceso a su contenido.

Puede especificar la dirección IP o a un rango de direcciones IP de los usuarios que pueden obtener acceso a su contenido.

No

Sí (opcional)

Para obtener información acerca de cómo crear cookies firmadas mediante una política predefinida, consulte Establecimiento de cookies firmadas mediante una política predefinida.

Para obtener información acerca de cómo crear cookies firmadas mediante una política personalizada, consulte Establecimiento de cookies firmadas mediante una política personalizada.

Cómo funcionan las cookies firmadas

A continuación, se muestra información general acerca de cómo configurar CloudFront para cookies firmadas y cómo responde CloudFront cuando un usuario envía una solicitud que contiene una cookie firmada.

  1. En la distribución de CloudFront, especifique uno o más grupos de claves de confianza, que contienen las claves públicas que CloudFront puede utilizar para comprobar la firma de URL. Se utilizan las claves privadas correspondientes para firmar las URL.

    Para obtener más información, consulte Especificación de los signatarios que pueden crear URL firmadas y cookies firmadas.

  2. Desarrolle una aplicación para determinar si un usuario debe obtener acceso a su contenido y, en caso de que sí, que envíe 3 encabezados Set-Cookie al espectador. (Cada encabezado Set-Cookie puede contener solo un par de nombre-valor y una cookie de CloudFront firmada requiere tres pares de nombre-valor). Debe enviar los encabezados Set-Cookie al espectador antes de que el usuario solicite su contenido privado. Si configura un periodo de vencimiento corto en la cookie, le recomendamos enviar tres encabezados Set-Cookie más en respuesta a solicitudes posteriores, de modo que el usuario continúe teniendo acceso.

    Normalmente, la distribución de CloudFront tendrá al menos dos comportamientos de la caché: uno que no requiere autenticación y otro que sí. La página de error de la parte segura del sitio incluye un redirector o un enlace a una página de inicio de sesión.

    Si configura la distribución para que el almacenamiento de archivos en la caché dependa de las cookies, CloudFront no almacenará archivos independientes en la caché en función de los atributos de las cookies firmadas.

  3. Un usuario inicia sesión en su sitio web y paga por el contenido o cumple algún otro requisito para el acceso.

  4. Su aplicación devuelve los encabezados Set-Cookie en la respuesta, y el espectador almacena los pares nombre-valor.

  5. El usuario solicita un archivo.

    El navegador del usuario o cualquier otro espectador obtiene los pares nombre-valor del paso 4 y los añade a la solicitud en un encabezado Cookie. Esta es la cookie firmada.

  6. CloudFront utiliza la clave pública para validar la firma en la cookie firmada y confirmar que dicha cookie no se ha manipulado. Si la firma no es válida, se rechaza la solicitud.

    Si la firma de la cookie es válida, CloudFront examina la instrucción de la política en la cookie (o crea una si utiliza una política predefinida) para confirmar que la solicitud sigue siendo válida. Por ejemplo, si ha especificado una fecha y hora de inicio y fin de la cookie, CloudFront confirma que el usuario intenta acceder al contenido durante el periodo en el que ha decidido permitir dicho acceso.

    Si la solicitud cumple los requisitos de la instrucción de la política, CloudFront enviará el contenido del mismo modo que envía el contenido no restringido: determina si el archivo ya está en la caché de borde, reenvía la solicitud al origen en caso necesario y devuelve el archivo al usuario.

Si especifica el parámetro Domain en un encabezado Set-Cookie, especifique el valor de la forma más precisa posible para reducir el acceso potencial por parte de alguien con el mismo nombre de dominio raíz. Por ejemplo, app.example.com es mejor que example.com, especialmente si no controla example.com. Esto ayuda a impedir que alguien obtenga acceso a su contenido desde www.example.com.

Para evitar este tipo de ataques, haga lo siguiente:

  • Excluya los atributos de cookies Expires y Max-Age para que el encabezado Set-Cookie cree una cookie de sesión. Las cookies de sesión se eliminan automáticamente cuando el usuario cierra el navegador, lo que reduce la posibilidad de alguien obtenga acceso no autorizado a su contenido.

  • Incluya el atributo Secure para que la cookie se cifre cuando un espectador la incluya en una solicitud.

  • De ser posible, utilice una política personalizada e incluya la dirección IP del espectador.

  • En el atributo CloudFront-Expires, especifique el menor tiempo de vencimiento posible pero razonable en función de por cuánto tiempo desea que los usuarios puedan obtener acceso a su contenido.

Para determinar si una cookie firmada sigue siendo válida, CloudFront comprueba la fecha y hora de vencimiento de la cookie en el momento de la solicitud HTTP. Si un cliente comienza a descargar un archivo grande inmediatamente antes de la fecha de vencimiento, la descarga se realizará por completo incluso si se sobrepasa la hora de vencimiento durante la descarga. Si la conexión TCP se interrumpe y el cliente intenta reiniciar la descarga después de la fecha de vencimiento, la descarga fallará.

Si un cliente utiliza rangos GET para obtener un archivo en partes más pequeñas, cualquier solicitud GET que se produzca después de la fecha de vencimiento no se procesará. Para obtener más información acerca de Range GET, consulte Cómo CloudFront procesa las solicitudes parciales de un objeto (rango GET).

Código de muestra y herramientas de terceros

El código de muestra para contenido privado solo muestra cómo crear firmas para URL firmadas. Sin embargo, el proceso de creación de una firma para una cookie firmada es muy similar, así que gran parte del código de muestra es aplicable. Para obtener más información, consulte los temas siguientes: