Kopieren Objekt über Eimer in s3 in der Region ist einfacher, mit this Anfrag:Wie kopiert man das Objekt in aws s3 vom privaten Bucket in den öffentlichen Bucket ohne Download?
AmazonS3 pS3client = new AmazonS3Client(new BasicAWSCredentials(/*supressed*/));
String key = "key";
pS3client.copyObject("sourceBucket", key, "destinationBucket", key);
Aber wenn sourceBucket
sind privater Zugang Eimer und muss vorab unterzeichnet Urls die Objekte in dem Eimer die oben Anforderung fehlschlägt zuzugreifen.
Zugriff aufgrund privaten Zugriffs für die Datei verweigert.
com.amazonaws.services.s3.model.AmazonS3Exception: Zugriff verweigert (Service: Amazon S3; Statuscode: 403; Fehlercode: AccessDenied; anfordern ID: <>), S3 Erweiterte Anforderungs-ID: <> bei com.amazonaws.http.AmazonHttpClient $ RequestExecutor.handleErrorResponse (AmazonHttpClient.java:1579) bei com.amazonaws.http.AmazonHttpClient $ RequestExecutor.executeOneRequest (AmazonHttpClient.java:1249) bei com.amazonaws.http.AmazonHttpClient $ RequestExecutor.executeHelper (AmazonHttpClient.java:1030) bei com.amazonaws.http.AmazonHttpClient $ RequestExecutor.doExecute (AmazonHttpClient.java:742) bei com.amazonaws.http.AmazonHttpClient $ RequestExecutor.executeWithTimer (AmazonHttpClient.java:716) bei com.amazonaws.http.AmazonHttpClient $ RequestExecutor.execute (AmazonHttpClient.java:699) bei com.amazonaws.http.AmazonHttpClient $ RequestExecutor.access 500 $ (AmazonHttpClient.java:667) bei com.amazonaws.http.AmazonHttpClient $ RequestExecutionBuilderImpl.execute (AmazonHttpClient.java:649)
Wie s3 Anfrage oder geben vor signierten Parameter in der Anfrage Kopierenobjekt kopieren von privaten Eimer zu öffentlichen destinationBucket
machen?
Für Abhilfe offensichtliche Lösung wäre GeneratePresignedUrlRequest
zu verwenden und die Pre-signierte URL erhalten zu dem Objekt sourceBucket zugreifen, herunterladen in temporärer Datei und die Verwendung putObject
im Ziel Eimer hochladen. Das ist zu viel Netzwerk - also fragte mich, was ist die bessere Alternative wenn überhaupt?