Solución de problemas de CORS - Amazon Simple Storage Service

Solución de problemas de CORS

Los siguientes temas pueden ayudarle a solucionar problemas habituales de CORS relacionados con S3.

Error 403 Forbidden: CORS is not enabled for this bucket

El siguiente error 403 Forbidden se produce cuando se envía una solicitud entre orígenes a Amazon S3, pero CORS no está configurado en el bucket de S3.

Error: HTTP/1.1 403 Forbidden CORS Response: CORS is not enabled for this bucket.

La configuración de CORS es un documento o política con reglas que identifican los orígenes desde los que se permitirá el acceso al bucket, las operaciones (métodos HTTP) que permitirá para cada origen y otro tipo de información específica de cada operación. Descubra cómo configurar CORS en S3 utilizando la consola de Amazon S3, los AWS SDK y la API de REST. Para obtener más información sobre CORS y ejemplos de una configuración de CORS, consulte Elementos de CORS.

Error 403 Forbidden: This CORS request is not allowed

Se recibe el siguiente error 403 Forbidden cuando una regla de CORS de la configuración de CORS no se corresponde con los datos de la solicitud.

Error: HTTP/1.1 403 Forbidden CORS Response: This CORS request is not allowed.

Como resultado, este error 403 Forbidden puede producirse por varios motivos:

  • El origen no está permitido.

  • Los métodos no están permitidos.

  • Los encabezados solicitados no están permitidos.

Para cada solicitud que Amazon S3 reciba, debe tener una regla de CORS en la configuración de CORS que se corresponda con los datos de la solicitud.

El origen no está permitido

El encabezado Origin de una solicitud de CORS a su bucket debe corresponderse con los orígenes del elemento AllowedOrigins de su configuración de CORS. Un carácter comodín ("*") en el elemento AllowedOrigins se correspondería con todos los métodos HTTP. Para obtener más información sobre cómo actualizar el elemento AllowedOrigins, consulte Configuración del uso compartido de recursos entre orígenes (CORS).

Por ejemplo, si solo se incluye el dominio http://www.example1.com en el elemento AllowedOrigins, una solicitud de CORS enviada desde el dominio http://www.example2.com recibirá el error 403 Forbidden.

El siguiente ejemplo muestra parte de una configuración de CORS que incluye el dominio http://www.example1.com en el elemento AllowedOrigins.

"AllowedOrigins":[ "http://www.example1.com" ]

Para que una solicitud de CORS enviada desde el dominio http://www.example2.com se realice correctamente, el dominio http://www.example2.com debe incluirse en el elemento AllowedOrigins de la configuración de CORS.

"AllowedOrigins":[ "http://www.example1.com" "http://www.example2.com" ]

Los métodos no están permitidos

Los métodos HTTP que se especifiquen en el Access-Control-Request-Method en una solicitud de CORS a su bucket deben corresponderse con el método o métodos enumerados en el elemento AllowedMethods de su configuración de CORS. Un carácter comodín ("*") en AllowedMethods se correspondería con todos los métodos HTTP. Para obtener más información sobre cómo actualizar el elemento AllowedOrigins, consulte Configuración del uso compartido de recursos entre orígenes (CORS).

En una configuración de CORS, puede especificar los siguientes métodos en el elemento AllowedMethods:

  • GET

  • PUT

  • POST

  • DELETE

  • HEAD

El siguiente ejemplo muestra parte de una configuración de CORS que incluye el método GET en el elemento AllowedMethods. Solo se aceptarán las solicitudes que incluyan el método GET.

"AllowedMethods":[ "GET" ]

Si se utilizó un método HTTP (por ejemplo, PUT) en una solicitud de CORS o se incluyó en una solicitud de CORS anterior al tránsito en su bucket, pero el método no está presente en la configuración de CORS, la solicitud dará lugar a un error 403 Forbidden. Para permitir esta solicitud de CORS o una solicitud de CORS anterior al tránsito, debe agregar el método PUT a su configuración de CORS.

"AllowedMethods":[ "GET" "PUT" ]

