Direkt zum Inhalt

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

Lesedauer: 6 Minute
0

Ich möchte Cross-Origin Resource Sharing (CORS) in meinem Amazon Simple Storage Service (Amazon S3)-Bucket zulassen, erhalte aber eine Fehlermeldung.

Behebung

Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.

Du kannst Cross-Origin Resource Sharing (CORS)-Regeln auf deinen Bucket anwenden, indem du entweder die Amazon-S3-Konsole oder das AWS Command Line Interface (AWS CLI) verwendest.CORS ist eine Funktion von HTTP, die Header verwendet, um es Browsern zu ermöglichen, Inhalte anzuzeigen, die ein Webserver von einer anderen Quelle anfordert. Wenn du eine Cross-Origin-Anfrage an einen Amazon S3-Bucket stellst, den du nicht mit einer CORS-Regel konfiguriert hast, gibt der Webserver den CORS-Header nicht zurück. Verwende den folgenden cURL-Befehl, um die CORS-Regeln in deinem Amazon S3-Bucket zu testen:

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

Hinweis: Ersetze mycorsbucket durch den Namen deines Buckets und ersetze www.example.com durch die URL des Webservers, von dem du Inhalte anforderst.

Wenn ein Webserver eine ähnliche Anfrage an die ursprüngliche Website stellt, werden die aus deinem Bucket abgerufenen Inhalte nicht im Browser angezeigt. Damit deine Inhalte angezeigt werden, konfiguriere eine CORS-Richtlinie in deinem Amazon-S3-Bucket. Konfiguriere deine CORS-Richtlinie so, dass die entsprechenden Header zurückgegeben werden. Du kannst eine CORS-Regel für deinen Bucket mit der Amazon S3-Konsole oder der AWS-CLI konfigurieren.

CORS-Regel mit der Amazon S3-Konsole konfigurieren

Gehe wie folgt vor, um eine CORS-Regel in deinem Bucket mit der Amazon S3-Konsole zu konfigurieren:

  1. Öffne dieAmazon-S3-Konsole.

  2. Wähle den Bucket aus.

  3. Wähle die Registerkarte Berechtigungen aus.

  4. Wähle im Bereich Quellübergreifende gemeinsame Nutzung von Ressourcen die Option Bearbeiten aus.

  5. Gib in das Textfeld die JSON-CORS-Regel ein, die du aktivieren möchtest, wie im folgenden Beispiel:

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

    Weitere Informationen zu den einzelnen CORS-Regelelementen oder Beispielregeln findest du unter Elemente einer CORS-Konfiguration.

    Hinweis: Ersetze www.example.com durch die URL des Webservers, von dem du Inhalte anforderst.

  6. Wähle Speichern aus.

CORS-Regel mit der AWS CLI konfigurieren

Um eine CORS-Regel für deinen Bucket mit der AWS CLI zu konfigurieren, führe den folgenden Befehl aus:

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: Ersetze mycorsbucket durch den Namen deines Buckets und ersetze www.example.com durch die URL des Webservers, von dem du Inhalte anforderst.

CORS-Regel testen

Um die CORS-Regel zu testen, verwende 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

Hinweis: Ersetze mycorsbucket durch den Namen deines Buckets und ersetze www.example.com durch die URL des Webservers, von dem du Inhalte anforderst.

Wenn du die CORS-Regel korrekt konfiguriert hast, erhältst du eine 200 OK-Antwort.

Problembehandlung bei CORS-Methoden

Wenn du beim Zugriff auf Buckets mit CORS auf unerwartetes Verhalten stößt, versuche Folgendes:

  1. Verwende den cURL-Befehl, um Anfragen mit bestimmten CORS-Methoden zu stellen, indem du das Flag -H „Access-Control-Request-Method: <Method>“ hinzufügst. Dieses Flag gibt die zu testende CORS-Methode an. Verwende das Flag „--request OPTIONS“, um eine Preflight-Prüfung der Anfrage 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>

    Hinweis: Ersetze mycorsbucket durch den Namen deines Buckets und ersetze www.example.com durch die URL des Webservers, von dem du Inhalte anforderst.

  2. Wenn die Anforderung einen Fehler zurückgibt, überprüfe, ob die CORS-Konfiguration für den Bucket festgelegt ist. Stelle sicher, dass du die erforderliche Methode zur CORS-Regel in deinem Bucket hinzugefügt hast. Wenn die CORS-Konfiguration festgelegt ist, wird dir im Abschnitt Berechtigungen für den Bucket in der S3-Konsole die Option zum Bearbeiten der CORS-Konfiguration angezeigt.

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

    Hinweis: Ersetze mycorsbucket durch den Namen deines Buckets und ersetze www.example.com durch die URL des Webservers, von dem du Inhalte anforderst.

  3. Teste die aktualisierte CORS-Regel. Wenn eine Methode wie erwartet funktioniert, erhältst du die 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

    Hinweis: Ersetze mycorsbucket durch den Namen deines Buckets und ersetze www.example.com durch die URL des Webservers, von dem du Inhalte anforderst.

  4. Erfasse die vollständige Anfrage und Antwort mit einem Tool deiner Wahl.

Für jede Anfrage, die Amazon S3 empfängt, benötigst du eine CORS-Regel, die den Daten in deiner Anfrage entspricht. Vergewissere dich, dass deine Anfrage Folgendes beinhaltet:

  • Stelle sicher, dass die Anfrage den Ursprungs-Header enthält. Wenn der Header fehlt, behandelt Amazon S3 die Anfrage nicht als ursprungsübergreifende Anfrage und sendet in der Antwort keine CORS-Antwort-Header.
  • Stelle sicher, dass der Origin-Header in deiner Anfrage mit mindestens einem der AllowedOrigins-Elemente in der angegebenen CORSRule übereinstimmt. Die Schema-, Host- und Portwerte im Ursprungs-Anforderungs-Header müssen mit den AllowedOrigins-Elementen in der CORSRule übereinstimmen. Angenommen, du legst die CORSRule so fest, dass sie den Ursprung http://www.example.com zulässt. Wenn du dies tust, stimmen die Ursprünge von https://www.example.com und http://www.example.com:80 in deiner Anfrage nicht mit dem zulässigen Ursprung in deiner Konfiguration überein.
  • Stelle sicher, dass die Methode in deiner Anfrage oder Preflight-Anfrage, die du in Access-Control-Request-Method angegeben hast, eines der AllowedMethods-Elemente in derselben CORSRule ist.
  • Wenn eine Preflight-Anfrage einen Access-Control-Request-Headers-Header enthält, stelle sicher, dass die CORSRule die AllowedHeader-Einträge für jeden Wert im Access-Control-Request-Headers-Header enthält.

Ähnliche Informationen

HTTP-Header in CloudFront-Antworten mit einer Richtlinie hinzufügen oder entfernen

Wie behebe ich den Fehler „No 'Access-Control-Allow-Origin' header is present on the requested resource“ in CloudFront?

Wie bewertet Amazon S3 die CORS-Konfiguration in einem Bucket?

Problembehandlung bei CORS