Come posso configurare CORS in Amazon S3 e confermare le regole CORS utilizzando cURL?
Desidero consentire l'accesso multiorigine alle risorse nel bucket Amazon Simple Storage Service (Amazon S3), ma ricevo un errore.
Soluzione
Puoi applicare le regole di condivisione delle risorse multiorigine (CORS) al bucket utilizzando la console Amazon S3 o l'interfaccia della linea di comando AWS (AWS CLI). Per testare le regole CORS sul bucket Amazon S3, usa il comando cURL. CORS è una funzionalità di HTTP che utilizza le intestazioni per consentire ai browser di visualizzare da un’origine diversa il contenuto richiesto da un server Web. Se effettui una richiesta multiorigine a un bucket Amazon S3 che non è definito da una regola CORS, l'intestazione CORS non viene restituita.
Ad esempio:
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
Se un server Web ha effettuato una richiesta simile a un sito Web, il contenuto recuperato dal bucket non verrà visualizzato nel browser. Per consentire la visualizzazione dei tuoi contenuti, configura una policy CORS sul bucket Amazon S3. La corretta configurazione della policy CORS assicura che vengano restituite le intestazioni appropriate. Puoi configurare una regola CORS sul bucket utilizzando la console Amazon S3 o AWS CLI.
Configurazione di una regola CORS utilizzando la console Amazon S3
Per configurare una regola CORS sul bucket utilizzando la console Amazon S3, procedi come segue:
1. Accedi alla Console di gestione AWS.
2. Apri la console di Amazon S3.
3. Seleziona il bucket.
4. Scegli la scheda Autorizzazioni.
5. Nel riquadro Condivisione delle risorse multiorigine, scegli Modifica.
6. Nella casella di testo, inserisci la regola JSON CORS che desideri attivare:
Example: [ { "AllowedHeaders": [ "Authorization" ], "AllowedMethods": [ "GET", "HEAD" ], "AllowedOrigins": [ "http://www.example.com" ], "ExposeHeaders": [ "Access-Control-Allow-Origin" ] } ]
Per ulteriori informazioni su ciascuno degli elementi delle regole CORS o regole di esempio, consulta CORS configuration.
7. Scegli Salva.
Configurazione di una regola CORS utilizzando AWS CLI
Per configurare una regola CORS sul bucket utilizzando AWS CLI, esegui il seguente 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: se ricevi errori durante l'esecuzione dei comandi dell'interfaccia della linea di comando (AWS CLI), assicurati di utilizzare la versione più recente di AWS CLI.
Verifica della regola CORS
Per testare la regola CORS, utilizza il comando cURL, in questo modo:
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
Se la regola CORS è configurata correttamente, riceverai una risposta 200 OK.
Risoluzione dei problemi relativi ai metodi CORS
Se riscontri un comportamento imprevisto durante l'accesso ai bucket con la configurazione CORS, prova quanto segue:
1. Usa il comando cURL per effettuare richieste utilizzando metodi CORS specifici aggiungendo il flag -H "Access-Control-Request-Method: <Method>[Metodo]". Questo flag specifica il metodo CORS da testare. Usa il flag --request OPTIONS per eseguire un controllo preflight della richiesta.
Nota: Amazon S3 supporta i metodi GET, HEAD, PUT, POST e 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. Se la richiesta restituisce un errore, verifica che la configurazione CORS sia impostata nel bucket. Assicurati di avere aggiunto il metodo richiesto alla regola CORS sul bucket. Se la configurazione CORS è impostata, nella sezione Autorizzazioni del bucket nella console S3 verrà visualizzata l'opzione per modificare la configurazione CORS.
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. Verifica la regola CORS aggiornata. Se il metodo funziona come previsto, riceverai la seguente risposta:
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. Acquisisci la richiesta e la risposta complete utilizzando uno strumento a tua scelta. Per ogni richiesta ricevuta da Amazon S3, è necessario disporre di una regola CORS che corrisponda ai dati contenuti nella richiesta.
- Verifica che la richiesta abbia l'intestazione Origin. Se manca l'intestazione, Amazon S3 non considera la richiesta come una richiesta multiorigine e non invia intestazioni di risposta CORS nella risposta.
- Verifica che l'intestazione Origin nella richiesta corrisponda ad almeno uno degli elementi AllowedOrigins nella CORSRule specificata. I valori di schema, host e porta nell'intestazione della richiesta Origin devono corrispondere agli elementi AllowedOrigins in CORSRule. Ad esempio, supponiamo di impostare CORSRule per consentire l'origine http://www.example.com. Quando si esegue questa operazione, le origini https://www.example.com e http://www.example.com:80 nella richiesta non corrispondono all'origine consentita nella configurazione.
- Verifica che il metodo nella tua richiesta o richiesta preflight (metodo specificato in Access-Control-Request-Method) sia uno degli elementi AllowedMethods nella stessa CORSRule.
- Se una richiesta preflight include un'intestazione Access-Control-Request-Headers, verifica che CORSRule includa le voci AllowedHeader per ogni valore nell'intestazione Access-Control-Request-Headers.
Informazioni correlate
Adding HTTP headers to Amazon CloudFront responses
How does Amazon S3 evaluate the CORS configuration on a bucket?
Video correlati
Contenuto pertinente
- AWS UFFICIALEAggiornata 4 mesi fa
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata 3 anni fa