Wie behebe ich Probleme im Zusammenhang mit einer signierten URL oder signierten Cookies in CloudFront?

Letzte Aktualisierung: 02.06.2022

Ich sichere private Inhalte mithilfe von Amazon CloudFront und einer signierten URL oder signierten Cookies. Ich erhalte den 403-Fehler „Zugriff verweigert“. Wie kann ich dieses Problem beheben?

Kurzbeschreibung

Amazon CloudFront kann einen 403-Fehler „Zugriff verweigert“ zurückgeben, wenn ein Problem mit einer signierten URL oder signierten Cookies vorliegt. Die Ursachen für diesen Fehler und die Schritte zur Fehlerbehebung finden Sie in den folgenden Abschnitten zur Problemlösung.

Auflösung

Wenn Sie Viewer-Zugriff einschränken in einem Verhalten aktivieren, müssen Sie einen Signaturgeber festlegen. Ein Signaturgeber ist entweder eine vertrauenswürdige Schlüsselgruppe, die Sie in CloudFront erstellen, oder ein AWS-Konto, das ein CloudFront-Schlüsselpaar enthält. Die folgenden 403-Fehlermeldungen weisen darauf hin, dass die Informationen zum Signaturgeber fehlen oder falsch sind:

403-Fehler „Zugriff verweigert“ mit der Meldung „Fehlender Abfrageparameter der Schlüsselpaar-ID oder Cookie-Wert.“

Diese Meldung weist darauf hin, dass der Abfrageparameter der Schlüsslpaar-ID in einer signierten URL fehlt oder leer ist.

403-Fehler „Zugriff verweigert“ mit der Meldung „Fehlender Abfrageparameter der Schlüsselpaar-ID oder Cookie-Wert.“

Diese Meldung zeigt an, dass der Abfrageparameter der CloudFront-Schlüsslpaar-ID im signierten Cookie fehlt oder leer ist.

403-Fehler „Zugriff verweigert“ mit der Meldung „Unbekannter Schlüssel.“

Diese Meldung weist darauf hin, dass CloudFront die Informationen des Signaturgebers nicht über Schlüsselpaar-ID (für signierte URLs) oder CloudFront-Schlüsselpaar-ID (für signierte Cookies) überprüfen kann. Um dieses Problem zu beheben, stellen Sie sicher, dass der richtige Wert von Schlüsselpaar-ID für eine signierte URL oder CloudFront-Schlüsselpaar-ID für signierte Cookies verwendet wird. Erstens:

Wenn Sie eine signierte URL verwenden, suchen und notieren Sie sich den Wert der Schlüsselpaar-ID.
-oder-
Wenn Sie signierte Cookies verwenden, suchen und notieren Sie sich den Wert der CloudFront-Schlüsselpaar-ID.

Suchen Sie dann die Schlüssel-ID und vergewissern Sie sich, dass sie mit der Schlüsselpaar-ID oder der CloudFront-Schlüsselpaar-ID übereinstimmt:

  1. Öffnen Sie die CloudFront-Konsole. Wählen Sie im linken Navigationsmenü Verteilungen aus.
  2. Wählen Sie Ihre Verteilung. Wählen Sie dann die Registerkarte Verhaltensweisen.
  3. Wählen Sie die Bezeichnung des Verhaltens und dann Bearbeiten aus.
  4. Suchen Sie die Einstellung Viewer-Zugriff einschränken.
    Hinweis: Wenn diese Option auf Ja gesetzt ist, müssen Anfragen nach Dateien, die dem Pfadmuster dieses Cache-Verhaltens entsprechen, die signierte URL oder das signierte Cookie verwenden.
  5. Nachdem Sie bestätigt haben, dass das Feld Viewer-Zugriff einschränken auf Ja gesetzt ist, aktivieren Sie das Feld Vertrauenswürdiger Autorisierungstyp.
  6. Wenn der Wert der Einstellung Vertrauenswürdiger Autorisierungstyp Vertrauenswürdige Schlüsselgruppen lautet, notieren Sie sich den Namen der vertrauenswürdigen Schlüsselgruppe.
    Suchen Sie dann die öffentliche Schlüssel-IDs für eine Vertrauensschlüsselgruppe: Kehren Sie zur CloudFront-Konsole zurück. Wählen Sie Schlüsselgruppen. Wählen Sie in der Liste der Schlüsselgruppen den Namen der vertrauenswürdigen Schlüsselgruppe aus, die Sie sich notiert haben.
    Vergewissern Sie sich, dass der Wert der Schlüsselpaar-ID oder CloudFront-Schlüsselpaar-ID, den Sie in Schritt 1 notiert haben, mit einer der öffentliche Schlüssel-IDs in der vertrauenswürdigen Schlüsselgruppe übereinstimmt.
  7. Wenn der Wert des vertrauenswürdigen Autorisierungstyps vertrauenswürdiger Signaturgeber lautet, werden von AWS generierte CloudFront-Anmeldeinformationen verwendet. In diesem Fall muss der Wert der Schlüsselpaar-ID oder CloudFront-Schlüsselpaar-ID, den Sie in Schritt 1 notiert haben, mit der Zugriffsschlüssel-ID der CloudFront-Anmeldeinformationen übereinstimmen.
    Die Zugriffsschlüssel-ID der CloudFront-Anmeldeinformationen finden Sie unter Erstellen von Schlüsselpaaren für Ihre Signaturgeber.

