繁体   English   中英

如何将AWS S3中的对象从私有存储桶复制到公共存储桶而不进行下载?

[英]How to copy object in aws s3 from private bucket to public bucket without downloading?

使用请求,可以更轻松地在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:访问被拒绝(服务:Amazon S3;状态代码:403;错误代码:AccessDenied;请求ID:<>),S3扩展请求ID:<>,位于com.amazonaws.http .com.amazonaws上的.AmazonHttpClient $ RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1579)。 )的com.amazonaws.http.AmazonHttpClient $ RequestExecutor的com.amazonaws.http.AmazonHttpClient $ RequestExecutor.executeWithTimer(AmazonHttpClient.java:716)的com.amazonaws.http.AmazonHttpClient $ RequestExecutor.doExecute(AmazonHttpClient.java:742)的com.amazonaws.http.Amazon.Http。在com.amazonaws.http.AmazonHttpClient $ RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:649)上执行(AmazonHttpClient.java:699)在com.amazonaws.http.AmazonHttpClient $ RequestExecutor.access $ 500(AmazonHttpClient.java:667)

如何发出s3请求或在copyObject请求中提供预先签名的参数以从私有存储桶复制到公共destinationBucket

对于变通办法,显而易见的解决方案是使用GeneratePresignedUrlRequest并获取预签名的url以访问sourceBucket的对象,下载到临时文件中,并使用putObject在目标存储桶中上载。 那是太多的网络-所以想知道有什么更好的选择吗?

s3:CopyObject命令不能使用预签名的URL。

为了使用s3:CopyObject命令,所使用的AWS凭证仅要求对源存储桶具有读访问权限,而对目标存储桶具有写访问权限。

如果两个存储桶都在同一个AWS账户中,那么这应该很简单。

但是,如果存储桶位于不同的帐户中,则您需要在源存储桶上应用存储桶策略,以授予对拥有目标存储桶的AWS账户的读取访问权限,并使用拥有目标存储桶的AWS账户执行副本。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DelegateS3Access",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:root"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::BUCKET_NAME",
                "arn:aws:s3:::BUCKET_NAME/*"
            ]
        }
    ]
}

BUCKET_NAME替换为 S3存储桶的名称,并将123456789012替换为目标 AWS账户的AWS账户ID。 编辑后,将此策略应用于您的 S3存储桶。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM