Establecimiento de cookies firmadas mediante una política personalizada - Amazon CloudFront

Establecimiento de cookies firmadas mediante una política personalizada

Para establecer una cookie firmada que utiliza una política personalizada, complete los siguientes pasos.

Consulte los siguientes ejemplos de pares de encabezados Set-Cookie.

Si desea utilizar un nombre de dominio alternativo como example.org en las URL, debe agregarlo a la distribución independientemente de que especifique el atributo Domain. Para obtener más información, consulte Nombres de dominio alternativos (CNAME) en el tema Referencia de configuración de la distribución.

ejemplo Ejemplo 1

Puede utilizar los encabezados Set-Cookie de una cookie firmada cuando se utiliza el nombre de dominio asociado a la distribución en las URL de los archivos.

Set-Cookie: CloudFront-Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2QxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0L2dhbWVfZG93bmxvYWQuemlwIiwiQ29uZGl0aW9uIjp7IklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIxOTIuMC4yLjAvMjQifSwiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0MjY1MDAwMDB9fX1dfQ__; Domain=d111111abcdef8.cloudfront.net; Path=/; Secure; HttpOnly Set-Cookie: CloudFront-Signature=dtKhpJ3aUYxqDIwepczPiDb9NXQ_; Domain=d111111abcdef8.cloudfront.net; Path=/; Secure; HttpOnly Set-Cookie: CloudFront-Key-Pair-Id=K2JCJMDEHXQW5F; Domain=d111111abcdef8.cloudfront.net; Path=/; Secure; HttpOnly
ejemplo Ejemplo 2

Puede utilizar los encabezados Set-Cookie de una cookie firmada cuando se utiliza el nombre de dominio alternativo (example.org) en las URL de los archivos.

Set-Cookie: CloudFront-Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2QxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0L2dhbWVfZG93bmxvYWQuemlwIiwiQ29uZGl0aW9uIjp7IklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIxOTIuMC4yLjAvMjQifSwiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0MjY1MDAwMDB9fX1dfQ__; Domain=example.org; Path=/; Secure; HttpOnly Set-Cookie: CloudFront-Signature=dtKhpJ3aUYxqDIwepczPiDb9NXQ_; Domain=example.org; Path=/; Secure; HttpOnly Set-Cookie: CloudFront-Key-Pair-Id=K2JCJMDEHXQW5F; Domain=example.org; Path=/; Secure; HttpOnly
ejemplo Ejemplo 3

Puede utilizar los pares de encabezados Set-Cookie de una solicitud firmada cuando se utiliza el nombre de dominio asociado a la distribución en las URL de los archivos.

Set-Cookie: CloudFront-Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2QxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0L2dhbWVfZG93bmxvYWQuemlwIiwiQ29uZGl0aW9uIjp7IklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIxOTIuMC4yLjAvMjQifSwiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0MjY1MDAwMDB9fX1dfQ__; Domain=d111111abcdef8.cloudfront.net; Path=/; Secure; HttpOnly Set-Cookie: CloudFront-Signature=dtKhpJ3aUYxqDIwepczPiDb9NXQ_; Domain=d111111abcdef8.cloudfront.net; Path=/; Secure; HttpOnly Set-Cookie: CloudFront-Key-Pair-Id=K2JCJMDEHXQW5F; Domain=dd111111abcdef8.cloudfront.net; Path=/; Secure; HttpOnly
ejemplo Ejemplo 4

Puede utilizar los pares de encabezados Set-Cookie de una solicitud firmada cuando se utiliza un nombre de dominio alternativo (example.org) asociado a la distribución en las URL de los archivos.

Set-Cookie: CloudFront-Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2QxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0L2dhbWVfZG93bmxvYWQuemlwIiwiQ29uZGl0aW9uIjp7IklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIxOTIuMC4yLjAvMjQifSwiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0MjY1MDAwMDB9fX1dfQ__; Domain=example.org; Path=/; Secure; HttpOnly Set-Cookie: CloudFront-Signature=dtKhpJ3aUYxqDIwepczPiDb9NXQ_; Domain=example.org; Path=/; Secure; HttpOnly Set-Cookie: CloudFront-Key-Pair-Id=K2JCJMDEHXQW5F; Domain=example.org; Path=/; Secure; HttpOnly

