Creación de una URL firmada mediante una política personalizada - Amazon CloudFront

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Creación de una URL firmada mediante una política personalizada

Para crear una URL firmada mediante una política personalizada, siga el procedimiento que se indica a continuación.

Para crear una URL firmada mediante una política personalizada
  1. 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).

  2. Concatene los siguientes valores en el orden especificado y elimine el espacio en blanco (incluidos tabuladores y caracteres de línea nueva) entre las partes. Es posible que tenga que incluir caracteres de escape en la cadena del código de la aplicación. Todos los valores tienen un tipo de cadena. Cada parte está marcada con un número ( 
							1
						) en los dos ejemplos que se muestran a continuación.

    
										1
									URL base del archivo

    La URL base es la CloudFront URL que utilizaría para acceder al archivo si no utilizara direcciones URL firmadas, incluidos sus propios parámetros de cadena de consulta, si los hubiera. Para obtener más información acerca del formato de las URL para distribuciones, consulte Personalizar el formato de URL de los archivos en CloudFront.

    Los siguientes ejemplos muestran valores que especifica para distribuciones.

    • La siguiente CloudFront URL corresponde a un archivo de imagen de una distribución (utilizando el nombre de CloudFront dominio). image.jpg está en un directorio images. La ruta hacia el archivo de la URL debe coincidir con la ruta hacia el archivo del servidor HTTP o del bucket de Amazon S3.

      https://d111111abcdef8.cloudfront.net/images/image.jpg

    • La siguiente CloudFront URL incluye una cadena de consulta:

      https://d111111abcdef8.cloudfront.net/images/image.jpg?size=large

    • Las siguientes CloudFront direcciones URL son para los archivos de imagen de una distribución. Ambas utilizan un nombre de dominio alternativo; la segunda incluye una cadena de consulta:

      https://www.example.com/images/image.jpg

      https://www.example.com/images/image.jpg?color=red

    • La siguiente CloudFront URL corresponde a un archivo de imagen de una distribución que utiliza un nombre de dominio alternativo y el protocolo HTTPS:

      https://www.example.com/images/image.jpg

    
										2
									?

    ? indica que los parámetros de la cadena de consulta siguen a la URL base. Incluya ? aunque no tenga sus propios parámetros de cadena de consulta.

    
										3
									Sus parámetros de cadena de consulta, de haberlos&

    Este valor es opcional. Si desea añadir sus propios parámetros de cadena de consulta, por ejemplo:

    color=red&size=medium

    añádalos después de ? (consulte 
											2
										) y antes del parámetro Policy. En algún caso poso frecuente, posiblemente tenga que añadir los parámetros de cadena de consulta después de Key-Pair-Id.

    importante

    Los parámetros no podrán llamarse Policy, Signature ni Key-Pair-Id.

    Si añade sus propios parámetros, incluya un & después de cada uno, incluso después del último.

    
										4
									Policy=versión codificada en base64 de la instrucción de política

    La instrucción de política en formato JSON después de haber eliminado los espacios en blanco y, a continuación, codificada con base64. Para obtener más información, consulte Creación de una instrucción de política para una URL firmada que utiliza una política personalizada.

    La instrucción de política controla el acceso que una URL firmada concede a un usuario. Incluye la URL del archivo, una fecha y hora de vencimiento, una fecha y hora opcionales en 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.

    
										5
									&Signature=versión firmada y con hash de la instrucción de política

    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 URL firmada que utiliza una política personalizada.

    
									6
								&Key-Pair-Id=ID de clave CloudFront pública para la clave pública cuya clave privada correspondiente está utilizando para generar la firma

    El ID de una clave CloudFront pública, por ejemplo,K2JCJMDEHXQW5F. El ID de clave pública indica CloudFront qué clave pública se debe usar para validar la URL firmada. CloudFront compara la información de la firma con la información de la declaración de política para comprobar que la URL no ha sido manipulada.

    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.

