¿Cómo puedo configurar CORS en Amazon S3 y confirmar las reglas de CORS con cURL?
Quiero permitir el uso compartido de recursos entre orígenes (CORS) en mi bucket de Amazon Simple Storage Service (Amazon S3), pero aparece un error.
Solución
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.
Puedes aplicar reglas de uso compartido de recursos entre orígenes (CORS) a tu bucket mediante la consola de Amazon S3 o la Interfaz de la línea de comandos de AWS (AWS CLI). CORS es una característica de HTTP que utiliza encabezados para permitir a los navegadores mostrar el contenido que un servidor web solicitó desde un origen diferente. Si realizas una solicitud de origen cruzado a un bucket de Amazon S3 que no has configurado con una regla de CORS, el servidor web no devolverá el encabezado de CORS. Para probar las reglas de CORS en tu bucket de Amazon S3, usa el siguiente comando cURL:
curl -i http://mycorsbucket.s3.amazonaws.com/cors-test.html -H "Origin: http://www.example.com" HTTP/1.1 200 OK x-amz-id-2: Va106gWx1uUDGbouopXfpjvjHW0VXydI8/VGlraf/62f2vvxtI+iAnmu7lF4MK2B6CxuzReyfRI= x-amz-request-id: QWNNX1Y0MWFM152H Date: Thu, 04 Nov 2021 18:52:55 GMT Last-Modified: Thu, 04 Nov 2021 16:03:50 GMT ETag: "cd4276d2cd5a2dc8ebcc1e04746680f6" Accept-Ranges: bytes Content-Type: text/html Server: AmazonS3 Content-Length: 55
Nota: Sustituye mycorsbucket por el nombre de tu bucket y sustituye www.example.com por la URL del servidor web desde el que solicitas contenido.
Si un servidor web hizo una solicitud similar a un sitio web de origen, el contenido que se recupere de tu bucket no se mostrará en el navegador. Para permitir que se muestre su contenido, configura una política de CORS en tu bucket de Amazon S3. Configura tu política de CORS para que se devuelvan los encabezados apropiados. Puedes configurar una regla de CORS en su bucket mediante la consola de Amazon S3 o la AWS CLI.
Configuración de una regla de CORS con la consola de Amazon S3
Para configurar una regla de CORS en tu bucket mediante la consola de Amazon S3, completa los siguientes pasos:
-
Abre la consola de Amazon S3.
-
Selecciona tu bucket.
-
Selecciona la pestaña Permisos.
-
En el panel Uso compartido de recursos entre orígenes, selecciona Editar.
-
En el cuadro de texto, introduce la regla JSON CORS que quieras activar, como en el ejemplo siguiente:
[ { "AllowedHeaders": [ "Authorization" ], "AllowedMethods": [ "GET", "HEAD" ], "AllowedOrigins": [ "http://www.example.com" ], "ExposeHeaders": [ "Access-Control-Allow-Origin" ] } ]Para obtener más información sobre cada uno de los elementos de la regla de CORS o reglas de ejemplo, consulta Configuración de CORS.
Nota: Sustituye www.example.com por la URL del servidor web desde el que solicitas contenido.
-
Elige Guardar.
Configuración de una regla de CORS con la AWS CLI
Para configurar una regla de CORS en tu bucket con la AWS CLI, ejecuta el siguiente comando:
aws s3api put-bucket-cors --bucket mycorsbucket --cors-configuration '{"CORSRules" : [{"AllowedHeaders":["Authorization"],"AllowedMethods":["GET","HEAD"],"AllowedOrigins":["http://www.example.com"],"ExposeHeaders":["Access-Control-Allow-Origin"]}]}'
Nota: Sustituye mycorsbucket por el nombre de tu bucket y sustituye www.example.com por la URL del servidor web desde el que solicitas contenido.
Prueba de la regla de CORS
Para probar la regla de CORS, utiliza el comando cURL de la siguiente manera:
curl -i http://mycorsbucket.s3.amazonaws.com/index.html -H "Origin: http://www.example.com" HTTP/1.1 200 OK x-amz-id-2: d5Jsw1vCf8tR3cMdXrtcTKYgczU/1pjxahnrw7C6jU1fLo8py2Nv2kpeFs8pYPruVZg6Y3JuRUA= x-amz-request-id: BMCCY18E58B3GBWV Date: Thu, 04 Nov 2021 19:12:26 GMT Access-Control-Allow-Origin: http://www.example.com Access-Control-Allow-Methods: GET, HEAD Access-Control-Expose-Headers: Access-Control-Allow-Origin Access-Control-Allow-Credentials: true Vary: Origin, Access-Control-Request-Headers, Access-Control-Request-Method Last-Modified: Thu, 04 Nov 2021 16:03:50 GMT ETag: "cd4276d2cd5a2dc8ebcc1e04746680f6" Accept-Ranges: bytes Content-Type: text/html Server: AmazonS3 Content-Length: 55
Nota: Sustituye mycorsbucket por el nombre de tu bucket y sustituye www.example.com por la URL del servidor web desde el que solicitas contenido.
Si configuraste la regla de CORS correctamente, recibirás una respuesta 200 OK.
Solución de problemas con los métodos de CORS
Si te encuentras un comportamiento inesperado al acceder a los buckets con CORS, prueba lo siguiente:
-
Utiliza el comando cURL para hacer solicitudes con métodos de CORS específicos añadiendo la marca -H «Access-Control-Request-Method: <Method>». Esta marca especifica el método de CORS que se va a probar. Utiliza la marca --request OPTIONS para efectuar una verificación preliminar de la solicitud.
Nota: Amazon S3 admite los métodos GET, HEAD, PUT, POST y DELETE.
curl -i http://mycorsbucket.s3.amazonaws.com/cors-test.html -H "Access-Control-Request-Method: POST" --request OPTIONS -H "Origin: http://www.example.com" HTTP/1.1 403 Forbidden x-amz-request-id: 190J4Q6222HA2KZ5 x-amz-id-2: 6oEci3qg88OeoLvBGwkN8K9AGdxyVela8ZKxftXMqyWrtZFfiKMrBwpTAeRiOth8amovJMtAAdA= Content-Type: application/xml Transfer-Encoding: chunked Date: Fri, 19 Nov 2021 18:43:38 GMT Server: AmazonS3 <?xml version="1.0" encoding="UTF-8"?> <Error><Code>AccessForbidden</Code><Message>CORSResponse: This CORS request is not allowed. This is usually because the evalution of Origin, request method / Access-Control-Request-Method or Access-Control-Request-Headers are not whitelisted by the resource's CORS spec.</Message><Method>POST</Method><ResourceType>OBJECT</ResourceType><RequestId>190J4Q6222HA2KZ5</RequestId><HostId>6oEci3qg88OeoLvBGwkN8K9AGdxyVela8ZKxftXMqyWrtZFfiKMrBwpTAeRiOth8amovJMtAAdA=</HostId></Error>Nota: Sustituye mycorsbucket por el nombre de tu bucket y sustituye www.example.com por la URL del servidor web desde el que solicitas contenido.
-
Si la solicitud devuelve un error, comprueba que la configuración de CORS se haya aplicado en el bucket. Asegúrate de haber agregado el método necesario a la regla de CORS de tu bucket. Si la configuración de CORS está establecida, verás la opción de editar la configuración de CORS en la sección Permisos del bucket en la consola S3.
aws s3api put-bucket-cors --bucket mycorsbucket --cors-configuration '{"CORSRules" : [{"AllowedHeaders":["Authorization"],"AllowedMethods":["GET","HEAD","POST"],"AllowedOrigins":["http://www.example.com"],"ExposeHeaders":["Access-Control-Allow-Origin"]}]}'Nota: Sustituye mycorsbucket por el nombre de tu bucket y sustituye www.example.com por la URL del servidor web desde el que solicitas contenido.
-
Prueba la regla de CORS actualizada. Si el método funciona según lo previsto, se mostrará la siguiente respuesta:
curl -i http://mycorsbucket.s3.amazonaws.com/index.html -H "Access-Control-Request-Method: POST" -X OPTIONS -H "Origin: http://www.example.com" HTTP/1.1 200 OK x-amz-id-2: Cx4kuM31KPVE19woEPRRYxF+85vEWkLk8+M0p6BIb72T550njMnmLtjqRgYzuxKelR0f+cxhFqI= x-amz-request-id: QBSHV46QK43HGW15 Date: Fri, 19 Nov 2021 18:48:21 GMT Access-Control-Allow-Origin: http://www.example.com Access-Control-Allow-Methods: GET, HEAD, POST Access-Control-Expose-Headers: Access-Control-Allow-Origin Access-Control-Allow-Credentials: true Vary: Origin, Access-Control-Request-Headers, Access-Control-Request-Method Server: AmazonS3 Content-Length: 0Nota: Sustituye mycorsbucket por el nombre de tu bucket y sustituye www.example.com por la URL del servidor web desde el que solicitas contenido.
-
Captura toda la solicitud y la respuesta con la herramienta de tu elección.
Cada solicitud que reciba Amazon S3 debe tener una regla de CORS que coincida con los datos de tu solicitud. Comprueba que tu solicitud incluye lo siguiente:
- Comprueba que la solicitud tenga el encabezado Origin. Si falta el encabezado, Amazon S3 no trata la solicitud como una solicitud entre orígenes y no envía encabezados de respuesta de CORS en la respuesta.
- Verifica que el encabezado Origin de tu solicitud coincida con al menos uno de los elementos AllowedOrigins de la regla CORSRule especificada. Los valores de esquema, host y puerto del encabezado de la solicitud Origin deben coincidir con los elementos AllowedOrigins de la regla CORSRule. Por ejemplo, supongamos que configuras la regla CORSRule para permitir el origen http://www.example.com. Al hacerlo, los orígenes https://www.example.com y http://www.example.com:80 de tu solicitud no coinciden con el origen permitido en tu configuración.
- Comprueba que el método de tu solicitud o solicitud preliminar que especificaste en Access-Control-Request-Method sea uno de los elementos AllowedMethods de la misma regla CORSRule.
- Si una solicitud preliminar incluye un encabezado Access-Control-Request-Headers, comprueba que la regla CORSRule incluye las entradas AllowedHeader para cada valor del encabezado Access-Control-Request-Headers.
Información relacionada
Incorporación o eliminación de encabezados HTTP en las respuestas de CloudFront con una política
¿Cómo evalúa Amazon S3 la configuración de CORS en un bucket?
- Temas
- Storage
- Etiquetas
- Amazon Simple Storage Service
- Idioma
- Español
Vídeos relacionados


Contenido relevante
preguntada hace un año
preguntada hace 2 años
OFICIAL DE AWSActualizada hace 2 años