Creación de una instrucción de política para una cookie firmada que utiliza una política personalizada

Para crear una instrucción de política para una política personalizada, complete los siguientes pasos. Para consultar varias instrucciones de políticas de ejemplo que controlan el acceso a archivos de distintas maneras, consulte Ejemplos de instrucciones de políticas para una cookie firmada que utiliza una política personalizada.

Para crear una instrucción de política para una cookie firmada que use una política personalizada
  1. Cree la instrucción de política en el siguiente formato JSON.

    { "Statement": [ { "Resource": "URL of the file", "Condition": { "DateLessThan": { "AWS:EpochTime":required ending date and time in Unix time format and UTC }, "DateGreaterThan": { "AWS:EpochTime":optional beginning date and time in Unix time format and UTC }, "IpAddress": { "AWS:SourceIp": "optional IP address" } } } ] }

    Tenga en cuenta lo siguiente:

  2. Elimine todos los espacios vacíos (incluidos tabuladores y caracteres de línea nueva) de la instrucción de la política. Es posible que tenga que incluir caracteres de escape en la cadena del código de la aplicación.

  3. Codifique la instrucción de política con codificación base64 de MIME. Para obtener más información, consulte la Section 6.8, Base64 Content-Transfer-Encoding de RFC 2045, MIME (Multipurpose Internet Mail Extensions) Part One: Format of Internet Message Bodies.

  4. Sustituya caracteres no válidos en una cadena de consulta de URL por caracteres válidos. En la siguiente tabla se muestran los caracteres válidos y no válidos.

    Sustituya los caracteres no válidos Por estos caracteres válidos

    +

    - (guion)

    =

    _ (guion bajo)

    /

    ~ (tilde)

  5. Incluya el valor resultante en el encabezado Set-Cookie después de CloudFront-Policy=.

  6. Cree una firma para el encabezado Set-Cookie en CloudFront-Signature aplicando una función hash, firmando y codificando con base64 la instrucción de política. Para obtener más información, consulte Creación de una firma para una cookie firmada que utiliza una política personalizada.

Valores que se especifican en la instrucción de política de una política personalizada para cookies firmadas

Al crear una instrucción de política para una política personalizada, debe especificar los siguientes valores.

Recurso

La URL base, incluidas las cadenas de consulta, de haberlas:

https://d111111abcdef8.cloudfront.net/images/horizon.jpg?size=large&license=yes

importante

Si omite el parámetro Resource, los usuarios podrán obtener acceso a todos los archivos asociados a cualquier distribución que esté asociada al par de claves utilizado para crear la URL firmada.

Puede especificar solo un valor en Resource.

Tenga en cuenta lo siguiente:

  • Protocol (Protocolo): el valor debe comenzar con http:// o https://.

  • Query string parameters (Parámetros de cadena de consulta): si no tiene parámetros de cadena de consulta, omita el signo de interrogación.

  • Wildcards (Caracteres comodín): puede utilizar el carácter comodín que coincide con cero o más caracteres (*) o el carácter comodín que coincide exactamente con un carácter (?) en cualquier lugar de la cadena. Por ejemplo, el valor:

    https://d111111abcdef8.cloudfront.net/*game_download.zip*

    incluiría, por ejemplo, los siguientes archivos:

    • https://d111111abcdef8.cloudfront.net/game_download.zip

    • https://d111111abcdef8.cloudfront.net/example_game_download.zip?license=yes

    • https://d111111abcdef8.cloudfront.net/test_game_download.zip?license=temp

  • Alternate domain names (Nombres de dominio alternativos): si especifica un nombre de dominio alternativo (CNAME) en la URL, debe especificarlo al hacer referencia al archivo en la página web o aplicación. No especifique la URL de Amazon S3 para el archivo.