Wenn Sie eine signierte URL oder ein signiertes Cookie erstellen, legt eine Richtlinienanweisung im JSON-Format die Einschränkungen für die signierte URL fest. Diese Anweisung bestimmt, wie lange die URL gültig ist. CloudFront gibt den Fehler 403 „Zugriff verweigert“ zurück, wenn:

  • Eine signierte URL zu einem Zeitpunkt gesendet wird, der größer ist als der Wert von Expires in einer signierten URL mit vordefinierten Richtlinien.
  • Ein signiertes Cookie zu einem Zeitpunkt gesendet wird, der größer ist als der Wert von CloudFront-Expires in einem signierten Cookie mithilfe einer vordefinierten Richtlinie.
  • Eine signierte URL oder ein signiertes Cookie zu einem Zeitpunkt gesendet wird, der größer als der Wert von DateLessThan oder kleiner als der Wert von DateGreaterThan in der benutzerdefinierten Richtlinie ist.

Hinweis: Die Werte in Expires, CloudFront-Expires, DateLessThan und DateGreaterThan liegen im Unix-Zeitformat (in Sekunden) und der koordinierten Weltzeit (UTC) vor. Zum Beispiel wird der 1. Januar 2013 um 10:00 Uhr UTC im Unix-Zeitformat in 1357034400 konvertiert. Wenn Sie die Epochenzeit verwenden, verwenden Sie eine 32-Bit-Ganzzahl für ein Datum, das nicht später als 2147483647 (19. Januar 2038 um 03:14:07 UTC) ist.

Der Policy-Parameter in einer signierten URL oder das CloudFrontPolicy-Attribut in einem signierten Cookie zeigt an, dass eine benutzerdefinierte Richtlinie verwendet wird. Die Richtlinienanweisung ist im JSON-Format und base64-codiert. Verwenden Sie einen 64base-Decode-Befehl, um den Wert von DateLessThan oder DateGreaterThan herauszufinden.

Ein Beispiel für eine benutzerdefinierte Richtlinie zur base64-Codierung sieht wie folgt aus:

eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2QxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0L2dhbWVfZG93bmxvYWQuemlwIiwiQ29uZGl0aW9uIjp7IklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIxOTIuMC4yLjAvMjQifSwiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0MjY1MDAwMDB9fX1dfQ__

Verwenden Sie den folgenden Linux-Befehl, um benutzerdefinierte Richtlinien im base64-codierten Format in das JSON-Format zu dekodieren. In diesem Beispiel wird der Wert aus dem vorherigen Beispiel verwendet. Ersetzen Sie sie durch Ihre eigene benutzerdefinierte Richtlinie.

$ echo -n eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2QxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0L2dhbWVfZG93bmxvYWQuemlwIiwiQ29uZGl0aW9uIjp7IklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIxOTIuMC4yLjAvMjQifSwiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0MjY1MDAwMDB9fX1dfQ__ | base64 -di

Die Ausgabe des Befehls sieht wie folgt aus:

{ "Statement": [{ "Resource": "http://d111111abcdef8.cloudfront.net/game_download.zip", "Condition": { "IpAddress": { "AWS:SourceIp": "192.0.2.0/24" }, "DateLessThan": { "AWS:EpochTime": 1426500000 } } }] }

CloudFront gibt einen 403-Fehler „Zugriff verweigert“ zurück, wenn mehr als eine Anweisung in einer vordefinierten Richtlinie oder einer benutzerdefinierten Richtlinie enthalten ist.

