Wie konfiguriere ich CORS in Amazon S3 und bestätige die CORS-Regeln mit cURL?
Ich möchte den ursprungsübergreifenden Zugriff auf Ressourcen in meinem Amazon Simple Storage Service (Amazon S3)-Bucket zulassen, erhalte aber eine Fehlermeldung.
Behebung
Sie können Cross-Origin Resource Sharing (CORS)-Regeln auf Ihren Bucket anwenden, indem Sie entweder die Amazon-S3-Konsole oder das AWS Command Line Interface (AWS CLI) verwenden. Verwenden Sie den Befehl cURL, um die CORS-Regeln in Ihrem Amazon-S3-Bucket zu testen. CORS ist eine Funktion von HTTP, die Header verwendet, um es Browsern zu ermöglichen, Inhalte anzuzeigen, die ein Webserver von einer anderen Quelle angefordert hat. Wenn Sie eine Cross-Origin-Anfrage an einen Amazon-S3-Bucket stellen, der nicht durch eine CORS-Regel definiert ist, wird der CORS-Header nicht zurückgegeben.
Zum 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, werden die aus Ihrem Bucket abgerufenen Inhalte nicht in Ihrem Browser angezeigt. Damit Ihre Inhalte angezeigt werden, konfigurieren Sie eine CORS-Richtlinie in Ihrem Amazon-S3-Bucket. Durch die richtige Konfiguration der CORS-Richtlinie wird sichergestellt, dass die entsprechenden Header zurückgegeben werden. Sie können eine CORS-Regel für Ihren Bucket mithilfe der Amazon-S3-Konsole oder der AWS CLI konfigurieren.
Konfiguration einer CORS-Regel mithilfe der Amazon-S3-Konsole
Gehen Sie wie folgt vor, um mithilfe der Amazon-S3-Konsole eine CORS-Regel für Ihren Bucket 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. Öffnen Sie die Registerkarte Berechtigungen.
5. Wählen Sie im Bereich Quellübergreifende gemeinsame Nutzung von Ressourcen die Option Bearbeiten aus.
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 Speichern aus.
Konfiguration einer CORS-Regel mit der AWS CLI
Führen Sie den folgenden Befehl aus, um mithilfe der AWS CLI eine CORS-Regel für Ihren Bucket 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 Fehlermeldungen 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 vom Typ 200 OK.
Problembehandlung bei CORS-Methoden
Wenn beim Zugriff auf Buckets mit der CORS-Konfiguration ein unerwartetes Verhalten auftritt, versuchen Sie Folgendes:
1. Verwenden Sie den cURL-Befehl, 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 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>
2. Wenn die Anforderung einen Fehler zurückgibt, überprüfen Sie, ob die CORS-Konfiguration für den Bucket festgelegt ist. Stellen Sie sicher, dass Sie die erforderliche Methode zur CORS-Regel in Ihrem Bucket hinzugefügt haben. Wenn die CORS-Konfiguration festgelegt ist, sehen Sie die Option zum Bearbeiten der CORS-Konfiguration im Abschnitt Berechtigungen für Bucket in der S3-Konsole.
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. Testen Sie die aktualisierte CORS-Regel. Wenn Ihre Methode wie erwartet funktioniert, erhalten Sie 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
4. Erfassen Sie die vollständige Anfrage und Antwort mit einem Tool Ihrer Wahl. Für jede Anfrage, die Amazon S3 empfängt, benötigen Sie eine CORS-Regel, die den Daten in Ihrer Anfrage entspricht.
- Stellen Sie sicher, dass die Anfrage den Origin-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.
- Stellen Sie sicher, dass der Origin-Header in Ihrer Anfrage mit mindestens einem der AllowedOrigins-Elemente in der angegebenen CORSRule übereinstimmt. Die Schema-, Host- und Portwerte im Origin-Anforderungsheader müssen mit den AllowedOrigins-Elementen in der CORSRule übereinstimmen. Angenommen, Sie legen die CORSRule so fest, dass sie den Ursprung http://www.example.com zulässt. Wenn Sie dies tun, stimmen die Ursprünge von https://www.example.com und http://www.example.com:80 in Ihrer Anfrage nicht mit dem zulässigen Ursprung in Ihrer Konfiguration überein.
- Stellen Sie sicher, dass die Methode in Ihrer Anfrage oder Preflight-Anfrage (Methode, die unter Access-Control-Request-Method angegeben ist) eines der AllowedMethods-Elemente in derselben CORSRule ist.
- Wenn eine Preflight-Anfrage einen Header Access-Control-Request-Headers enthält, stellen Sie sicher, dass die CORSRule die AllowedHeader-Einträge für jeden Wert im Header Access-Control-Request-Headers enthält.
Ähnliche Informationen
Hinzufügen von HTTP-Headern zu Amazon-CloudFront-Antworten
Wie bewertet Amazon S3 die CORS-Konfiguration in einem Bucket?

Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 10 Monaten
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 3 Jahren
- Wie erlaube ich Kunden, die TLS 1.2 oder höher nicht verwenden, Zugriff auf meine Amazon S3-Buckets?AWS OFFICIALAktualisiert vor 2 Jahren