2

Ich benutze Amazon aws Java SDK für die Codierung.Wie kann sichergestellt werden, dass eine Datei mit SSE-C verschlüsselt wird, bevor sie von Amazon S3 heruntergeladen wird?

Ich habe einige meiner lokalen Dateien auf S3 mithilfe von SSE-C (serverseitige Verschlüsselung mit vom Kunden bereitgestellten Schlüssel) hochgeladen und einige Dateien ohne Verschlüsselung. Bevor ich eine Datei in einem anderen Modul herunterlade, muss ich sicherstellen, dass diese bestimmte Datei verschlüsselt ist oder nicht. Ich habe diese link verwiesen. Aber dieses Verfahren ist für Dateien, die mit SSE verschlüsselt sind (was von SSE-C verschieden ist). Nach dem Verweis auf Amazon aws Java APIs habe ich den folgenden Code geschrieben.

Base64 b = new Base64(); 
byte[] keyBytes = b.decode("encryptionKey"); 
SecretKey key = new SecretKeySpec(keyBytes,0,keyBytes.length,"AES"); 
SSECustomerKey sseKey = new SSECustomerKey(key); 

GetObjectMetadataRequest request2 =new GetObjectMetadataRequest("bucketname","keyname").withSSECustomerKey(sseKey); 
ObjectMetadata metadata = s3client.getObjectMetadata(request2); 
System.out.println("Encryption algorithm used: " + metadata.getSSECustomerAlgorithm()); 

Das obige Stück Code funktioniert einwandfrei, um eine verschlüsselte Datei herunterzuladen. Aber Ausnahme beim Herunterladen von Dateien, die nicht verschlüsselt wurden.

Gibt es eine gemeinsame API, um die Metadaten von verschlüsselten und nicht verschlüsselten Dateien zu erhalten.

+0

Sie sollten den Schlüssel nicht zum Abrufen der Metadaten benötigen, da die Dokumente sagen, dass Metadaten nicht verschlüsselt sind. Funktioniert es, wenn Sie den '.withSSECustomerKey (sseKey)' Teil entfernen? – augurar

+0

Ich bekomme Bad Request 400, wenn ich den Verschlüsselungsschlüssel Teil entfernen – Durgesh

+0

Hmm, ich denke, [dieses Dokument] (https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectHEAD.html) sagt, dass Sie die brauchen SSEC-Schlüssel auch für Metadaten. Sie müssen entweder die Ausnahme abfangen und mit/ohne den Schlüssel versuchen oder eine andere Art der Aufzeichnung der verschlüsselten Dateien erstellen. – augurar

Antwort

1

Sie vor der Prüfung durchführen kann, und wenn getSSECustomerKey gibt null zurück, wissen Sie, es ist nicht verschlüsselt worden ist, so etwas wie

GetObjectMetadataRequest request2 = new GetObjectMetadataRequest("bucketname","keyname"); 
ObjectMetadata metadata = s3client.getObjectMetadata(request2); 

if (metadata.getSSEAlgorithm() == null) { 
    // download files directly - it is not encrypted 
} else { 
    // files encrypted - add the SSE key 
} 

Die andere Option ist Ausnahme zu überprüfen und behandeln Download von nicht-verschlüsselte Datei in die Ausnahme, überprüfen Sie, ob die Datei vorhanden ist und laden Sie sie herunter.

+0

Danke Henri. Aber es funktioniert nicht für SSE-C. Die von Ihnen beschriebene Vorgehensweise funktioniert, wenn die Verschlüsselung Server Side Encryption (SSE) ist, bei der Schlüssel auf dem Server selbst gespeichert werden. Aber mein Fall ist anders. Um die Metadaten selbst von S3 zu erhalten, muss ich einen Verschlüsselungsschlüssel bereitstellen. – Durgesh

+0

hum .. Sie müssen dann möglicherweise mit der Ausnahme arbeiten und eine Überprüfung ausführen, wenn die Ausnahme ausgelöst wurde, wenn Sie Dateien ohne Verschlüsselungsschlüssel herunterladen können –

1

Die allgemeine Anleitung bei der Verwendung von SSE-C ist das separate Speichern einer Zuordnung zwischen S3-Objekten und dem verwendeten Verschlüsselungsschlüssel (nicht der Schlüssel selbst). Diese Zuordnung könnte in einer Datenbank (RDS, Dynamo, sogar SimpleDB) gespeichert werden. Oder es könnte sogar in S3 sein: Speichern Sie eine Datei in einem Pfad wie .../metadata/<object>, die die Schlüssel-ID oder "NONE" enthält, und lesen Sie das, bevor Sie versuchen, die tatsächliche Datei abzurufen.

Ein Grund dafür ist die Unterstützung mehrerer Kundenschlüssel. Sie müssen möglicherweise aufgrund einer Schlüsselrotationsrichtlinie schrittweise von einem Schlüssel zum anderen wechseln oder einen anderen Schlüssel für jeden Ihrer Kunden verwenden. Auf diese Weise ist Ihre App bereit, alle diese Szenarien zu unterstützen.

Verwandte Themen