

# Uso de URL firmadas
<a name="private-content-signed-urls"></a>

Una URL firmada incluye información adicional, por ejemplo, una fecha y hora de vencimiento, lo que permite un mayor control sobre el acceso a su contenido. Esta información adicional aparece en una instrucción de política basada en una política predefinida o personalizada. Las diferencias entre las políticas personalizadas y las predefinidas se explican en las próximas dos secciones.

**nota**  
Puede crear algunas URL firmadas con políticas predefinidas y crear otras con políticas personalizadas para la misma distribución.

**Topics**
+ [Decisión de utilizar políticas predefinidas o personalizadas para URL firmadas](#private-content-choosing-canned-custom-policy)
+ [Cómo funcionan las URL firmadas](#private-content-how-signed-urls-work)
+ [Decisión del tiempo de validez de las URL firmadas](#private-content-overview-choosing-duration)
+ [Cuándo comprueba CloudFront la fecha y hora de vencimiento de una URL firmada](#private-content-check-expiration)
+ [Código de ejemplo y herramientas de terceros](#private-content-overview-sample-code)
+ [Creación de una URL firmada mediante una política predefinida](private-content-creating-signed-url-canned-policy.md)
+ [Creación de una URL firmada mediante una política personalizada](private-content-creating-signed-url-custom-policy.md)

## Decisión de utilizar políticas predefinidas o personalizadas para URL firmadas
<a name="private-content-choosing-canned-custom-policy"></a>

Al crear una URL firmada, se escribe una instrucción de política en formato JSON que especifica las restricciones en la URL firmada, por ejemplo, el tiempo de validez de la URL. Puede utilizar una política predefinida o personalizada. A continuación, se presenta una comparación entre 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 URL firmada que utiliza una política personalizada](private-content-creating-signed-url-custom-policy.md#private-content-custom-policy-statement-values)).  | No | Sí | 
| 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. | Sí | Sí | 
| 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) | 
| La URL firmada incluye una versión de la política con codificación de tipo base64, lo que resulta en una URL más larga. | No | Sí | 

Para obtener información acerca de cómo crear URL firmadas mediante una política *predefinida*, consulte [Creación de una URL firmada mediante una política predefinida](private-content-creating-signed-url-canned-policy.md).

Para obtener información acerca de cómo crear URL firmadas mediante una política *personalizada*, consulte [Creación de una URL firmada mediante una política personalizada](private-content-creating-signed-url-custom-policy.md).

## Cómo funcionan las URL firmadas
<a name="private-content-how-signed-urls-work"></a>

A continuación, se muestra información general de cómo se configura CloudFront y Amazon S3 para URL firmadas y cómo responde CloudFront cuando un usuario utiliza una URL firmada para solicitar un archivo. 

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.

   CloudFront admite direcciones URL firmadas con firmas de claves RSA 2048 y ECDSA 256.

   Para obtener más información, consulte [Especificación de los signatarios que pueden crear URL firmadas y cookies firmadas](private-content-trusted-signers.md).

1. Desarrolle la aplicación para determinar si un usuario debe tener acceso al contenido y crear URL firmadas para los archivos o partes de la aplicación a las que desea restringir el acceso. Para obtener más información, consulte los siguientes temas:
   + [Creación de una URL firmada mediante una política predefinida](private-content-creating-signed-url-canned-policy.md)
   + [Creación de una URL firmada mediante una política personalizada](private-content-creating-signed-url-custom-policy.md)

1. Un usuario solicita un archivo que va a requerir URL firmadas.

1. La aplicación verifica si el usuario tiene derecho para obtener acceso al archivo: si ha iniciado sesión, si ha pagado por obtener acceso al contenido o si ha cumplido algún otro requisito para obtener acceso.

1. Su aplicación crea una URL firmada y la devuelve el usuario.

1. Las URL firmadas permiten al usuario descargar o transmitir el contenido.

   Este paso es automático; el usuario normalmente no tiene que hacer nada más para obtener acceso al contenido. Por ejemplo, si un usuario accede a su contenido desde un navegador web, la aplicación devuelve la URL firmada al navegador. El navegador utiliza inmediatamente la URL firmada para acceder al archivo de la caché de borde de CloudFront sin necesidad de que el usuario intervenga.

1. CloudFront utiliza la clave pública para validar la firma y confirmar que la URL no se ha manipulado. Si la firma no es válida, se rechaza la solicitud. 

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

   Si la solicitud cumple los requisitos de la instrucción de política, CloudFront realiza las operaciones estándar: 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.

**nota**  
Si una URL sin firmar contiene parámetros de cadena de consulta, asegúrese de incluirlos en la parte de la dirección URL que firma. Si agrega una cadena de consulta a una URL firmada después de firmarla, la URL devuelve un estado HTTP 403.

## Decisión del tiempo de validez de las URL firmadas
<a name="private-content-overview-choosing-duration"></a>

Puede distribuir contenido privado mediante una URL firmada cuyo periodo de validez sea corto, incluso de unos pocos minutos. Las URL firmadas con un tiempo de validez tan corto son adecuadas para distribuir contenido sobre la marcha a un usuario con una finalidad específica, como la distribución de películas de alquiler o descargas de música bajo demanda para clientes. Si el periodo de validez de las URL firmadas es corto, es recomendable generarlas automáticamente con una aplicación que puede desarrollar. Cuando el usuario comienza a descargar un archivo o a reproducir un archivo multimedia, CloudFront compara la fecha y hora de vencimiento de la URL con el momento actual para determinar si la URL todavía es válida.

También puede distribuir contenido privado mediante una URL firmada con un periodo de validez más largo, de incluso años. Las URL válidas durante periodos largos resultan útiles para distribuir contenido privado a usuarios conocidos, como, por ejemplo, la distribución de un plan de negocio a inversores o la distribución de materiales de formación a los empleados. Puede desarrollar una aplicación para generar estas URL firmadas a largo plazo para usted.

## Cuándo comprueba CloudFront la fecha y hora de vencimiento de una URL firmada
<a name="private-content-check-expiration"></a>

CloudFront comprueba la fecha y hora de vencimiento de una URL firmada al realizarse 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)](RangeGETs.md).

## Código de ejemplo y herramientas de terceros
<a name="private-content-overview-sample-code"></a>

Para ver un código de ejemplo que crea la parte de las URL firmadas y a la que se le haya aplicado una función hash, consulte los siguientes temas:
+ [Crear una firma de URL con Perl](CreateURLPerl.md)
+ [Crear una firma de URL con PHP](CreateURL_PHP.md)
+ [Crear una firma de URL mediante C\$1 y .NET Framework](CreateSignatureInCSharp.md)
+ [Crear una firma de URL con Java](CFPrivateDistJavaDevelopment.md)

# Creación de una URL firmada mediante una política predefinida
<a name="private-content-creating-signed-url-canned-policy"></a>

Para crear una URL firmada mediante una política predefinida, complete los pasos siguientes.<a name="private-content-creating-signed-url-canned-policy-procedure"></a>

**Para crear una URL firmada mediante una política predefinida**

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)](private-content-trusted-signers.md#private-content-reformatting-private-key).

1. Concatene los siguientes valores. Puede utilizar el formato de este ejemplo de URL firmada. 

   ```
   https://d111111abcdef8.cloudfront.net/image.jpg?color=red&size=medium&Expires=1767290400&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](LinkFormat.md).  
   + 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 usan 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 consulta siguen la URL base. Incluya el parámetro `?` par si no especifica ningún otro parámetro de consulta.  
Puede especificar los siguientes parámetros de consulta en cualquier orden.  
**3. *Sus parámetros de cadena de consulta, de haberlos*`&`**  
(Opcional) Puede introducir sus propios parámetros de la cadena de consulta. Para ello, agregue un signo y (`&`) entre cada uno de ellos; por ejemplo, `color=red&size=medium`. Puede especificar los parámetros de consulta en cualquier orden dentro de la URL.  
Los parámetros de la cadena de consulta no podrán llamarse `Expires`, `Signature` ni `Key-Pair-Id`.  
** 4. `Expires=`*fecha y hora en formato de tiempo Unix (en segundos), en hora universal coordinada (UTC)***  
La fecha y la hora en las que desea que la URL deje de permitir el acceso al archivo.  
Especifique la fecha y la hora de vencimiento en formato de tiempo Unix (en segundos) y hora universal coordinada (UTC). Por ejemplo, 1 de enero de 2026 a las 10:00 UTC pasa a ser `1767290400` en formato de tiempo Unix, como se muestra en el ejemplo al principio de este tema.   
Para utilizar el tiempo de época, especifique un número entero de 64 bits para una fecha que no sea posterior a `9223372036854775807` (viernes, 11 de abril de 2262 a las 23:47:16.854 UTC).  
  
Para obtener información acerca de UTC, consulte [RFC 3339, fecha y hora en Internet: marcas temporales](https://tools.ietf.org/html/rfc3339).  
** 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 predefinida](#private-content-canned-policy-creating-signature).  
** 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](private-content-trusted-signers.md).

## Creación de una firma para una URL firmada que utiliza una política predefinida
<a name="private-content-canned-policy-creating-signature"></a>

Para crear la firma para una URL firmada que utilice una política predefinida, realice los procedimientos indicados a continuación.

**Topics**
+ [Creación de una instrucción de política para una URL firmada que utiliza una política predefinida](#private-content-canned-policy-creating-policy-statement)
+ [Creación de una firma para una URL firmada que utiliza una política predefinida](#private-content-canned-policy-signing-policy-statement)

### Creación de una instrucción de política para una URL firmada que utiliza una política predefinida
<a name="private-content-canned-policy-creating-policy-statement"></a>

Al crear una URL firmada mediante una política predefinida, el parámetro `Signature` es una versión firmada y a la que se le ha aplicado una función hash de una instrucción de política. En el caso de URL firmadas que utilizan una política predefinida, la instrucción de política no se incluye en la URL, a diferencia de las URL firmadas que utilizan una política personalizada. Para crear la instrucción de política, siga el procedimiento que se indica a continuación.<a name="private-content-canned-policy-creating-policy-statement-procedure"></a>

**Para crear una instrucción de política para una URL firmada que use una política predefinida**

1. Cree la instrucción de política utilizando el siguiente formato JSON y codificación de caracteres UTF-8. Incluya toda la puntuación y otros valores literalmente, tal como se especifica. Para obtener más información acerca de los parámetros `Resource` y `DateLessThan`, consulte [Valores que se especifican en la instrucción de política de una URL firmada que utiliza una política predefinida](#private-content-canned-policy-statement-values).

   ```
   {
       "Statement": [
           {
               "Resource": "base URL or stream name",
               "Condition": {
                   "DateLessThan": {
                       "AWS:EpochTime": ending date and time in Unix time format and UTC
                   }
               }
           }
       ]
   }
   ```

1. 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.

#### Valores que se especifican en la instrucción de política de una URL firmada que utiliza una política predefinida
<a name="private-content-canned-policy-statement-values"></a>

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

**Recurso**  
Puede especificar solo un valor en `Resource`.
La URL base incluye las cadenas de consulta, de haberlas, pero excluye los parámetros de CloudFront `Expires`, `Signature` y `Key-Pair-Id`, por ejemplo:  
`https://d111111abcdef8.cloudfront.net/images/horizon.jpg?size=large&license=yes`  
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.
+ **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 del objeto.

**DateLessThan**  
La fecha y hora de vencimiento de la URL en formato de tiempo Unix (en segundos) y hora universal coordinada (UTC). Por ejemplo, 1 de enero de 2026 a las 10:00 UTC pasa a ser 1767290400 en formato de tiempo Unix.  
Este valor debe coincidir con el valor del parámetro de cadena de consulta `Expires` de la URL firmada. No incluya el valor entre comillas.  
Para obtener más información, consulte [Cuándo comprueba CloudFront la fecha y hora de vencimiento de una URL firmada](private-content-signed-urls.md#private-content-check-expiration).

#### Ejemplo de instrucción de política para una URL firmada que utiliza una política predefinida
<a name="private-content-canned-policy-creating-policy-statement-example"></a>

Cuando se utiliza la siguiente instrucción de política de ejemplo en una URL firmada, un usuario puede acceder al archivo `https://d111111abcdef8.cloudfront.net/horizon.jpg` hasta el 1 de enero de 2026 a las 10:00 UTC:

```
{
    "Statement": [
        {
            "Resource": "https://d111111abcdef8.cloudfront.net/horizon.jpg?size=large&license=yes",
            "Condition": {
                "DateLessThan": {
                    "AWS:EpochTime": 1767290400
                }
            }
        }
    ]
}
```

### Creación de una firma para una URL firmada que utiliza una política predefinida
<a name="private-content-canned-policy-signing-policy-statement"></a>

Para crear el valor del parámetro `Signature` en una URL firmada, aplique una función hash y firme la instrucción de política que ha creado en [Creación de una instrucción de política para una URL firmada que utiliza una política predefinida](#private-content-canned-policy-creating-policy-statement).

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:
+ [Comandos de Linux y OpenSSL para codificación y cifrado base64](private-content-linux-openssl.md)
+ [Ejemplos de código para la creación de una firma para una URL firmada](PrivateCFSignatureCodeAndExamples.md)<a name="private-content-canned-policy-creating-signature-download-procedure"></a>

**Opción 1: para crear una firma mediante una política predefinida**

1. Use la función hash SHA-1 y la clave privada RSA o ECDSA generada para codificar y firmar la instrucción de política creada en el procedimiento [Para crear una instrucción de política para una URL firmada que use una política predefinida](#private-content-canned-policy-creating-policy-statement-procedure). Utilice la versión de la instrucción de política que ya no incluye espacios vacíos.

   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 código de muestra, consulte [Ejemplos de código para la creación de una firma para una URL firmada](PrivateCFSignatureCodeAndExamples.md).

1. 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.

1. Codifique la cadena con codificación base64 de MIME. Para obtener más información, consulte la [Section 6.8, Base64 Content-Transfer-Encoding](https://tools.ietf.org/html/rfc2045#section-6.8) de *RFC 2045, MIME (Multipurpose Internet Mail Extensions) Part One: Format of Internet Message Bodies*.

1. 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.  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-canned-policy.html)

1. 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 predefinida](#private-content-creating-signed-url-canned-policy-procedure) para terminar de encadenar las partes de la URL firmada.

# Creación de una URL firmada mediante una política personalizada
<a name="private-content-creating-signed-url-custom-policy"></a>

Para crear una URL firmada mediante una política personalizada, realice el procedimiento que se indica a continuación.<a name="private-content-creating-signed-url-custom-policy-procedure"></a>

**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)](private-content-trusted-signers.md#private-content-reformatting-private-key).

1. Concatene los siguientes valores. Puede utilizar el formato de 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](LinkFormat.md).  
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 el parámetro `?` par si no especifica ningún otro parámetro de consulta.  
Puede especificar los siguientes parámetros de consulta en cualquier orden.  
**3. *Sus parámetros de cadena de consulta, de haberlos*`&`**  
(Opcional) Puede introducir sus propios parámetros de la cadena de consulta. Para ello, agregue un signo y (&) entre cada uno de ellos; por ejemplo, `color=red&size=medium`. Puede especificar los parámetros de consulta en cualquier orden dentro de la URL.  
Los parámetros de la cadena de consulta 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](#private-content-custom-policy-statement).  
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](#private-content-custom-policy-creating-signature).  
**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](private-content-trusted-signers.md).

## Creación de una instrucción de política para una URL firmada que utiliza una política personalizada
<a name="private-content-custom-policy-statement"></a>

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](#private-content-custom-policy-statement-examples).<a name="private-content-custom-policy-creating-policy-procedure"></a>

**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](#private-content-custom-policy-statement-values).

   ```
   {
       "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:
   + Puede incluir solo una instrucción en la política.
   + 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` y `IpAddress`, consulte [Valores que se especifican en la instrucción de política de una URL firmada que utiliza una política personalizada](#private-content-custom-policy-statement-values).

1. 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.

1. 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](https://tools.ietf.org/html/rfc2045#section-6.8) de *RFC 2045, MIME (Multipurpose Internet Mail Extensions) Part One: Format of Internet Message Bodies*.

1. 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.  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-custom-policy.html)

1. Añada el valor resultante a la URL firmada después de `Policy=`.

1. 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](#private-content-custom-policy-creating-signature).

### Valores que se especifican en la instrucción de política de una URL firmada que utiliza una política personalizada
<a name="private-content-custom-policy-statement-values"></a>

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`.  
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, no utilice una barra oblicua inversa (`\`) para evitar el 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](https://tools.ietf.org/html/rfc3339).  
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](private-content-signed-urls.md#private-content-check-expiration)

**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](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 [Habilitación de IPv6 (solicitudes de espectadores)](DownloadDistValuesGeneral.md#DownloadDistValuesEnableIPv6) en el tema [Referencia de toda la configuración de distribución](distribution-web-values-specify.md).

## Instrucciones de políticas de ejemplo para una URL firmada que utiliza una política personalizada
<a name="private-content-custom-policy-statement-examples"></a>

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](#private-content-custom-policy-statement-values).

**Topics**
+ [Ejemplo de instrucción de política: acceso a un archivo desde un intervalo de direcciones IP](#private-content-custom-policy-statement-example-one-object)
+ [Ejemplo de instrucción de política: acceso a todos los archivos de un directorio desde un intervalo de direcciones IP](#private-content-custom-policy-statement-example-all-objects)
+ [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](#private-content-custom-policy-statement-example-one-ip)

### Ejemplo de instrucción de política: acceso a un archivo desde un intervalo de direcciones IP
<a name="private-content-custom-policy-statement-example-one-object"></a>

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
<a name="private-content-custom-policy-statement-example-all-objects"></a>

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
<a name="private-content-custom-policy-statement-example-one-ip"></a>

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
<a name="private-content-custom-policy-creating-signature"></a>

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:
+ [Comandos de Linux y OpenSSL para codificación y cifrado base64](private-content-linux-openssl.md)
+ [Ejemplos de código para la creación de una firma para una URL firmada](PrivateCFSignatureCodeAndExamples.md)<a name="private-content-custom-policy-creating-signature-download-procedure"></a>

**Opción 1: para crear una firma mediante una política personalizada**

1. Use la función hash SHA-1 y la clave privada RSA o ECDSA generada para codificar 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](#private-content-custom-policy-creating-policy-procedure). 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 código de muestra, consulte [Ejemplos de código para la creación de una firma para una URL firmada](PrivateCFSignatureCodeAndExamples.md).

1. 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.

1. Codifique la cadena con codificación base64 de MIME. Para obtener más información, consulte la [Section 6.8, Base64 Content-Transfer-Encoding](https://tools.ietf.org/html/rfc2045#section-6.8) de *RFC 2045, MIME (Multipurpose Internet Mail Extensions) Part One: Format of Internet Message Bodies*.

1. 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.  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-custom-policy.html)

1. 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](#private-content-creating-signed-url-custom-policy-procedure) para terminar de encadenar las partes de la URL firmada.