Verwenden signierter Cookies - Amazon CloudFront

Verwenden signierter Cookies

Mit CloudFront-signierten Cookies können Sie kontrollieren, wer auf Ihre Inhalte zugreifen kann, wenn Sie Ihre aktuellen URLs nicht ändern möchten oder wenn Sie Zugriff auf mehrere beschränkte Dateien bereitstellen möchten, beispielsweise auf alle Dateien im Bereich des Abonnenten einer Website. In diesem Thema werden die Überlegungen bei der Verwendung von signierten Cookies erläutert und es wird beschrieben, wie signierte Cookies mithilfe von vordefinierten und benutzerdefinierten Richtlinien eingerichtet werden.

Auswählen zwischen vordefinierten und benutzerdefinierten Richtlinien für signierte Cookies

Wenn Sie ein signiertes Cookie erstellen, schreiben Sie eine Richtlinienanweisung im JSON-Format, welche die Einschränkungen für das signierte Cookie festlegt, z. B. wie lange das Cookie gültig ist. Sie können vordefinierte oder benutzerdefinierte Richtlinien verwenden. In der folgenden Tabelle werden vordefinierte und benutzerdefinierte Richtlinien verglichen:

Beschreibung Vordefinierte Richtlinie Benutzerdefinierte Richtlinie

Sie können die Richtlinienanweisung für mehrere Dateien wiederverwenden. Um die Richtlinienanweisung wiederzuverwenden, müssen Sie Platzhalterzeichen im Resource-Objekt verwenden. Weitere Informationen finden Sie unter Werte, die Sie in der Richtlinienanweisung für eine benutzerdefinierte Richtlinie für signierte Cookies angeben.)

Nein

Ja

Sie können das Datum und die Zeit festlegen, ab denen Benutzer auf Ihre Inhalte zugreifen können.

Nein

Ja (optional)

Sie können das Datum und die Zeit festlegen, ab denen Benutzer nicht mehr auf Ihre Inhalte zugreifen können.

Ja

Ja

Sie können die IP-Adresse oder den Bereich von IP-Adressen der Benutzer festlegen, die auf Ihre Inhalte zugreifen können.

Nein

Ja (optional)

Informationen zum Erstellen von signierten Cookies mit einer vordefinierten Richtlinie finden Sie unter Einrichten signierter Cookies mit einer vordefinierten Richtlinie.

Informationen zum Erstellen von signierten Cookies mit einer benutzerdefinierten Richtlinie finden Sie unter Einrichten signierter Cookies mit einer benutzerdefinierten Richtlinie.

Funktionsweise von signierten Cookies

Im Folgenden finden Sie einen Überblick darüber, wie Sie CloudFront für signierte Cookies konfigurieren und wie CloudFront antwortet, wenn ein Benutzer eine Anforderung übermittelt, die ein signiertes Cookies enthält.

  1. Geben Sie in Ihrer CloudFront-Verteilung eine oder mehrere vertrauenswürdige Schlüsselgruppen an, die die öffentlichen Schlüssel enthalten, mit denen CloudFront die URL-Signatur überprüfen kann. Sie verwenden die entsprechenden privaten Schlüssel, um die URLs zu signieren.

    Weitere Informationen finden Sie unter Festlegen der Aussteller, die signierte URLs und signierte Cookies erstellen können.

  2. Sie entwickeln Ihre Anwendung so, dass ermittelt wird, ob ein Benutzer über Zugriff auf Ihre Inhalte verfügen sollte, und wenn dies der Fall ist, drei Set-Cookie-Header an den Viewer zu senden. (Jeder Set-Cookie-Header kann nur ein Name-Wert-Paar enthalten und ein CloudFront-signiertes Cookie erfordert drei Name-Wert-Paare.) Sie müssen die Set-Cookie-Header an den Viewer senden, bevor der Viewer Ihre privaten Inhalte anfragt. Wenn Sie eine kurze Ablaufzeit für das Cookie angeben, möchten Sie vielleicht auch drei weitere Set-Cookie-Header als Reaktion auf folgende Anfragen senden, sodass der Benutzer weiterhin Zugriff hat.

    In der Regel weist Ihre CloudFront-Verteilung mindestens zwei Cache-Verhalten auf: eines, das keine Authentifizierung erfordert, und eines, das eine Authentifizierung erfordert. Die Fehlerseite für den sicheren Teil der Website enthält eine Weiterleitung oder einen Link zu einer Anmeldeseite.

    Wenn Sie Ihre Verteilung so konfigurieren, dass Dateien auf der Grundlage von Cookies zwischengespeichert werden, speichert CloudFront keine separaten Objekte auf der Grundlage der Attribute in signierten Cookies zwischen.

  3. Ein Benutzer meldet sich auf Ihrer Website an und bezahlt entweder für Inhalte oder erfüllt andere Anforderungen für den Zugriff.

  4. Ihre Anwendung gibt die Set-Cookie-Header in der Antwort zurück und der Viewer speichert die Name-Wert-Paare.

  5. Der Benutzer fordert eine Datei an.

    Der Browser des Benutzers oder ein anderer Viewer ruft die Name-Wert-Paare aus Schritt 4 ab und fügt sie zu der Anfrage in einem Cookie-Header hinzu. Dies ist das signierte Cookie.

  6. CloudFront verwendet den öffentlichen Schlüssel, um die Signatur im signierten Cookie zu validieren und zu bestätigen, dass das Cookie nicht manipuliert wurde. Wenn die Signatur ungültig ist, wird die Anfrage abgelehnt.

    Wenn die Signatur im Cookie gültig ist, überprüft CloudFront die Richtlinienanweisung im Cookie (oder erstellt eine, wenn Sie eine vordefinierte Richtlinie verwenden), um zu bestätigen, dass die Anforderung noch gültig ist. Wenn Sie beispielsweise ein Anfangs- und Enddatum sowie eine Anfangs- und Endzeit für das Cookie angegeben haben, bestätigt CloudFront, dass Benutzer während des zulässigen Zeitraums auf Ihre Inhalte zugreifen möchten.

    Wenn die Anforderung die Voraussetzungen in der Richtlinienanweisung erfüllt, stellt CloudFront Ihre Inhalte genauso wie Inhalte bereit, die nicht beschränkt sind: CloudFront bestimmt, ob sich die Datei bereits im Edge-Cache befindet, leitet die Anforderung nötigenfalls an den Ursprung weiter und gibt die Datei wird an den Benutzer zurück.