DateLessThan

La fecha y hora de vencimiento de la URL en formato de tiempo Unix (en segundos) y hora universal coordinada (UTC). No incluya el valor entre comillas.

Por ejemplo, 16 de marzo de 2015 a las 10:00 h UTC pasa a ser 1426500000 en formato de tiempo Unix.

Para obtener más información, consulte Cuándo comprueba CloudFront la fecha y hora de vencimiento de una cookie firmada.

DateGreaterThan (opcional)

Una fecha y hora de inicio opcionales de la URL en formato de tiempo Unix (en segundos) y hora universal coordinada (UTC). Los usuarios no pueden acceder al archivo en la fecha y hora especificadas ni antes. No incluya el valor entre comillas.

IpAddress (opcional)

La dirección IP del cliente que hace la solicitud GET. Tenga en cuenta lo siguiente:

  • Para permitir que cualquier dirección IP obtenga acceso al archivo, omita el parámetro IpAddress.

  • Puede especificar una dirección IP o a un rango de direcciones IP. Por ejemplo, no puede configurar la política para permitir el acceso si la dirección IP del cliente está en uno de dos rangos separados.

  • Para permitir el acceso desde una única dirección IP, especifique:

    "Dirección IP IPv/32"

  • Debe especificar rangos de direcciones IP en formato estándar IPv4 CIDR (por ejemplo, 192.0.2.0/24). Para obtener más información, consulte RFC 4632, Classless Inter-domain Routing (CIDR): The Internet Address Assignment and Aggregation Plan, https://tools.ietf.org/html/rfc4632.

    importante

    Las direcciones IP en formato IPv6, como 2001:0db8:85a3::8a2e:0370:7334, no son compatibles.

    Si está utilizando una política personalizada que incluya IpAddress, no habilite IPv6 para la distribución. Si desea restringir el acceso a algún contenido por dirección IP y admite solicitudes IPv6 de otro contenido, puede crear dos distribuciones. Para obtener más información, consulte Habilitar IPv6 en el tema Referencia de configuración de la distribución.

Ejemplos de instrucciones de políticas para una cookie firmada que utiliza una política personalizada

En los siguientes ejemplos de instrucciones de políticas, se muestra cómo controlar el acceso a un archivo específico, a todos los archivos de un directorio o a todos los archivos asociados a un ID de par de claves. Los ejemplos también muestran cómo controlar el acceso de una dirección IP individual o a un rango de direcciones IP, y cómo impedir que los usuarios utilicen la cookie firmada después de una fecha y hora específicas.

Si copia y pega cualquiera de estos ejemplos, elimine los espacios vacíos (incluidos los tabuladores y los caracteres de línea nueva), sustituya los valores por sus propios valores e incluya un carácter de línea nueva después de la llave de cierre ( } ).

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.

Ejemplo de instrucción de política: acceso a un archivo desde un intervalo de direcciones IP

En la siguiente política personalizada de ejemplo de una cookie firmada se especifica que un usuario puede acceder al archivo https://d111111abcdef8.cloudfront.net/game_download.zip desde las direcciones IP incluidas en el intervalo 192.0.2.0/24 hasta el 1 de enero de 2023 a las 10:00 UTC:

{ "Statement": [ { "Resource": "https://d111111abcdef8.cloudfront.net/game_download.zip", "Condition": { "IpAddress": { "AWS:SourceIp": "192.0.2.0/24" }, "DateLessThan": { "AWS:EpochTime": 1357034400 } } } ] }

Ejemplo de instrucción de política: acceso a todos los archivos de un directorio desde un intervalo de direcciones IP

La siguiente política personalizada de ejemplo le permite crear cookies firmadas para cualquier archivo del directorio training, tal y como indica el carácter comodín * del parámetro Resource. Los usuarios podrán obtener acceso al archivo desde una dirección IP incluida en el rango 192.0.2.0/24 hasta el 1 de enero de 2013 a las 10:00 h UTC:

