2017-03-22 6 views
0

Ich möchte eine Bilddatei mit Passwortschutz erstellen oder aktualisieren. Szenario ist, unser Infra-Team wird eine Bilddatei auf AWS S3 hochladen. Später wollen wir diese Bilddatei mit einem Passwort von Java schützen. Das Passwort wird automatisch generiert und nicht an Dritte weitergegeben. Wenn jemand versucht, das Bild direkt von AWS S3 herunterzuladen, sollte es nicht geöffnet werden. Ich habe Server-Side encryption in AWS S3 versuchtPasswortgeschützte Bilddatei

CopyObjectRequest request = new CopyObjectRequest(bucket, key, bucket, key); 
ObjectMetadata objectMetadata = new ObjectMetadata(); 
objectMetadata.setServerSideEncryption(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION); 
request.setNewObjectMetadata(objectMetadata); 
s3client.copyObject(request) 

Aber noch bin ich in der Lage, es zu öffnen. Gibt es einen anderen Weg, es zu tun?

Antwort

0

Die serverseitige Verschlüsselung verschlüsselt lediglich die auf der Festplatte gespeicherten Daten. Es ist keine Methode zum Schutz des Zugriffs auf Daten.

Vielmehr scheint es, dass Ihre Anforderung ist:

  • Shop einige Daten (zB ein Bild) auf Amazon S3 und halten es privat
  • Selektiv Menschen erlauben es herunterladen, wenn sie wurde autorisiert

Die am besten geeignete Lösung wäre die Verwendung eines Amazon S3 Pre-Signed URL.

Standardmäßig sind alle Objekte in Amazon S3 privat. Sie können dann Berechtigungen hinzufügen, damit Personen auf Ihre Objekte zugreifen können. Dies kann folgendermaßen geschehen:

  • Access Control List Berechtigungen für einzelne Objekte
  • A Bucket Politik (dass Zugang gewährt weitreich basierend auf dem Weg, die IP-Adresse, Referrer, etc.)
  • IAM Benutzer und Gruppen (das erteilen von Berechtigungen für Benutzer mit AWS-Anmeldeinformationen)
  • Pre-Signed URLs

A Pre-Signed URL kann verwendet werden, um Zugriff auf S3 zu gewähren Objekte als eine Art "Überschreiben" von Zugriffskontrollen. Auf ein normalerweise privates Objekt kann über eine URL zugegriffen werden, indem eine Ablaufzeit und Signatur angehängt werden. Dies ist eine großartige Möglichkeit, private Inhalte zu bedienen, ohne einen Webserver zu benötigen.

Es wäre die Verantwortung Ihrer Anwendung seiner zu entsprechend Benutzer authentifizieren, um zu bestimmen, ob sie den Zugriff auf Objekte in S3 erlaubt ist. Wenn ihnen Zugriff gewährt wird, sollte Ihre Anwendung eine vor-signierte URL als authentifizierten Link zu den Objekten generieren. Die URL ist nur für eine begrenzte Zeitspanne gültig.

Dies geschieht am besten, indem Sie eine Back-End-App (wahrscheinlich läuft auf Amazon EC2 oder AWS Lambda) die Authentifizierung durchführen und dann die URL generieren. Ihr authentifizierter Benutzer kann dann die vor-signierte URL verwenden, um das Objekt während des zugewiesenen Zeitraums (z. B. 5 Minuten) herunterzuladen.

Diese Methode hat mehrere Vorteile über die Verwendung eines Passworts:

  • Es authentifiziert ordnungsgemäß den Benutzer (durch den Code) und nicht nur im Vertrauen jeder, der das Passwort kennt
  • Es erlaubt Sie zu Log-Zugriff, so dass Sie wissen, wer auf das Objekt zugreifen
  • Ihre Back-End-App könnte eine HTML-Seite generieren mit viele pre -signierte URLs und Ihre Benutzer könnten einfach auf die Links klicken, um auf die Objekte zuzugreifen, anstatt für jedes Objekt, das sie herunterladen möchten, ein Kennwort anzugeben
Verwandte Themen