Ejemplo de URL firmada:


					1
				https://d111111abcdef8.cloudfront.net/image.jpg 
					2
				? 
					3
				color=red&size=medium& 
					4
				Policy=eyANCiAgICEXAMPLEW1lbnQiOiBbeyANCiAgICAgICJSZXNvdXJjZSI6Imh0dHA 6Ly9kemJlc3FtN3VuMW0wLmNsb3VkZnJvbnQubmV0L2RlbW8ucGhwIiwgDQogICAgICAiQ 29uZGl0aW9uIjp7IA0KICAgICAgICAgIklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiI yMDcuMTcxLjE4MC4xMDEvMzIifSwNCiAgICAgICAgICJEYXRlR3JlYXRlclRoYW4iOnsiQ VdTOkVwb2NoVGltZSI6MTI5Njg2MDE3Nn0sDQogICAgICAgICAiRGF0ZUxlc3NUaGFuIjp 7IkFXUzpFcG9jaFRpbWUiOjEyOTY4NjAyMjZ9DQogICAgICB9IA0KICAgfV0gDQp9DQo 
					5
				&Signature=nitfHRCrtziwO2HwPfWw~yYDhUF5EwRunQA-j19DzZrvDh6hQ73lDx~ -ar3UocvvRQVw6EkC~GdpGQyyOSKQim-TxAnW7d8F5Kkai9HVx0FIu-5jcQb0UEmat EXAMPLE3ReXySpLSMj0yCd3ZAB4UcBCAqEijkytL6f3fVYNGQI6 
					6
				&Key-Pair-Id=K2JCJMDEHXQW5F

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

Complete los siguientes pasos para crear una instrucción de política para una URL firmada que utiliza una política personalizada.

Para consultar instrucciones de políticas de ejemplo que controlan el acceso a archivos de distintas maneras, consulte Instrucciones de políticas de ejemplo para una URL firmada que utiliza una política personalizada.