Verwenden Sie zur Fehlerbehebung den Linux-Befehl im vorherigen Abschnitt, um die Anweisung der benutzerdefinierten Richtlinie zu überprüfen. Überprüfen Sie Ihre Codedetails und stellen Sie sicher, dass nur eine Anweisung in der Richtlinie für vordefinierte oder benutzerdefinierte Richtlinien enthalten ist.

CloudFront gibt einen 403-Fehler „Zugriff verweigert“ zurück, wenn:

  • Die Basis-URL in der Schlüsselressource in der Grundsatzerklärung eine abgekürzte URL (www.example.com) hat. Sie eine vollständige URL (http://www.example.com) verwenden.
  • Die Basis-URL keine UTF-8-Zeichencodierung hat.
  • Die Basis-URL nicht alle Interpunktions- und Parameternamen enthält.
  • Das HTTP- oder HTTPS-Protokoll in der Basis-URL nicht mit dem Protokoll übereinstimmt, das in einer Anforderung verwendet wird, die eine signierte URL oder signierte Cookies sendet.
  • Der Domänenname in der Basis-URL nicht mit dem Wert des Host-Headers übereinstimmt, der vom Benutzeragenten verwendet wird, der eine signierte URL oder signierte Cookies sendet.
  • Die Abfragezeichenfolge der Basis-URL Zeichen enthält, die nicht gültig sind.

CloudFront gibt einen 403-Fehler „Zugriff verweigert“ zurück, wenn:

  • Die Richtlinienanweisung Leerzeichen (einschließlich Tabulatoren und Zeilenumbruchzeichen) enthält.
  • Die vordefinierte Richtlinie oder benutzerdefinierte Richtlinie vor dem Hashing nicht als Zeichenfolge formatiert wurde. Dies kann passieren, wenn Sie eine signierte URL oder ein signiertes Cookie erstellen, ohne ein AWS-SDK zu verwenden.
  • Die Richtlinie wurde vor dem Generieren der Signatur nicht gehasht. Dies kann passieren, wenn Sie eine signierte URL oder ein signiertes Cookie erstellen, ohne ein AWS-SDK zu verwenden.

Bewährte Methoden für Signaturen bei der Verwendung einer signierten URL oder signierter Cookies finden Sie unter Codebeispiele zum Erstellen einer Signatur für eine signierte URL.

CloudFront gibt einen 403-Fehler „Zugriff verweigert“ zurück, wenn:

  • Eine signierte URL oder signierte Cookies von einer IPv6-IP-Adresse gesendet wurden.
  • Eine signierte URL oder signierte Cookies nicht von einer in der benutzerdefinierten Richtlinie angegebenen IPv4-Adresse oder einem IPv4-IP-Bereich gesendet wurden.

Die Schlüssel-IpAddress nur in einer benutzerdefinierten Richtlinie in einer signierten URL oder einem signierten Cookie verfügbar ist. IP-Adressen im IPv6-Format werden nicht unterstützt. Wenn Sie eine benutzerdefinierte Richtlinie verwenden, die die IpAddress enthält, aktivieren Sie IPv6 nicht für die Verteilung.

CloudFront gibt einen 403-Fehler „Zugriff verweigert“ zurück, wenn Cookies von CloudFront zurückgegeben werden, aber nicht in den folgenden Anfragen an dieselbe Domäne enthalten waren. Überprüfen Sie in diesem Fall die Cookie-Attribute Domain und Path im Set-Cookie-Antwort-Header.

Der Domain-Wert ist der Domänenname für die angeforderte Datei. Wenn Sie kein Domain-Attribut angeben, ist der Standardwert der Domänenname in der URL. Dies gilt nur für den angegebenen Domänennamen, nicht für Subdomänen. Wenn Sie ein Domain-Attribut angeben, gilt es auch für Subdomänen.

Wenn Sie ein Domain-Attribut angeben, müssen der Domänenname in der URL und der Wert des Domain-Attributs übereinstimmen. Sie können den Domänennamen angeben, den CloudFront Ihrer Verteilung zuweist (z. B. d111111abcdef8.cloudfron t.net), aber Sie können nicht *.cloudfront.net als Domänennamen angeben. Um einen alternativen Domänennamen (z. B. example.com) in URLs zu verwenden, fügen Sie Ihrer Verteilung einen alternativen Domänennamen hinzu.

DerPath-Wert ist der Pfad für die angeforderte Datei. Wenn Sie kein Path-Attribut angeben, ist der Standardwert der Pfad in der URL.


War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?