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

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

Para crear una URL firmada mediante una política personalizada, realice 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 indicado, replicando el formato que se muestra en este ejemplo de URL firmada:

    https://d111111abcdef8.cloudfront.net/image.jpg?color=red&size=medium&Policy=eyANCiAgICEXAMPLEW1lbnQiOiBbeyANCiAgICAgICJSZXNvdXJjZSI6Imh0dHA6Ly9kemJlc3FtN3VuMW0wLmNsb3VkZnJvbnQubmV0L2RlbW8ucGhwIiwgDQogICAgICAiQ29uZGl0aW9uIjp7IA0KICAgICAgICAgIklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIyMDcuMTcxLjE4MC4xMDEvMzIifSwNCiAgICAgICAgICJEYXRlR3JlYXRlclRoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTI5Njg2MDE3Nn0sDQogICAgICAgICAiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjEyOTY4NjAyMjZ9DQogICAgICB9IA0KICAgfV0gDQp9DQo&Signature=nitfHRCrtziwO2HwPfWw~yYDhUF5EwRunQA-j19DzZrvDh6hQ73lDx~-ar3UocvvRQVw6EkC~GdpGQyyOSKQim-TxAnW7d8F5Kkai9HVx0FIu-5jcQb0UEmatEXAMPLE3ReXySpLSMj0yCd3ZAB4UcBCAqEijkytL6f3fVYNGQI6&Key-Pair-Id=K2JCJMDEHXQW5F

    Elimine todos los espacios vacíos (incluidos tabuladores y caracteres de línea nueva). 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 String.

    1. URL base del archivo

    La URL base es la URL de CloudFront que utilizaría para acceder al archivo si no utilizara las URL firmadas, incluidos los parámetros de la cadena de consulta propios, si los hay. En el ejemplo anterior, la URL base es https://d111111abcdef8.cloudfront.net/image.jpg. Para obtener más información acerca del formato de las URL para distribuciones, consulte Personalización del formato de URL para archivos en CloudFront.

    Los siguientes ejemplos muestran valores que especifica para distribuciones.

    • La siguiente URL de CloudFront es para un archivo de imagen en una distribución (utilizando el nombre de dominio de CloudFront). 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 URL de CloudFront incluye una cadena de consulta:

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

    • Las siguientes URL de CloudFront corresponden a 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 URL de CloudFront 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 ? 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 con base64 de la instrucción de política

    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 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 a la que se le ha aplicado una función 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 pública para la clave pública de CloudFront cuya clave privada correspondiente va a utilizar para generar la firma

    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.

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 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. 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 parámetros de CloudFront Policy, Signature y Key-Pair-Id. 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 CloudFront hace coincidir la URL de la política 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 requerido en la sección Condition. CloudFront requiere este valor para impedir que los usuarios tengan acceso permanente al contenido privado.

Para obtener más información, consulte Cuándo comprueba CloudFront la fecha y hora de vencimiento 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 Referencia de configuración de la 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 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 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 utilice esta política tiene una URL que identifica un archivo específico de una distribución de CloudFront 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 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. 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.