Ich habe eine iOS-App, die von AWS (EC2 und anderen Diensten) unterstützt wird. Aber ich habe eine Frage bezüglich des Hochladens von benutzergenerierten Dateien wie Bildern und Videos in das Backend. Ich denke entweder, sie direkt in S3-Buckets hochzuladen oder auf EC2 hochzuladen und EC2 sie an S3-Buckets weitergeben zu lassen. Ich lehne das Hochladen auf EC2 vor, weil ich nicht möchte, dass irgendjemand Schreibzugriff auf mein Dateisystem hat, aber dies wird wahrscheinlich viel schweres Heben für meine EC2-Instanz erfordern. Wie kann ich die Sicherheit ohne Verwendung temporärer URLs sicherstellen, wenn ich direkt auf S3 hochlade (ich verwende SDWebImage, um die Bilder herunterzuladen und zwischenzuspeichern, veranlassen temporäre URLs, dass SDWebImage dieselben Bilder herunterladen, anstatt sie von lokal abzurufen)? Irgendwelche Vorschläge werden sehr geschätzt.iOS mit AWS EC2-Endpunkt oder S3
Antwort
Also werden Sie dies über Lambda entkoppeln wollen.
Verwenden Sie nicht EC2. Eher unnötig.
einen S3-Bucket "app-was auch immer" genannt erstellen
Ihre Eimer privat halten. Sie müssen den Benutzern keinen Zugriff auf die Dinge geben. Sie können private mit generierten URLs sein. Jeder Benutzer habe seinen eigenen Ordner (das ist das Präfix).
Um ausgefallen zu sein, setzen Sie jedes Element in S3 vom Benutzerende. Lassen Sie jede Taste nach dem Zufallsprinzip mit der Formel 'arc4' von ios oder was auch immer Sie wollen, dann hängen Sie den Dateityp an. So blahblab.png
Setzen Sie ein Metadatenfeld mit der Datei thumbnail
und den Wert des Dateinamens plus -thumb
. So blahblah-thumb.png
Rekapit .: Sie laden eine einzelne Datei in S3 mit dem Metadatenfeld thumbnail
. Das ist es.
Erstellen Sie dann eine Lambda-Funktion, die auf jede einzelne PUT-Datei von S3 reagiert. Wenn Sie Node.JS mögen, verwenden Sie das imagemagick-Modul (schön für Sie enthalten), um ein 128x128 Thumbnail oder was auch immer zu erzeugen. Die Lambda-Funktion empfängt die S3-Daten für die Datei. Ruft die Hauptdatei (Schlüsselname) für die Quelldatei ab, und die Miniatur-Metadaten werden als Ausgabe ausgegeben. Führen Sie Ihre IM-Funktion aus und legen Sie die Ausgabedatei in den S3-Bucket. Jetzt haben Sie zwei Dateien im Bucket. Groß.
Jetzt, wenn Sie diese Dateien auflisten, DONT DOWNLOAD JEDER. Abrufen der Metadaten aus der Datei und Abrufen eines presignedUrl
für den Schlüssel in den Metadaten.
Dies wird schnell sein. Schauen Sie sich zum Beispiel HD Camera von iSkore im App Store an.
Es hängt wirklich davon ab, was Ihre Gründe für die Einschränkung sind. Wenn du der App die Erlaubnis gibst, das Bild auf deinen EC2-Server hochzuladen und es dann einfach an S3 weiterleitet, was gewinnst du? Mit S3 können Sie wichtige Vorabfixierungen verwenden, um Objekte basierend auf dem Benutzer einzuschränken (was bei Verwendung von Cognito zur Authentifizierung leicht ist). Zum Beispiel können Sie es so einrichten, dass Ihre S3-Struktur etwa /images/{userId}/myImage.jpg ist und jeder Benutzer nur in seinen Ordner hochladen kann. Sie können es ganz privat machen, oder Sie können andere Benutzer aus diesem Ordner lesen lassen, aber nicht schreiben ect ...
Einige Gedanken: -Sie schwarze Liste Benutzer könnte möglicherweise -Sie Anfragen drosseln könnte, oder prüfen und ablehnen bestimmte Bilder -Sie könnten ein komplizierteres Sicherheitsmodell als S3 bietet
Sie könnten API Gateway für die ersten beiden Anwendungsfälle verwenden.
Wenn Sie ec2 verwenden möchten, wird sich ja die vor-signierte URL ändern. Ich bin mir nicht sicher, wie SDWebImage funktioniert, daher kann ich seine Cache-Fähigkeit nicht kommentieren.
- 1. iOS AWS S3 Implementierung Tutorial
- 2. AWS S3-Multipart-Upload in iOS
- 3. aws ios sdk - Ausgabe Bilder von s3
- 4. Confussion in AWS S3 IOS SDK?
- 5. AWS S3 mit Grails
- 6. GoDaddy CNAME oder HTACCESS für AWS S3
- 7. MultipartUpload Upload auf S3 mit AWS ios SDK
- 8. AWS iOS SDK mit KMS
- 9. Wie verwenden wir AWS/S3?
- 10. Android und AWS S3
- 11. AWS S3 - Benutzerprofil speichern
- 12. Aws S3 CompleteMultipartUpload-Fehler
- 13. AWS CLI S3 Zugriff
- 14. AWS S3-Zertifikat-/Zertifikatfehler
- 15. AWS Cognito und S3
- 16. AWS S3 Bild in Bucket-iOS-App hochladen
- 17. AWS S3-Zugriff verweigert
- 18. AWS S3 Bucket Endpunkt
- 19. AWS S3 Lightsail Schnappschüsse
- 20. AWS S3 Objektliste
- 21. AWS S3 Presigned-Anforderungscache
- 22. AWS S3: Datei wird nicht in Ordner in IOS hochgeladen
- 23. S3 putObject schlägt mit aws-sdk
- 24. Upload von AWS Lambda zu AWS S3
- 25. aws s3 maximale Dateigröße
- 26. AWS s3 r studio
- 27. Arbeiten mit AWS S3 Großer öffentlicher Datensatz
- 28. Zugang AWS S3 mit benutzerdefinierten Domain
- 29. S3-Upload in AWS iOS SDK schlägt jedes Mal fehl
- 30. AWS S3-Synchronisierung mit JS/Node SDK
Wenn der S3-Bucket privat ist, wie kann ich SDWebImage mit den URLs zum Herunterladen von Bildern verwenden? Der Zugang würde verweigert werden? – jackson
Sie rufen 's3.getSignedUrl' und es bietet Ihnen eine temporäre Verbindung, die Sie an SDWebImage – iSkore
ich sehe. Dieser Link ändert sich jedes Mal richtig? Wie kann SDWebImage das Bild dann zwischenspeichern? Da SDWebImage die URL als Schlüssel für die Abfrage von Festplatte und Arbeitsspeicher verwendet, ändert sich der Schlüssel bei einer Änderung der URL ebenfalls. Dann wird SDWebImage denken, dass es dieses Bild nie zuvor bekommen hat, also wird es es aus dem Internet herunterladen. – jackson