¿Cómo soluciono los problemas relacionados con una URL firmada o con cookies firmadas en CloudFront?

8 minutos de lectura
0

Utilizo Amazon CloudFront y una URL firmada o cookies firmadas para proteger el contenido privado. Recibo un error 403 Access Denied.

Resolución

Si Amazon CloudFront detecta un problema con una URL firmada o con las cookies firmadas, es posible que reciba un error 403 Access Denied.

Una URL firmada o una cookie firmada no incluyen al firmante correcto

Cuando activas la opción Restringir el acceso de espectador en un comportamiento, debe determinar quién es el firmante. Un firmante es un grupo de claves de confianza que se crea en CloudFront o una cuenta de AWS que contiene un par de claves de CloudFront. Los siguientes mensajes de error 403 indican que falta la información del firmante o es incorrecta:

El error incluye el mensaje «Missing Key-Pair-Id query parameter or cookie value».

Este mensaje indica que falta un parámetro de consulta Key-Pair-Id o que está vacío con una URL firmada. O bien, indica que falta un parámetro de cadena de consulta CloudFront-Key-Pair-ID en una cookie firmada.

El error incluye el mensaje «Clave desconocida».

Este mensaje indica que CloudFront no puede verificar la información del firmante mediante Key-Pair-ID para las URL firmadas o CloudFront-Key-Pair-ID para las cookies firmadas.

Para resolver este problema, confirme que se utiliza el valor Key-Pair-ID correcto para una URL firmada o CloudFront-Key-Pair-ID para las cookies firmadas:

Si utiliza una URL firmada, busque y anote el valor de Key-Pair-ID.
-o-
Si utiliza cookies firmadas, busque y anote el valor de CloudFront-Key-Pair-ID.

A continuación, busque el ID de clave y confirme que coincide con el Key-Pair-ID o CloudFront-Key-Pair-ID:

  1. Abra la consola de CloudFront. En el menú de navegación, seleccione Distribuciones.
  2. Seleccione su distribución. Después seleccione la pestaña Comportamientos.
  3. Seleccione el nombre del comportamiento y, a continuación, elija Editar.
  4. Busque la opción Restringir el acceso de los espectadores.
    Nota: Si se establece en , las solicitudes de archivos que coincidan con el patrón de rutas del comportamiento de la caché deben usar la URL firmada o la cookie firmada.
  5. Compruebe el campo Tipo de autorización de confianza.
  6. Si el valor de configuración del Tipo de autorización de confianza es Grupos de claves de confianza, anote el nombre del grupo de claves de confianza. Busque los ID de clave pública del grupo de claves de confianza:
    Abra la consola de CloudFront.
    Seleccione Grupos de claves. Elija el nombre del grupo de claves de confianza que anotó.
    Confirme que el valor Key-Pair-Id o CloudFront-Key-Pair-Id coincide con uno de los ID de clave pública del grupo de claves de confianza.
  7. Si el valor del tipo Autorización de confianza es Firmante de confianza, CloudFront utiliza las credenciales que genera AWS. En este caso, el valor e Key-Pair-Id r CloudFront-Key-Pair-Id debe coincidir con el ID de clave de acceso de las credenciales de CloudFront.
    Nota: Para encontrar el ID de clave de acceso de las credenciales de CloudFront, consulte Crear pares de claves para los firmantes.

No se envía una URL firmada o una cookie firmada en un momento válido

Al crear una URL firmada o una cookie firmada, una instrucción de política en formato JSON especifica las restricciones de la URL firmada. Esta sentencia determina durante cuánto tiempo es válida la URL. CloudFront devuelve un error 403 Access Denied en los siguientes escenarios:

Nota: Los valores Expires, CloudFront-Expires, DateLessThan y DateGreaterThan están en formato de hora Unix en segundos y en hora universal coordinada (UTC). Por ejemplo, el 1 de enero de 2013 a las 10:00 a.m. UTC se convierte a 1357034400 en el formato de hora de Unix. Si usa la hora de época, usa un entero de 32 bits para una fecha que no sea posterior a 2147483647 (19 de enero de 2038 a las 03:14:07 UTC).

El parámetro Policy de una URL firmada o el atributo CloudFront-Policy de una cookie firmada indican que se utiliza una política personalizada. La instrucción de política está en formato JSON y está codificada en base64. Para averiguar el valor DateLessThan o DateGreaterThan, utilice un comando de decodificación base64.

Ejemplo de una política personalizada codificada en base64:

eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2QxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0L2dhbWVfZG93bmxvYWQuemlwIiwiQ29uZGl0aW9uIjp7IklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIxOTIuMC4yLjAvMjQifSwiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0MjY1MDAwMDB9fX1dfQ__

Para decodificar una política personalizada en formato codificado en base64 y convertirla en formato JSON, ejecute el siguiente comando de Linux. Sustituya el valor de la política por el valor de la política personalizado:

echo "eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2QxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0L2dhbWVfZG93bmxvYWQuemlwIiwiQ29uZGl0aW9uIjp7IklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIxOTIuMC4yLjAvMjQifSwiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0MjY1MDAwMDB9fX1dfQ__" | tr -- '-_~' '+=/' | base64 -d

Recibirá un resultado similar al siguiente:

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

Una URL firmada o una cookie firmada tiene más de una instrucción en la política

Si se incluye más de una instrucción en una política preestablecida o en una política personalizada, CloudFront devuelve un error 403 Access Denied.

Para solucionar este problema, ejecute el comando Linux de la sección anterior para comprobar la instrucción de política personalizada. Verifique los detalles de su código y, a continuación, confirme que solo se incluye una instrucción en la política predefinida o en la política personalizada.

Una URL firmada o una cookie firmada tienen una URL base incorrecta en la política

CloudFront devuelve un error 403 Access Denied cuando la URL base de la política es incorrecta:

  • Se abrevia (www.example.com) en la clave Resource. Utilice una URL completa (http://www.example.com).
  • No hay codificación de caracteres UTF-8.
  • No incluye todos los nombres de puntuación y parámetros.
  • El protocolo HTTP o HTTPS no coincide con el protocolo que se usa en una solicitud que envía una URL firmada o cookies firmadas.
  • El nombre de dominio no coincide con el encabezado de host que usa el agente de usuario para enviar una URL firmada o cookies firmadas.
  • La cadena de consulta incluye caracteres que no son válidos.

Una URL firmada o una cookie firmada tiene una firma incorrecta en la política

CloudFront devuelve un error 403 Access Denied en los siguientes escenarios:

  • La instrucción de política incluye espacios en blanco, tabulaciones y caracteres de nueva línea.
  • La política predefinida o la política personalizada no se formatean como cadenas antes de que se codifiquen con hash. Esto ocurre cuando crea una URL firmada o una cookie firmada sin un SDK de AWS.
  • La política no se convierte en hash antes de generar la firma. Esto ocurre cuando crea la URL firmada o la cookie firmada sin un AWS SDK.

Para conocer las prácticas recomendadas de firma cuando usas una URL firmada o cookies firmadas, consulte Ejemplos de código para la creación de una firma para una URL firmada.

Se envió una URL firmada o una cookie firmada desde una dirección IP o un rango de IP no admitidos

CloudFront devuelve un error 403 Access Denied cuando se envía una URL firmada o una cookie firmada desde una dirección IPv6. O bien, se envía desde una dirección IPv4 o un rango IPv4 que no está permitido en la política personalizada.

La clave IpAddress solo está disponible en la política personalizada que se encuentra en una URL firmada o en una cookie firmada. No se admiten las direcciones IP en formato IPv6. Si usa una política personalizada que incluye IpAddress, no active IPv6 para la distribución.

Una cookie firmada no incluye los atributos de dominio y ruta en los encabezados de respuesta de Set-cookie

CloudFront devuelve un error 403 Access Denied cuando las cookies regresan de CloudFront pero no se incluyen en solicitudes posteriores al mismo dominio. En este caso, compruebe los atributos de las cookies Domain and Path en el encabezado de respuesta Set-Cookie.

El valor Dominio es el nombre de dominio del archivo solicitado. Si no especifica un atributo Dominio, el valor predeterminado es el nombre de dominio de la URL. Esto se aplica solo al nombre de dominio especificado, no a los subdominios. Si especifica un atributo Dominio, también se aplica a los subdominios.

Si especifica un atributo Dominio, el nombre de dominio de la URL y el valor del atributo Domain deben coincidir. Puede especificar el nombre de dominio que CloudFront asigna a su distribución, por ejemplo, d111111abcdef8.cloudfront.net. Sin embargo, no puede especificar *.cloudfront.net como nombre de dominio. Para usar un nombre de dominio alternativo, como example.com, agregue un nombre de dominio alternativo a su distribución en sus URL.

El atributo Path es la ruta del archivo solicitado. Si no especifica un atributo Path, el valor predeterminado es la ruta de la URL.

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año