{ "Statement": [ { "Resource": "https://d111111abcdef8.cloudfront.net/training/*", "Condition": { "IpAddress": { "AWS:SourceIp": "192.0.2.0/24" }, "DateLessThan": { "AWS:EpochTime": 1357034400 } } } ] }

Cada cookie firmada en la que utilice esta política tendrá una URL base que identificará un archivo específico; por ejemplo:

https://d111111abcdef8.cloudfront.net/training/orientation.pdf

Ejemplo de instrucción de política: acceso a todos los archivos asociados con un ID de par de claves desde una dirección IP

La siguiente política personalizada de ejemplo le permite establecer cookies firmadas para cualquier archivo asociado a cualquier distribución, tal y como indica el carácter comodín * del parámetro Resource. El usuario debe utilizar la dirección IP 192.0.2.10/32. (El valor 192.0.2.10/32 en notación CIDR se refiere a la dirección IP individual 192.0.2.10). Los archivos solo van a estar disponibles desde el 1 de enero de 2013 a las 10:00 h UTC hasta el 2 de enero de 2013 a las 10:00 h UTC:

{ "Statement": [ { "Resource": "https://*", "Condition": { "IpAddress": { "AWS:SourceIp": "192.0.2.10/32" }, "DateGreaterThan": { "AWS:EpochTime": 1357034400 }, "DateLessThan": { "AWS:EpochTime": 1357120800 } } } ] }

Cada cookie firmada en la que utiliza esta política incluye una URL base que identifica un archivo específico de una distribución de CloudFront específica; por ejemplo:

https://d111111abcdef8.cloudfront.net/training/orientation.pdf

La cookie firmada también incluye un ID de par de claves que se debe asociar con un grupo de claves de confianza en la distribución (d111111abcdef8.cloudfront.net) que se especifica en la URL base.

Creación de una firma para una cookie firmada que utiliza una política personalizada

La firma de una cookie firmada que utiliza una política personalizada es una versión de la instrucción de política a la que se le ha aplicado una función hash, firmada y codificada con base64.

Para obtener más información y ejemplos de cómo resumir, aplicar una función hash y codificar la instrucción de política, consulte:

Para crear una firma para una cookie firmada con una política personalizada
  1. Use la función hash SHA-1 y RSA para resumir y firmar la instrucción de política JSON creada en el procedimiento Para crear una instrucción de política para una URL firmada que use una política personalizada. Utilice la versión de la instrucción de política que ya no incluye espacios vacíos pero que aún no se ha codificado con base64.

    Para la clave privada requerida por la función hash, utilice una clave privada cuya clave pública esté en un grupo de claves de confianza activo para la distribución.

    nota

    El método que utilice para resumir y aplicar una función hash la instrucción de política depende de su lenguaje de programación y plataforma. Para ver el código de muestra, consulte Ejemplos de código para la creación de una firma para una URL firmada.

  2. Elimine los espacios vacíos (incluidos tabuladores y caracteres de línea nueva) de la cadena a la que se le ha aplicado una función hash y firmada.

  3. Codifique la cadena con codificación base64 de MIME. Para obtener más información, consulte la Section 6.8, Base64 Content-Transfer-Encoding de RFC 2045, MIME (Multipurpose Internet Mail Extensions) Part One: Format of Internet Message Bodies.

  4. Sustituya caracteres no válidos en una cadena de consulta de URL por caracteres válidos. En la siguiente tabla se muestran los caracteres válidos y no válidos.

    Sustituya los caracteres no válidos Por estos caracteres válidos

    +

    - (guion)

    =

    _ (guion bajo)

    /

    ~ (tilde)

  5. Incluya el valor resultante en el encabezado Set-Cookie, en el par nombre-valor CloudFront-Signature=, y vuelva a Para establecer cookies firmadas mediante una política personalizada para añadir el encabezado Set-Cookie en CloudFront-Key-Pair-Id.