Cross-Origin Resource Sharing (CORS) - Amazon Simple Storage Service

Sofern wir eine Übersetzung der englischsprachigen Version des Handbuchs bereitstellen, gilt im Fall von Widersprüchen die englischsprachige Version des Handbuchs. Bei der Übersetzung handelt es sich um eine maschinelle Übersetzung.

Cross-Origin Resource Sharing (CORS)

Cross-Origin Resource Sharing (CORS) bestimmt für Client-Webanwendungen, die in einer Domain geladen sind, eine Möglichkeit zur Interaktion mit Ressourcen in einer anderen Domain. Mit CORS-Unterstützung können Sie umfassende clientseitige Webanwendungen mit Amazon S3 erstellen und selektiven ursprungsübergreifenden Zugriff auf Ihre Amazon S3-Ressourcen zulassen.

Dieser Abschnitt bietet eine Übersicht über CORS. Die Unterthemen beschreiben, wie Sie CORS über die Amazon S3-Konsole oder programmgesteuert mit der Amazon S3-REST-API und den AWS-SDKs aktivieren können.

Cross-Origin Resource Sharing: Szenarien in Anwendungsfällen

Es folgen typische Beispielszenarien für den Einsatz von CORS.

Szenario 1

Angenommen, Sie hosten eine Website in einem Amazon S3-Bucket mit dem Namen website, wie in Hosten einer statischen Website auf Amazon S3 beschrieben. Ihre Benutzer laden den Website-Endpunkt:

http://website.s3-website.us-east-1.amazonaws.com

Jetzt können Sie auf den in diesem Bucket gespeicherten Webseiten JavaScript verwenden, um authentifizierte GET- und PUT-Anforderungen für diesen Bucket selbst zu erstellen, indem für den Bucket der Amazon S3-API-Endpunkt website.s3.us-east-1.amazonaws.com verwendet wird. Ein Browser würde normalerweise verhindern, dass JavaScript diese Anfragen erstellt, aber mit CORS können Sie Ihren Bucket konfigurieren, um explizit ursprungsübergreifende Anfragen von website.s3-website.us-east-1.amazonaws.com zu aktivieren.

Szenario 2

Angenommen, Sie möchten eine Web-Schriftart aus Ihrem S3-Bucket hosten. Auch hier erfordern Browser eine CORS-Prüfung (auch als Preflight-Check bezeichnet) für das Laden von Web-Schriftarten. Sie würden den Bucket, der die Web-Schriftart hostet, deshalb so konfigurieren, dass jeder Ursprung diese Anfragen machen kann.

Wie konfiguriere ich CORS für meinen Bucket?

Um Ihren Bucket so zu konfigurieren, dass er ursprungsübergreifende Anfragen zulässt, erstellen Sie eine CORS-Konfiguration. Dabei handelt es sich um ein XML-Dokument mit Regeln, die die Ursprünge identifizieren, die den Zugriff auf Ihren Bucket zulassen, die Operationen (HTTP-Methoden), die die einzelnen Ursprünge unterstützen, sowie weitere operationsspezifische Informationen.

Sie können der Konfiguration bis zu 100 Regeln hinzufügen. Sie fügen das XML-Dokument als cors-Unterressource zum Bucket hinzu – entweder programmgesteuert oder über die Amazon S3-Konsole. Weitere Informationen finden Sie unter Cross-Origin Resource Sharing (CORS) aktivieren.

Statt über einen Amazon S3-Website-Endpunkt auf eine Website zuzugreifen, können Sie Ihre eigene Domäne verwenden, z. B. example1.com, um Ihren Inhalt bereitzustellen. Weitere Informationen zur Verwendung Ihrer eigenen Domäne finden Sie unter Konfigurieren einer statischen Website mithilfe einer benutzerdefinierten, bei registrierten DomäneRoute 53. Die folgende Beispielkonfiguration für cors umfasst drei Regeln, die als CORSRule-Elemente angegeben sind:

  • Die erste Regel gestattet ursprungsübergreifende PUT-, POST- und DELETE-Anfragen vom Ursprung http://www.example1.com. Die Regel gestattet auch alle Header in einer Preflight-OPTIONS-Anfrage durch den Access-Control-Request-Headers-Header. Als Antwort auf Preflight-OPTIONS-Anfragen gibt Amazon S3 angeforderte Header zurück.

  • Die zweite Regel gestattet dieselben ursprungsübergreifenden Anfragen wie die erste Regel, aber sie bezieht sich auf einen anderen Ursprung, http://www.example2.com.

  • Die dritte Regel gestattet ursprungsübergreifende GET-Anfragen von allen Ursprüngen. Das Platzhalterzeichen * bezieht sich auf alle Ursprünge.

<CORSConfiguration> <CORSRule> <AllowedOrigin>http://www.example1.com</AllowedOrigin> <AllowedMethod>PUT</AllowedMethod> <AllowedMethod>POST</AllowedMethod> <AllowedMethod>DELETE</AllowedMethod> <AllowedHeader>*</AllowedHeader> </CORSRule> <CORSRule> <AllowedOrigin>http://www.example2.com</AllowedOrigin> <AllowedMethod>PUT</AllowedMethod> <AllowedMethod>POST</AllowedMethod> <AllowedMethod>DELETE</AllowedMethod> <AllowedHeader>*</AllowedHeader> </CORSRule> <CORSRule> <AllowedOrigin>*</AllowedOrigin> <AllowedMethod>GET</AllowedMethod> </CORSRule> </CORSConfiguration>

