Signierte URLs für Amazon CloudFront erstellen
Kurze version: Wie mache ich unterschrieben URLs "on-demand" zu imitieren Nginx X-Accel-Redirect-Verhalten (d.h. Schutz-downloads) mit Amazon CloudFront/S3 mit Python.
Habe ich eine Django-server laufen mit Nginx front-end. Ich habe immer gehämmert mit Anfragen und vor kurzem hatte es zu installieren, als Tornado WSGI-Anwendung, um zu verhindern, dass es abstürzt, im FastCGI-Modus.
Nun ich habe ein Problem mit meinem server zu verzetteln (d.h. die meisten von Ihrer Bandbreite genutzt werden bis) aufgrund der zu viele Anfragen für Medien gemacht, um es, ich habe auf der Suche in CDNs und ich glaube, dass Amazon CloudFront/S3 wäre die richtige Lösung für mich.
Habe ich mit Nginx X-Accel-Redirect header zum Schutz der Daten vor unerlaubtem herunterladen, aber ich habe nicht diese Fähigkeit, mit CloudFront/S3-aber Sie bieten signierten URLs. Ich bin kein Python-Experte weit und definitiv nicht wissen, wie Sie eine Signierte URL korrekt, so war ich der Hoffnung, jemand hätte einen link für, wie man diese URLs "on-demand" - oder wäre bereit, zu erklären, wie hier, würde es sehr geschätzt werden.
Außerdem ist dies die richtige Lösung, auch? Ich bin nicht allzu vertraut mit CDNs, ist es ein CDN, das wäre besser für diese geeignet?
InformationsquelleAutor der Frage Zack | 2010-04-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Amazon CloudFront Signierte URLs anders funktionieren als Amazon S3 signierte URLs. CloudFront verwendet RSA-Signaturen basierend auf einem separaten CloudFront-Schlüsselpaar, welches Sie sich in Ihrem Amazon-Konto-Anmeldeinformationen Seite. Hier finden Sie den code, um tatsächlich zu generieren, die eine zeitlich begrenzte URL in Python mit dem M2Crypto Bibliothek:
Erstellen Sie ein Schlüsselpaar für die CloudFront
Ich denke, der einzige Weg, dies zu tun ist durch die Amazon-Website. Gehen Sie in Ihrer AWS - "Konto" - Seite und klicken Sie auf "Security Credentials" - link. Klicken Sie auf "Key Pairs" - Registerkarte, dann klicken Sie auf "Erstellen Sie ein Neues Schlüsselpaar". Dies generiert ein neues Schlüsselpaar für Sie und automatisch laden Sie eine private key-Datei (pk-xxxxxxxxx.pem). Halten Sie die Schlüssel-Datei sicher und privat. Beachten Sie auch die "Key Pair ID" von amazon als wir benötigen es im nächsten Schritt.
Generieren einige URLs in Python
Als der boto version 2.0 scheint es nicht zu sein, jede Unterstützung für das generieren von signierten CloudFront-URLs. Python nicht enthalten ist die RSA-Verschlüsselung Routinen in der standard-Bibliothek, also müssen wir die Verwendung einer zusätzlichen Bibliothek. Ich habe M2Crypto in diesem Beispiel.
Für eine nicht-streaming-distribution, müssen Sie die vollständige cloudfront-URL als Ressource, jedoch für das streaming verwenden wir nur die Objekt Namen der video-Datei. Finden Sie den code unten ein vollständiges Beispiel für das erzeugen einer URL, die dauert nur 5 Minuten.
Dieser code basiert lose auf dem PHP-Beispiel-code von Amazon in der CloudFront-Dokumentation.
Stellen Sie sicher, dass Sie Ihre distribution mit einer TrustedSigners parameter auf dem Konto halten Sie Ihr Schlüsselpaar (oder "Selbst", wenn es auf Ihrem eigenen Konto)
Sehen Erste Schritte mit sicheren AWS-CloudFront streaming mit Python für eine voll arbeitete beispielsweise auf die Einstellung für streaming mit Python
InformationsquelleAutor der Antwort secretmike
Diese Funktion ist jetzt bereits unterstützt Botocoredie die zugrunde liegende Bibliothek Boto3, die neuesten offiziellen AWS-SDK für Python. (Das folgende Beispiel erfordert die installation der rsa-Paket, aber Sie können auch andere RSA-Paket auch, nur definieren Sie Ihren eigenen "normalisiert RSA-signer".)
Die Nutzung sieht wie folgt aus:
Disclaimer: ich bin der Autor, PR -.
InformationsquelleAutor der Antwort RayLuo
So viele kommentiert haben, die bereits die zunächst akzeptierte Antwort gilt nicht für Amazon CloudFront in der Tat, sofern Für Private Inhalte über CloudFront erfordert die Verwendung von speziellen CloudFront Signierte URLs - entsprechend secretmike Antwort richtig, aber es ist mittlerweile überholt, nachdem er sich die Zeit genommen und Hinzugefügt Unterstützung für das generieren von signierten URLs für CloudFront (vielen Dank dafür!!!!).
boto unterstützt nun eine dedizierte create_signed_url - Methode und der ehemaligen binary Abhängigkeit M2Crypto wurde vor kurzem ersetzt mit einem pure-Python-RSA-Implementierung als gut, sehen Verwenden Sie nicht M2Crypto für cloudfront-URL-Signierung.
Als zunehmend üblich, kann man ein oder mehrere gute Beispiele für eine Nutzung innerhalb der zugehörigen unit-tests (siehe test_signed_urls.py), zum Beispiel test_canned_policy(selbst -) - siehe setUp(self) für die referenzierten Variablen
self.pk_id
undself.pk_str
(natürlich müssen Sie Ihren eigenen Schlüssel):InformationsquelleAutor der Antwort Steffen Opel
secretmike Antwort funktioniert, aber es ist besser,
rsa
stattM2Crypto
.Ich verwendet
boto
die verwendetrsa
.Verwenden Sie die
boto Dokumentation
InformationsquelleAutor der Antwort ravi404
Dies ist, was ich verwenden für eine Richtlinie erstellen, so dass ich geben kann Zugriff auf mehrere Dateien mit der gleichen "Handschrift":
Kann ich es verwenden, für alle Dateien unter
http://your_domain/*
zum Beispiel:InformationsquelleAutor der Antwort nbari