CloudFront + S3-Zugriff verweigert mithilfe signierter Cookies

CloudFront + S3-Zugriff verweigert mithilfe signierter Cookies

Ich versuche, signierte Cookies für eine CloudFront-Verteilung zu integrieren, die aus einem S3-Bucket gespeist wird, erhalte aber die Fehlermeldung „Zugriff verweigert“:

<Error>
    <Code>AccessDenied</Code>
    <Message>Access Denied</Message>
    <RequestId>BLAH BLAH</RequestId>
    <HostId>BLAH BLAH</HostId>
</Error>

Was mich verblüfft, ist, dass einige Dateien scheinbar zuverlässig funktionieren, während bei anderen im selben Verzeichnis, das meine benutzerdefinierte Richtlinie zulässt, die Verwendung derselben signierten Cookies fehlschlägt.

Beispiel: Ich habe eine Datei unter/projekte/index.htmldas funktioniert und eine Datei bei/projects/src/Runtime.jsDies ist nicht der Fall, obwohl eine benutzerdefinierte Richtlinie verwendet wird, die beides eindeutig zulässt, indem in der Ressource ein Platzhalterzeichen verwendet wird:http://test.mydomain.com/projects/*

Beide Dateien sind auf S3 auf privat eingestellt. Der einzige Unterschied, der mir zwischen der Anforderung dieser beiden Dateien einfällt, ist, dass die/projects/src/Runtime.jsDatei wird mit einem Referrer angeforderttest.meinedomain.comund nichtmeinedomain.comdas diente dem ersten/projekte/index.htmlAnfrage.

Ich weiß, dass die Cookies bei beiden Anfragen richtig gesetzt werden und dass die benutzerdefinierte Richtlinie und Signatur für sie gültig sind, denn wenn ich damit herumspiele und ihnen falsche Werte gebe, erhalte ich eine andere Fehlermeldung.

Wie auch immer! Meine Konfiguration ist wie folgt:
CloudFront-Einstellungen:i.imgur.com/DMcUeDY.png(Serverfault-Linkbeschränkung, bah)
Ich habe einen alternativen Hostnamen, der eine Subdomäne der Site ist, die die Datei bereitstellt (z. B. test.mydomain.com). Es ist kein echter CNAME-Eintrag und ich habe kein Zertifikat dafür – ich referenziere CloudFront mit diesem Namen über den lokalen /etc/hosts-Eintrag.

CloudFront Origin-Einstellungen:i.imgur.com/ereGJ42.png(Serverfault-Linkbeschränkung, meh)
Der Ursprung ist unkompliziert – ich verweise auf die Stammadresse meines S3-Buckets und schränke den Bucket nicht ein, da er auch Dateien enthält, die öffentlich verfügbar bleiben sollen.

Ich habe das Standardverhalten geändert:i.imgur.com/5N2RlxM.png(Serverfehler-Linkbeschränkung, ähm)
Grundsätzlich ist die Einschränkung des Viewer-Zugriffs aktiviert. Die vertrauenswürdigen Unterzeichner sind das Root-Konto, das auch Eigentümer des S3-Buckets ist.

Die restlichen CloudFront-Optionen wurden unverändert gelassen. Ich habe ein von Amazon generiertes CloudFront-Schlüsselpaar und verwende es mit den von Amazon für PHP bereitgestellten Snippets (mit openssl_sign), um eine benutzerdefinierte Richtlinie zu signieren, die Zugriff auf ein ganzes Verzeichnis gewährt.

Ich kann das Problem aufgrund der sehr vagen Fehlermeldung „Zugriff verweigert“ nicht wirklich bestätigen, bin mir aber ziemlich sicher, dass es nicht an der Art und Weise liegt, wie ich die Cookies signiere. Ich habe versucht, falsche Werte zu verwenden und habe verschiedene Fehlermeldungen wie „Fehlerhafte Signatur“ oder „Fehlerhafte Richtlinie“ erhalten, daher gehe ich davon aus, dass meine Signatur in Ordnung ist. Außerdem funktionieren, wie erwähnt, einige Dateien.

Ich stecke jetzt schon seit ein paar Tagen fest und wäre für jede Hilfe sehr dankbar!

verwandte Informationen