Los encabezados solicitados no están permitidos

Los encabezados que aparecen en el encabezado Access-Control-Request-Headers de una solicitud anterior al tránsito deben corresponderse con los encabezados del elemento AllowedHeaders de la configuración de CORS. Para obtener una lista de los encabezados comunes que pueden utilizarse en las solicitudes a Amazon S3, consulte Common Request Headers. Para obtener más información sobre cómo actualizar el elemento AllowedHeaders, consulte Configuración del uso compartido de recursos entre orígenes (CORS).

El siguiente ejemplo muestra parte de una configuración de CORS que incluye el encabezado Authorization en el elemento AllowedHeaders. Solo se aceptarían solicitudes del encabezado Authorization.

"AllowedHeaders": [ "Authorization" ]

Si se incluyó un encabezado (por ejemplo, Content-MD5) en una solicitud de CORS, pero el encabezado no está presente en la configuración de CORS, la solicitud dará lugar a un error 403 Forbidden. Para permitir esta solicitud de CORS, se debe agregar el encabezado Content-MD5 a la configuración de CORS. Si quiere pasar los dos encabezados, Authorization y Content-MD5, de una solicitud de CORS a su bucket, confirme que ambos estén incluidos en el elemento AllowedHeaders de su configuración de CORS.

"AllowedHeaders": [ "Authorization" "Content-MD5" ]

No se encontraron encabezados en la respuesta de CORS

El elemento ExposeHeaders de su configuración de CORS identifica los encabezados de respuesta que desea que sean accesibles a los scripts y las aplicaciones que se ejecutan en los navegadores en respuesta a una solicitud de CORS.

Si los objetos almacenados en el bucket de S3 tienen metadatos definidos por el usuario (por ejemplo, x-amz-meta-custom-header) junto con los datos de respuesta, este encabezado personalizado podría contener metadatos o información adicionales a los que desee acceder desde el código JavaScript del cliente. Sin embargo, de forma predeterminada, los navegadores bloquean el acceso a los encabezados personalizados por motivos de seguridad. Para permitir que el JavaScript del cliente acceda a los encabezados personalizados, debe incluir el encabezado en la configuración de CORS.

En el siguiente ejemplo, el encabezado x-amz-meta-custom-header1 se incluye en el elemento ExposeHeaders. x-amz-meta-custom-header2 no está incluido en el elemento ExposeHeaders y no aparece en la configuración de CORS. En la respuesta, solo se devolverían los valores incluidos en el elemento ExposeHeaders. Si la solicitud incluía el encabezado x-amz-meta-custom-header2 en el encabezado Access-Control-Expose-Headers, la respuesta seguiría devolviendo un 200 OK. Sin embargo, solo devolvería y se mostraría en la respuesta el encabezado permitido (por ejemplo, x-amz-meta-custom-header).

"ExposeHeaders": [ "x-amz-meta-custom-header1" ]

Para garantizar que todos los encabezados aparezcan en la respuesta, agregue todos los encabezados permitidos al elemento ExposeHeaders en su configuración de CORS, como se muestra a continuación.

"ExposeHeaders": [ "x-amz-meta-custom-header1", "x-amz-meta-custom-header2" ]

Consideraciones sobre CORS en las integraciones del proxy de S3

Si se producen errores y ya ha comprobado la configuración de CORS en el bucket de S3 y la solicitud entre orígenes se envía a proxies como AWS CloudFront, intente lo siguiente:

  • Configure los ajustes para permitir el método OPTIONS para las solicitudes HTTP.

  • Configure el proxy para reenviar los siguientes encabezados: Origin, Access-Control-Request-Headers y Access-Control-Request-Method.

Algunos proxies proporcionan características predefinidas para las solicitudes de CORS. Por ejemplo, en CloudFront, puede configurar una política que incluya los encabezados que permiten las solicitudes de CORS cuando el origen es un bucket de S3. Para obtener más información, consulte Control de las solicitudes de origen con una política o Uso de políticas de solicitudes de origen administradas en la Guía para desarrolladores de Amazon CloudFront.