Wie konfiguriere ich CORS in Amazon S3 und bestätige die CORS-Regeln mit cURL?

Letzte Aktualisierung: 17.08.2022

Ich möchte den herkunftsübergreifenden Zugriff auf Ressourcen in meinem Amazon Simple Storage Service (Amazon S3)-Bucket erlauben, aber ich erhalte einen Fehler. Wie kann ich dieses Problem beheben?

Kurzbeschreibung

Sie können Cross-Origin Resource Sharing (CORS)-Regeln über die Amazon-S3-Konsole oder das AWS Command Line Interface (AWS CLI) auf Ihren Bucket anwenden. Um die CORS-Regeln auf Ihrem Amazon-S3-Bucket zu testen, verwenden Sie den cURL-Befehl.

Auflösung

CORS ist eine Funktion von HTTP, die Header verwendet, damit Browser Inhalte anzeigen können, die ein Webserver von einem anderen Ursprung angefordert hat. Wenn Sie eine herkunftsübergreifende Anfrage an einen Amazon-S3-Bucket stellen, der nicht durch eine CORS-Regel definiert ist, wird der CORS-Header nicht zurückgegeben.

Beispiel:

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

Wenn ein Webserver eine ähnliche Anfrage an eine Website gestellt hat, wird der aus Ihrem Bucket abgerufene Inhalt nicht in Ihrem Browser angezeigt. Konfigurieren Sie eine CORS-Richtlinie für Ihren Amazon-S3-Bucket, damit Ihre Inhalte angezeigt werden. Durch die richtige Konfiguration der CORS-Richtlinie wird sichergestellt, dass die entsprechenden Header zurückgegeben werden. Sie können eine CORS-Regel in Ihrem Bucket mithilfe der Amazon-S3-Konsole oder der AWS CLI konfigurieren.

Konfigurieren einer CORS-Regel mit der Amazon-S3-Konsole

Führen Sie die folgenden Schritte aus, um eine CORS-Regel auf Ihrem Bucket mithilfe der Amazon-S3-Konsole zu konfigurieren:

1.    Melden Sie sich bei der AWS-Managementkonsole an.

2.    Öffnen Sie die Amazon-S3-Konsole.

3.    Wählen Sie Ihren Bucket aus.

4.    Wählen Sie die Registerkarte Berechtigungen.

5.    Wählen Sie im Bereich Cross-origin resource sharing (herkunftsübergreifende Ressourcenfreigabe) die Option Edit (Bearbeiten).

6.    Geben Sie in das Textfeld die JSON-CORS-Regel ein, die Sie aktivieren möchten:

Example:

[
  {
    "AllowedHeaders": [
      "Authorization"
    ],
    "AllowedMethods": [
      "GET",
      "HEAD"
    ],
    "AllowedOrigins": [
      "http://www.example.com"
    ],
    "ExposeHeaders": [
      "Access-Control-Allow-Origin"
    ]
  }
]

Weitere Informationen zu den einzelnen CORS-Regelelementen oder Beispielregeln finden Sie unter CORS-Konfiguration.

7.    Wählen Sie Save (Speichern) aus.

Konfigurieren einer CORS-Regel mit der AWS CLI

Führen Sie den folgenden Befehl aus, um eine CORS-Regel auf Ihrem Bucket mithilfe der AWS CLI zu konfigurieren:

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

Hinweis: Wenn Sie beim Ausführen von AWS-CLI-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die neueste Version der AWS CLI verwenden.

Testen der CORS-Regel

Um die CORS-Regel zu testen, verwenden Sie den cURL-Befehl wie folgt:

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

Wenn die CORS-Regel korrekt konfiguriert ist, erhalten Sie eine Antwort von 200 OK.

Fehlerbehebung bei CORS-Methoden

Sie können den Befehl cURL auch verwenden, um Anfragen mit bestimmten CORS-Methoden zu stellen, indem Sie das Flag -H "Access-Control-Request-Method: <Method>" hinzufügen. Dieses Flag gibt die zu testende CORS-Methode an. Verwenden Sie das Flag --request OPTIONS, um eine Preflight-Prüfung der Anforderung durchzuführen.

Hinweis: Amazon S3 unterstützt die Methoden GET, HEAD, PUT, POST und 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>

Wenn die Anfrage einen Fehler zurückgibt, fügen Sie die erforderliche Methode zur CORS-Regel in Ihrem Bucket hinzu:

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

Testen Sie die aktualisierte CORS-Regel. Wenn Ihre Methode wie erwartet funktioniert, erhalten Sie folgende Antwort:

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