Para crear una instrucción de política para una URL firmada que use una política personalizada
  1. Cree la instrucción de política en el siguiente formato JSON. Sustituya los símbolos menor que (<) y mayor que (>) y las descripciones que contienen, por sus propios valores. Para obtener más información, consulte Valores que se especifican en la instrucción de política de una URL firmada que utiliza una política personalizada.

    { "Statement": [ { "Resource": "<Optional but recommended: 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 en blanco (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. Añada el valor resultante a la URL firmada después de Policy=.

  6. Cree una firma para la URL firmada 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 URL firmada que utiliza una política personalizada.

Valores que se especifican en la instrucción de política de una URL firmada que utiliza una política personalizada

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

Resource

La URL, incluidas las cadenas de consulta, pero excluyendo los Key-Pair-Id parámetros CloudFront PolicySignature, y. Por ejemplo:

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

Puede especificar solo un valor de URL para Resource.

importante

Puede omitir el parámetro Resource en una política, pero hacerlo significa que cualquiera con la URL firmada puede acceder a todos los archivos en cualquier distribución asociada con el par de claves que utiliza para crear la URL firmada.

Tenga en cuenta lo siguiente:

  • Protocolo: el valor debe comenzar con http://, https:// o *://.

  • Parámetros de cadena de consulta: si la URL tiene parámetros de cadena de consulta, utilice una barra oblicua inversa (\) para escapar del signo de interrogación (?) que comienza la cadena de consulta. Por ejemplo:

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

  • Caracteres comodín: puede utilizar caracteres comodín en la URL de la política. Se admiten los siguientes caracteres comodín:

    • asterisco (*), que busca coincidencias con cero o más caracteres

    • el signo de interrogación de cierre (?), que busca coincidencias exactamente con un carácter

    Cuando la URL de la política CloudFront coincide con la URL de la solicitud HTTP, la URL de la política se divide en cuatro secciones (protocolo, dominio, ruta y cadena de consulta) de la siguiente manera:

    [protocol]://[domain]/[path]\?[query string]

    Al utilizar un carácter comodín en la URL de la política, la coincidencia de caracteres comodín solo se aplica dentro de los límites de la sección que contiene el comodín. Por ejemplo, considere esta URL en una política:

    https://www.example.com/hello*world

    En este ejemplo, el comodín asterisco (*) solo se aplica a la sección de rutas, por lo que coincide con las URL https://www.example.com/helloworld y https://www.example.com/hello-world, pero no con la URL https://www.example.net/hello?world.

    Las siguientes excepciones se aplican a los límites de las secciones para la coincidencia de caracteres comodín:

    • Un asterisco al final de la sección de rutas implica un asterisco en la sección de cadenas de consulta. Por ejemplo, http://example.com/hello* equivale a http://example.com/hello*\?*.

    • Un asterisco al final de la sección de dominio implica un asterisco en la secciones de ruta y cadena de consulta. Por ejemplo, http://example.com* equivale a http://example.com*/*\?*.

    • Una URL en la política puede omitir la sección de protocolo y empezar con un asterisco en la sección de dominio. En ese caso, la sección de protocolo se establece implícitamente en un asterisco. Por ejemplo, la URL *example.com en una política es equivalente a *://*example.com/.

    • Un asterisco por sí solo ("Resource": "*") coincide con cualquier URL.

    Por ejemplo, el valor: https://d111111abcdef8.cloudfront.net/*game_download.zip* en una política coincide con todas las URL siguientes:

    • 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

  • Nombres de dominio alternativos: si especifica un nombre de dominio alternativo (CNAME) en la URL de la política, la solicitud HTTP debe usar el nombre de dominio alternativo en la página web o aplicación. No especifique la URL de Amazon S3 para el archivo en una política.

DateLessThan

La fecha y hora de vencimiento de la URL en formato de tiempo Unix (en segundos) y hora universal coordinada (UTC). En la política, no incluya el valor entre comillas. Para obtener información acerca de UTC, consulte Fecha y hora en Internet: marcas temporales.

Por ejemplo, el 31 de enero de 2023 a las 10:00 UTC pasa a ser 1675159200 en formato de tiempo Unix.

Este es el único parámetro obligatorio de la sección. Condition CloudFront requiere este valor para evitar que los usuarios tengan acceso permanente a tu contenido privado.

Para obtener más información, consulte ¿Cuándo se CloudFront comprueba la fecha y la hora de caducidad de una URL 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 HTTP. 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. No puede usar 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 Enrutamiento entre dominios sin clases (CIDR): Asignación de dirección de Internet y plan de agregación.

    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 Valores que deben especificarse al crear o actualizar una distribución.

Instrucciones de políticas de ejemplo para una URL 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 desde una dirección IP individual o a un rango de direcciones IP, y cómo impedir que los usuarios utilicen la URL firmada después de una fecha y hora específicas.

Si copia y pega cualquiera de estos ejemplos, elimine los espacios en blanco (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 URL firmada que utiliza una política personalizada.

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

En el siguiente ejemplo de política personalizada de una URL firmada se especifica que un usuario puede acceder al archivo https://d111111abcdef8.cloudfront.net/game_download.zip desde las direcciones IP del intervalo 192.0.2.0/24 hasta el 31 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": 1675159200 } } } ] }

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 URL firmadas para cualquier archivo del directorio training, tal y como indica el carácter comodín asterisco (*) del parámetro Resource. Los usuarios pueden acceder al archivo desde una dirección IP incluida en el rango 192.0.2.0/24 hasta el 31 de enero de 2023 a las 10:00 UTC:

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

Cada URL firmada con la que utilice esta política tiene una URL que identifica a 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 crear URL firmadas para cualquier archivo asociado a cualquier distribución, tal y como indica el carácter comodín asterisco (*) del parámetro Resource. La URL firmada debe usar el protocolo https://, no http://. 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 31 de enero de 2023 a las 10:00 UTC hasta el 2 de febrero de 2023 a las 10:00 UTC:

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

Cada URL firmada con la que utilices esta política tiene una URL que identifica un archivo específico en una CloudFront distribución específica, por ejemplo:

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

La URL 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.

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

La firma de una URL 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 crear una firma para una política personalizada, complete los pasos siguientes.

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:

Opción 1: para crear una firma mediante 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 en blanco 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 en blanco (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. Añada el valor resultante a la URL firmada después de &Signature= y vuelva a Para crear una URL firmada mediante una política personalizada para terminar de encadenar las partes de la URL firmada.