Zum Inhalt springen

Cross Origin Resource Sharing (CORS)

Zuletzt aktualisiert am

Sie können Cross Origin Resource Sharing (CORS) für einen Bucket konfigurieren, wenn Sie Objekte innerhalb dieses Buckets für eine Webanwendung zugänglich machen möchten, die in einer anderen Domain gehostet wird. CORS ist ein Sicherheitsmechanismus, der es Webanwendungen ermöglicht, die in einer Domain gehostet werden, auf Ressourcen in einer anderen Domain zuzugreifen.

Beispiel: Sie haben einige Bilder in Ihrem Bucket namens „my-example-bucket“ und möchten, dass diese Bilder auf Ihrer Website angezeigt werden, die unter der URL https://exmaple.com gehostet wird.

Damit dies funktioniert, müssen Sie eine CORS-Regel für Ihren Bucket „my-example-bucket“ erstellen, um den Zugriff auf die Bilder durch https://example.com zu erlauben.

Alle unten gezeigten Beispiele wurden mit S3cmd durchgeführt.

Eine CORS-Regel kann entweder als XML oder als JSON definiert werden. Unsere Beispiele zeigen eine Konfiguration, die mit einer XML-Datei und S3cmd als Client erstellt wurde.

Die CORS-Regel besteht normalerweise aus diesen Elementen:

  • ID → Eine ID zur Identifizierung der Regel (da mehr als eine CORS-Regel für einen Bucket festgelegt werden kann).
  • AllowedOrigin → Gibt den Ursprung an, von dem aus Sie den Zugriff erlauben möchten. Sie können auch Wildcards wie ”*” verwenden, um den Zugriff für alle Ursprünge zu erlauben.
  • AllowedMethod → Gibt die Methoden an, die für die Objekte durch den „Origin“ zulässig sind (GET / PUT / DELETE / HEAD).
  • AllowedHeader → Gibt an, welche Header zulässig sind. Sie können auch Wildcards wie ”*” verwenden, um alle Header zuzulassen.
  • ExposeHeader → Gibt den Response-Header an, der an Ihre Anwendung zurückgegeben wird.
  • MaxAgeSeconds → Gibt die Zeitspanne an, für die der Preflight-Request zwischengespeichert werden kann.

Um CORS-Regeln für einen Bucket festzulegen, müssen Sie zunächst eine CORS-Konfigurationsdatei erstellen. Unser Beispiel verwendet das XML-Format und könnte wie folgt aussehen:

<CORSConfiguration>
<CORSRule>
<ID>Allow Bucket for my-app.com</ID>
<AllowedOrigin>https://www.my-app.com</AllowedOrigin>
<AllowedOrigin>http://www.my-app.com</AllowedOrigin>
<AllowedOrigin>https://my-app.com</AllowedOrigin>
<AllowedOrigin>http://my-app.com</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<AllowedHeader>Content-*</AllowedHeader>
<AllowedHeader>Host</AllowedHeader>
<ExposeHeader>ETag</ExposeHeader>
<MaxAgeSeconds>86400</MaxAgeSeconds>
</CORSRule>
</CORSConfiguration>

Anschließend müssen Sie die Konfigurationsdatei mit dem Befehl setcors anwenden. Für den Bucket s3://my-example-bucket sieht der Befehl wie folgt aus:

Terminal-Fenster
$ s3cmd setcors cors-rules.xml s3://my-example-bucket/

Da der Befehl keine Ausgabe liefert, können Sie mit dem Befehl info überprüfen, ob Ihre Regeln korrekt angewendet wurden:

Terminal-Fenster
$ s3cmd info s3://my-example-bucket/
s3://my-example-bucket/ (bucket):
[...]
CORS: <CORSConfiguration>
<CORSRule>
<ID>Allow Bucket for my-app.com</ID>
<AllowedOrigin>https://www.my-app.com</AllowedOrigin>
<AllowedOrigin>http://www.my-app.com</AllowedOrigin>
<AllowedOrigin>https://my-app.com</AllowedOrigin>
<AllowedOrigin>http://my-app.com</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<AllowedHeader>Content-*</AllowedHeader>
<AllowedHeader>Host</AllowedHeader>
<ExposeHeader>ETag</ExposeHeader>
<MaxAgeSeconds>86400</MaxAgeSeconds>
</CORSRule>
</CORSConfiguration>
[...]

Um eine CORS-Regel aus einem Bucket zu löschen, müssen Sie den Befehl delcors verwenden. Für den Bucket s3://my-example-bucket sieht der Befehl wie folgt aus:

Terminal-Fenster
$ s3cmd delcors s3://my-example-bucket
s3://my-example-bucket/: CORS deleted