コピーオブジェクトがthisリクエストと簡単です:aws s3のオブジェクトをプライベートバケットからパブリックバケットにコピーせずにダウンロードするにはどうすればいいですか?同じ地域のS3のバケット間
AmazonS3 pS3client = new AmazonS3Client(new BasicAWSCredentials(/*supressed*/));
String key = "key";
pS3client.copyObject("sourceBucket", key, "destinationBucket", key);
しかしsourceBucket
がプライベートアクセスバケットで、上記の要求が失敗したバケット内のオブジェクトにアクセスするには事前に署名したURLを必要とするとき。
プライベートアクセスによるファイルアクセスが拒否されました。
com.amazonaws.services.s3.model.AmazonS3Exception:アクセスが拒否されました(サービス:アマゾンS3;ステータスコード:403;エラーコード:アクセス拒否。要求ID:<>)、S3に拡張されたリクエストID:<> com.amazonaws.http.AmazonHttpClient $でcom.amazonaws.http.AmazonHttpClient $ RequestExecutor.executeOneRequest(AmazonHttpClient.java:1249) でcom.amazonaws.http.AmazonHttpClient $ RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1579) で RequestExecutor.executeHelper(AmazonHttpClient.java:1030) com.amazonaws.http.AmazonHttpClient $ RequestExecutor.doExecute(AmazonHttpClient.java:742) com.amazonaws.http.AmazonHttpClient $ com.amazonaws.http.AmazonHttpClient $ RequestExecutor.accessでcom.amazonaws.http.AmazonHttpClient $ RequestExecutor.execute(AmazonHttpClient.java:699) $ 500からRequestExecutor.executeWithTimer(AmazonHttpClient.java:716) (AmazonHttpClient.java:667 com.amazonaws.http.AmazonHttpClient $ RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:649)S3要求をするか、または公衆
destinationBucket
にプライベートバケットからコピーするCopyObjectはリクエストに事前に署名したパラメータを与える方法
で) ?
回避策としては、GeneratePresignedUrlRequest
を使用し、ソースバケットのオブジェクトにアクセスするための事前署名されたURLを取得し、一時ファイルをダウンロードしてputObject
を使用してアップロード先バケットにアップロードします。それはあまりにも多くのネットワークです - もしあれば、もっと良い方法は何でしょうか?