Establecimiento de cookies firmadas mediante una política personalizada
Para establecer una cookie firmada que utiliza una política personalizada, complete los siguientes pasos.
Para establecer cookies firmadas mediante una política personalizada
-
Si utiliza. NET o Java para crear URL firmadas y no ha reformateado la clave privada del par de claves del formato .pem predeterminado a un formato compatible con .NET o con Java, hágalo ahora. Para obtener más información, consulte Volver a formatear la clave privada (solo .NET y Java).
-
Programe su aplicación para enviar tres encabezados
Set-Cookie
a los espectadores aprobados. Necesita tres encabezadosSet-Cookie
porque cada encabezadoSet-Cookie
puede contener solo un par de nombre-valor y una cookie firmada de CloudFront requiere tres pares de nombre-valor. Los pares de nombre-valor son:CloudFront-Policy
,CloudFront-Signature
yCloudFront-Key-Pair-Id
. Los valores deben estar presentes en el lector antes de que un usuario realice la primera solicitud de un archivo cuyo acceso desea controlar.nota
En general, recomendamos que excluya los atributos
Expires
yMax-Age
. Al excluirlos, el navegador elimina la cookie cuando el usuario lo cierra, lo que reduce la posibilidad de alguien obtenga acceso no autorizado a su contenido. Para obtener más información, consulte Prevención del uso indebido de cookies firmadas.Los nombres de los atributos de las cookies distinguen entre mayúsculas y minúsculas.
Los saltos de línea se incluyen únicamente para que los atributos sean más legibles.
Set-Cookie: CloudFront-Policy=
base64 encoded version of the policy statement
; Domain=optional domain name
; Path=/optional directory path
; Secure; HttpOnly Set-Cookie: CloudFront-Signature=hashed and signed version of the policy statement
; Domain=optional domain name
; Path=/optional directory path
; Secure; HttpOnly Set-Cookie: CloudFront-Key-Pair-Id=public key ID for the CloudFront public key whose corresponding private key you're using to generate the signature
; Domain=optional domain name
; Path=/optional directory path
; Secure; HttpOnly- (Opcional)
Domain
-
Nombre de dominio del archivo solicitado. Si no especifica un atributo
Domain
, el valor predeterminado será el nombre de dominio de la URL; esto es aplicable solo al nombre de dominio especificado, no a subdominios. Si especifica un atributoDomain
, también será aplicable a subdominios. Un punto al inicio del nombre de dominio (por ejemplo,Domain=.example.com
) es opcional. Además, si no especifica un atributoDomain
, el nombre de dominio de la URL y el valor del atributoDomain
deberán coincidir.Puede especificar el nombre de dominio que CloudFront ha asignado a la distribución, por ejemplo, d111111abcdef8.cloudfront.net, pero no puede especificar *.cloudfront.net para el nombre de dominio.
Si desea utilizar un nombre de dominio alternativo como example.com en las URL, debe añadir dicho nombre de dominio a su 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. - (Opcional)
Path
-
Ruta del archivo solicitado. Si no especifica un atributo
Path
, el valor predeterminado será la ruta de la URL. Secure
-
Requiere que el espectador cifre cookies antes de enviar una solicitud. Recomendamos que envíe el encabezado
Set-Cookie
a través de una conexión HTTPS para asegurarse de que los atributos de la cookie estén protegidos contra ataques man-in-the-middle. HttpOnly
-
Requiere que el espectador envíe la cookie únicamente en solicitudes de HTTP o HTTPS.
CloudFront-Policy
-
La instrucción de política en formato JSON después de haber eliminado los espacios vacíos y, a continuación, codificada con base64. Para obtener más información, consulte Creación de una firma para una cookie firmada que utiliza una política personalizada.
La instrucción de política controla el acceso que una cookie firmada concede a un usuario. Incluye los archivos a los que el usuario puede acceder, una fecha y hora de vencimiento, una fecha y hora opcionales a las que la URL se convierte en válida y una dirección IP opcional o un intervalo de direcciones IP a las que se permite acceder al archivo.
CloudFront-Signature
-
Una versión firmada, a la que se le ha aplicado una función hash y codificada en base64 de la instrucción de política JSON. Para obtener más información, consulte Creación de una firma para una cookie firmada que utiliza una política personalizada.
CloudFront-Key-Pair-Id
-
El ID de una clave pública de CloudFront, por ejemplo,
K2JCJMDEHXQW5F
. El ID de clave pública indica a CloudFront qué clave pública usar para validar la URL firmada. CloudFront compara la información de la firma con la información de la instrucción de política para comprobar que la URL no se ha manipulado.Esta clave pública debe pertenecer a un grupo de claves que tiene un signatario de confianza en la distribución. Para obtener más información, consulte Especificación de los signatarios que pueden crear URL firmadas y cookies firmadas.
- (Opcional)
Ejemplos de encabezados Set-Cookie
para políticas personalizadas
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
-
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:
-
Puede incluir una instrucción.
-
Utilice la codificación de caracteres UTF-8.
-
Incluya toda la puntuación y los nombres de parámetros exactamente como se especifica. No se aceptan abreviaturas de nombres de parámetros.
-
El orden de los parámetros de la sección
Condition
no importa. -
Para obtener información acerca de valores para
Resource
,DateLessThan
,DateGreaterThan
yIpAddress
, consulte Valores que se especifican en la instrucción de política de una política personalizada para cookies firmadas.
-
-
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.
-
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. -
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)
-
Incluya el valor resultante en el encabezado
Set-Cookie
después deCloudFront-Policy=
. -
Cree una firma para el encabezado
Set-Cookie
enCloudFront-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://
ohttps://
. -
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.
Temas
- Ejemplo de instrucción de política: acceso a un archivo desde un intervalo de direcciones IP
- Ejemplo de instrucción de política: acceso a todos los archivos de un directorio desde un intervalo de direcciones IP
- 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
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
-
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.
-
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.
-
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. -
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)
-
Incluya el valor resultante en el encabezado
Set-Cookie
, en el par nombre-valorCloudFront-Signature=
, y vuelva a Para establecer cookies firmadas mediante una política personalizada para añadir el encabezadoSet-Cookie
enCloudFront-Key-Pair-Id
.