¿Cómo puedo configurar CORS en Amazon S3 y confirmar las reglas de CORS mediante cURL?
Quiero permitir el acceso entre orígenes a los recursos de mi bucket de Amazon Simple Storage Service (Amazon S3), pero aparece un error.
Resolución
Puede aplicar reglas de uso compartido de recursos entre orígenes (CORS) a su bucket mediante la consola de Amazon S3 o la Interfaz de la línea de comandos de AWS (AWS CLI). Para probar las reglas de CORS en su bucket de Amazon S3, utilice el comando cURL. 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 hace una solicitud entre orígenes a un bucket de Amazon S3 que no esté definido por una regla CORS, no se devolverá el encabezado de CORS.
Por ejemplo:
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
Si un servidor web hizo una solicitud similar a un sitio web, el contenido que se recupere de su bucket no se mostrará en su navegador. Para permitir que se muestre su contenido, configure una política de CORS en su bucket de Amazon S3. Configurar correctamente la política de CORS garantiza que se devuelvan los encabezados adecuados. Puede 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 mediante la consola de Amazon S3
Para configurar una regla de CORS en su bucket mediante la consola de Amazon S3, lleve a cabo los siguientes pasos:
1. Inicie sesión en la Consola de administración de AWS.
2. Abra la consola de Amazon S3.
3. Seleccione su bucket.
4. Elija la pestaña Permisos.
5. En el panel Uso compartido de recursos entre orígenes, seleccione Editar.
6. En el cuadro de texto, introduzca la regla de CORS JSON que quiera activar:
Example: [ { "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, consulte Configuración de CORS.
7. Seleccione Guardar.
Configuración de una regla de CORS mediante la AWS CLI
Para configurar una regla de CORS en su bucket mediante la AWS CLI, ejecute 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: Si se muestran errores al ejecutar comandos de AWS CLI, compruebe si está utilizando la versión más reciente de AWS CLI.
Cómo probar la regla de CORS
Para probar la regla de CORS, utilice 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
Si la regla de CORS está configurada correctamente, se mostrará una respuesta 200 OK.
Solución de problemas de los métodos de CORS
Si encuentra un comportamiento inesperado al acceder a los buckets con la configuración de CORS, pruebe lo siguiente:
1. Utilice 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. Utilice 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>
2. Si la solicitud devuelve un error, compruebe que la configuración de CORS se haya aplicado en el bucket. Asegúrese de haber agregado el método necesario a la regla de CORS de su bucket. Si la configuración de CORS está establecida, verá 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"]}]}'
3. Pruebe 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: 0
4. Capture toda la solicitud y la respuesta con la herramienta de su elección. Para cada solicitud que reciba Amazon S3, debe tener una regla de CORS que coincida con los datos de su solicitud.
- Compruebe 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.
- Verifique que el encabezado Origin de su 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 configura 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 su solicitud no coinciden con el origen permitido en su configuración.
- Compruebe que el método de su solicitud o solicitud preliminar (el método que se especifica 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, compruebe que la regla CORSRule incluya las entradas AllowedHeader para cada valor del encabezado Access-Control-Request-Headers.
Información relacionada
Añadido 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?
Vídeos relacionados
Contenido relevante
- OFICIAL DE AWSActualizada hace 4 meses
- OFICIAL DE AWSActualizada hace un año
- OFICIAL DE AWSActualizada hace un año