Wenn Sie den Domain-Parameter in einem Set-Cookie-Header angeben, geben Sie einen möglichst genauen Wert ein, um das Potenzial für den Zugriff durch einen Benutzer mit demselben Stammdomänennamen zu verringern. Beispielsweise ist app.example.com gegenüber example.com vorzuziehen – insbesondere, wenn Sie example.com nicht kontrollieren. Dadurch können Sie verhindern, dass ein Benutzer von www.example.com aus auf Ihre Inhalte zugreift.

Gehen Sie wie folgt vor, um diese Art von Angriff zu verhindern:

  • Schließen Sie die Cookie-Attribute Expires und Max-Age aus, damit der Set-Cookie-Header ein Sitzungs-Cookie erstellt. Sitzungs-Cookies werden automatisch gelöscht, wenn der Benutzer den Browser schließt. Dies verringert das Risiko, dass ein Benutzer unbefugten Zugriff auf Ihre Inhalte erhält.

  • Fügen Sie das Attribut Secure ein, damit das Cookie verschlüsselt wird, wenn ein Viewer es in eine Anfrage einfügt.

  • Verwenden Sie wenn möglich eine benutzerdefinierte Richtlinie und fügen Sie die IP-Adresse des Viewers ein.

  • Geben Sie auf der Grundlage davon, wie lange Sie Benutzern Zugriff auf Ihre Inhalte gewähren möchten, im Attribut CloudFront-Expires eine möglichst kurze, vernünftige Ablaufzeit an.

Um zu ermitteln, ob ein signiertes Cookie noch gültig ist, überprüft CloudFront das Ablaufdatum und die Ablaufzeit im Cookie zum Zeitpunkt der HTTP-Anforderung. Wenn ein Client unmittelbar vor der Ablaufzeit mit dem Download einer großen Datei beginnt, sollte der Download abgeschlossen werden, auch wenn die Ablaufzeit während des Downloads überschritten wird. Wenn die TCP-Verbindung getrennt wird und der Client nach Überschreitung der Ablaufzeit versucht, den Download erneut zu starten, schlägt der Download fehl.

Wenn ein Client Bereichs-GETs verwendet, um eine Datei in kleineren Teilen abzurufen, schlagen alle GET-Anfragen nach Überschreitung der Ablaufzeit fehl. Weitere Informationen zu Bereichs-GETs finden Sie unter In diesem Abschnitt wird beschrieben, wie CloudFront-Teilanfragen für ein Objekt (Bereichs-GETs) verarbeitet.

Beispiel-Code und Drittanbieter-Tools

Der Beispiel-Code für private Inhalte zeigt nur die Erstellung der Signatur für signierte URLs. Das Erstellen einer Signatur für ein signiertes Cookie ist jedoch sehr ähnlich, deshalb ist ein Großteil des Beispiel-Codes auch hier von Bedeutung. Weitere Informationen finden Sie unter den folgenden Themen: