Externen mit wenig Aufwand einen sicheren Upload auf Ihren Amazon S3 Bucket ermöglichen

Bisweilen müssen Unternehmen ihren Geschäftspartnern gezielt wichtige Informationen zur Verfügung stellen, so etwa bei Projekten. Dies muss nicht nur sicher, sondern auch einfach erfolgen.

Screenshot: AWS

Für den Upload von Objekten durch einen externen Geschäftspartner in den eigenen Amazon S3 Bucket sind vorsignierte URLs ein bisher wenig bekannter, aber programmatischer Weg. Der Vorteil des Ansatzes ist, dass die Partner kein eigenes AWS-Konto benötigen. Zum Erstellen einer solchen vorsignierten URL geben Sie den Bucket-Namen, einen Objektprefix (object key), eine HTTP-Methode (PUT für das Hochladen von Objekten) sowie ein Datum und eine Uhrzeit für den Ablauf an. Die Erstellung dieser URLs funktioniert ebenso mit serverseitig-verschlüsselten Amazon S3 Buckets. Dabei haben Sie die Wahl zwischen der Verschlüsselung durch den AWS Key Management Service (SSE-KMS) oder Amazon S3 (SSE-S3).

Für die Erstellung einer vorab signierten URL mit serverseitiger Verschlüsselung verwenden Sie die Signaturversion 4 (SigV4). Dabei aktivieren Sie SigV4 durch die AWS SDK oder AWS CLI. Das folgende Code-Beispiel zeigt eine explizite Konfiguration über den Amazon S3 Client (AWS SDK for Java – 1.9.31).

AmazonS3Client s3 = new AmazonS3Client(

new

ClientConfiguration().withSignerOverride(“AWSS3V4SignerType“));

Anschließend können Sie eine vorsignierte PUT-URL mit SSE-KMS generieren. Dabei wird Amazon S3 den Standard KMS Master Key verwenden, der automatisch für Sie erstellt wird.

String myExistingBucket = … // an existing bucket

String myKey = …    // target S3 key

// Generieren Sie eine vorsignierte PUT-URL zur Verwendung mit SSE-KMS

GeneratePresignedUrlRequest genreq = new GeneratePresignedUrlRequest(

myExistingBucket, myKey, HttpMethod.PUT)

.withSSEAlgorithm(SSEAlgorithm.KMS.getAlgorithm());

URL puturl = s3.generatePresignedUrl(genreq);

System.out.println(“Presigned PUT URL with SSE-KMS: ” + puturl);