¿Cómo configuro CORS en Amazon S3 y confirmo las reglas de CORS mediante cURL?

5 minutos de lectura
0

Quiero permitir el acceso entre orígenes a los recursos de mi bucket de Amazon Simple Storage Service (Amazon S3), pero aparece un error. ¿Cómo soluciono este problema?

Descripción corta

Puede aplicar reglas de Cross-Origin Resource Sharing (CORS, uso compartido de recursos entre orígenes) al bucket mediante la consola de Amazon S3 o AWS Command Line Interface (AWS CLI). Para probar las reglas de CORS en el bucket de Amazon S3, utilice el comando cURL.

Resolución

CORS es una característica de HTTP que utiliza encabezados para permitir que los navegadores muestren el contenido que un servidor web solicitó desde un origen diferente. Si hace una solicitud de origen cruzado a un bucket de Amazon S3 que no esté definido por una regla de CORS, no se devuelve el encabezado 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 recuperado del bucket no aparecerá en el navegador. Para permitir que aparezca el contenido, configure una política de CORS en el bucket de Amazon S3. La configuración adecuada de la política de CORS asegura que se devuelvan los encabezados apropiados. Puede configurar una regla de CORS en el bucket mediante la consola de Amazon S3 o AWS CLI.

Configuración de una regla de CORS mediante la consola de Amazon S3

Para configurar una regla de CORS en el bucket mediante la consola de Amazon S3, siga los siguientes pasos:

1.    Inicie sesión en la consola de administración de AWS.

2.    Abra la consola de Amazon S3.

3.    Seleccione el bucket.

4.    Haga clic en la pestaña Permissions (Permisos).

5.    En el panel Cross-origin resource sharing (Uso compartido de recursos entre orígenes), elija Edit (Editar).

6.    En el cuadro de texto, ingrese la regla de CORS de 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 las reglas de ejemplo, consulte Configuración de CORS.

7.    Elija Save (Guardar).

Configuración de una regla de CORS mediante AWS CLI

Para configurar una regla de CORS en el bucket mediante AWS CLI, ejecute los siguientes comandos:

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 recibe errores al ejecutar comandos de AWS CLI, asegúrese de que utiliza la versión más reciente de AWS CLI.

Prueba de 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, recibirá una respuesta 200 OK.

Solución de problemas de los métodos de CORS

También puede usar el comando cURL para hacer solicitudes mediante métodos de CORS específicos al agregar 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 hacer una comprobación preparatoria 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>

Si la solicitud devuelve un error, agregue el método requerido a la regla de CORS en el bucket:

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"]}]}'

Pruebe la regla de CORS actualizada. Si el método funciona según lo esperado, recibirá 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

Información relacionada

Agregar encabezados HTTP a las respuestas de Amazon CloudFront

¿Cómo soluciono el error “No 'Access-Control-Allow-Origin' header is present on the requested resource” de CloudFront?

¿Cómo evalúa Amazon S3 la configuración de CORS en un bucket?

Solución de problemas de CORS

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años