Die CORS-Konfiguration unterstützt auch optionale Konfigurationsparameter, wie in der folgenden CORS-Konfiguration gezeigt. In diesem Beispiel gestattet die folgende CORS-Konfiguration ursprungsübergreifende PUT-, POST- und DELETE-Anfragen vom Ursprung http://www.example.com.

<CORSConfiguration> <CORSRule> <AllowedOrigin>http://www.example.com</AllowedOrigin> <AllowedMethod>PUT</AllowedMethod> <AllowedMethod>POST</AllowedMethod> <AllowedMethod>DELETE</AllowedMethod> <AllowedHeader>*</AllowedHeader> <MaxAgeSeconds>3000</MaxAgeSeconds> <ExposeHeader>x-amz-server-side-encryption</ExposeHeader> <ExposeHeader>x-amz-request-id</ExposeHeader> <ExposeHeader>x-amz-id-2</ExposeHeader> </CORSRule> </CORSConfiguration>

Das CORSRule-Element in der obigen Konfiguration beinhaltet die folgenden optionalen Elemente:

  • MaxAgeSeconds – Gibt den Zeitraum in Sekunden an (in diesem Beispiel 3000), über den der Browser eine Amazon S3-Antwort auf eine Preflight-OPTIONS-Anforderung für die angegebene Ressource zwischenspeichert. Durch die Zwischenspeicherung der Antwort muss der Browser keine Preflight-Anfragen an Amazon S3 senden, wenn die ursprüngliche Anfrage wiederholt werden soll.

  • ExposeHeader – Identifiziert die Antwort-Header (in diesem Beispiel x-amz-server-side-encryption, x-amz-request-id und x-amz-id-2), auf die Kunden von ihren Anwendungen aus zugreifen können (z. B. von einem JavaScript-XMLHttpRequest-Objekt aus).

AllowedMethod-Element

In der CORS-Konfiguration können Sie die folgenden Werte für das AllowedMethod-Element angeben.

  • GET

  • PUT

  • POST

  • DELETE

  • HEAD

AllowedOrigin-Element

Im AllowedOrigin-Element geben Sie die Ursprünge an, über die Sie domänenübergreifende Anfragen erlauben möchten, z. B. http://www.example.com. Die Ursprungszeichenfolge darf nur ein *-Platzhalterzeichen enthalten, wie beispielsweise http://*.example.com. Optional können Sie * als Ursprung angeben, sodass alle Ursprünge ursprungsübergreifende Anfragen senden dürfen. Sie können auch https angeben, um nur sichere Ursprünge zuzulassen.

AllowedHeader-Element

Das AllowedHeader-Element gibt an, welche Header in einer Preflight-Anfrage durch den Access-Control-Request-Headers-Header erlaubt sind. Jeder Header-Name im Access-Control-Request-Headers-Header muss mit einem entsprechenden Eintrag in der Regel übereinstimmen. Amazon S3 sendet nur die zulässigen angeforderten Header in einer Antwort. Eine Liste mit Beispielen für Header, die in Anforderungen an Amazon S3 verwendet werden können, finden Sie unter Gängige Anforderungs-Header im Leitfaden Amazon Simple Storage Service API Reference.

Jede AllowedHeader-Zeichenkette in der Regel darf höchstens einmal das Wildcard-Zeichen * enthalten. Beispielsweise aktiviert <AllowedHeader>x-amz-*</AllowedHeader> alle für Amazon spezifischen Header.

ExposeHeader-Element

Jedes ExposeHeader-Element identifiziert die Antwort-Header, auf die Kunden von ihren Anwendungen aus zugreifen können sollen (z. B. von einem JavaScript XMLHttpRequest-Objekt). Eine Liste mit gängigen Amazon S3-Antwort-Headern finden Sie unter Gängige Response-Header im Leitfaden Amazon Simple Storage Service API Reference.

MaxAgeSeconds-Element

Das MaxAgeSeconds-Element gibt die Zeit in Sekunden an, wie lange Ihr Browser die Antwort auf eine Preflight-Anfrage zwischenspeichern kann, wie nach der Ressource, der HTTP-Methode und dem Ursprung identifiziert.

Wie wertet Amazon S3 die CORS-Konfiguration für einen Bucket aus?

Wenn Amazon S3 eine Preflight-Anforderung von einem Browser erhält, wertet es die CORS-Konfiguration für den Bucket aus und verwendet die erste CORSRule-Regel, die mit der eingehenden Browser-Anforderung übereinstimmt, um eine ursprungsübergreifende Anforderung zuzulassen. Für die Übereinstimmung mit einer Regel müssen die folgenden Bedingungen erfüllt sei:

  • Der Origin-Header der Anfrage muss mit einem AllowedOrigin-Element übereinstimmen.

  • Die Anfragemethode (z. B. GET oder PUT) oder der Access-Control-Request-Method-Header bei einer Preflight-OPTIONS-Anfrage muss eines der AllowedMethod-Elemente sein.

  • Jeder im Access-Control-Request-Headers-Header der Preflight-Anfrage muss mit einem AllowedHeader-Element übereinstimmen.

Anmerkung

Alle ACLs und Richtlinien gelten weiterhin, wenn Sie CORS für den Bucket aktivieren.