这个请求使得在同一区域的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: Access Denied (Service: Amazon S3;状态代码: 403;错误代码: 访问已死亡;请求 ID:
如何使s3请求或在CopObject请求中给出预签名参数以从私有桶复制到公共DestinationBucket
?
对于解决方法,明显的解决方案是使用 GeneratePresignedUrlRequest
并获取预签名的 url 来访问 sourceBucket 的对象,在临时文件中下载,并使用 putObject
在目标存储桶中上传。这是太多的网络 - 所以想知道如果有的话,什么是更好的选择?
< code>s3:CopyObject命令不能使用预签名的URL。
为了使用s3:CopyObject
命令,所使用的AWS凭据只需要对源存储桶进行读访问,并对目标存储桶进行写访问。
如果这两个bucket在同一个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存储桶。
我已经尝试了下面的代码,虽然采样器是传递,但文件是不复制的。然后我试着从本地上传到S3。由于我需要测试15GB以上的大文件,上传到S3需要很多时间。有没有从S3复制到S3的方法。
我正在使用一个PHP库将一个文件上传到我的bucket中。我已经将ACL设置为public read write,它可以正常工作,但文件仍然是私有的。 我发现如果我把被授权人改成所有人,文件就会公开。我想知道的是,如何将bucket中所有对象的默认grante设置为“Everyone”。或者有没有另一种默认公开文件的解决方案? 我使用的代码如下:
我正在使用python 2.7. x和Boto API 2. X连接到AWS S3桶。我有一个独特的情况,我想从S3桶下载文件,从一个特定的目录/文件夹说。但问题是我想在S3文件夹中留下一个最新的文件,而不是下载它。一旦,我在我的本地框中下载这些文件,我想将这些文件移动到同一个桶下的不同文件夹说。以前有人处理过类似的情况吗? 以下是一些解释: 将下载的文件从S3存储桶移动到同一存储桶下的不同文件夹
有没有一种方法可以将文件列表从一个S3存储桶复制到另一个存储桶?两个S3存储桶都在同一个AWS帐户中。我可以使用aws cli命令一次复制一个文件: 然而,我有1000份文件要复制。我不想复制源存储桶中的所有文件,因此无法使用sync命令。有没有一种方法可以用需要复制的文件名列表来调用一个文件,从而自动化这个过程?
我们有一个Lambda函数,需要能够访问私有的S3桶。 该存储桶已启用“阻止所有公共访问”,并具有以下资源策略: 我还将AmazonS3FullAccess策略直接附加到Lambda使用的IAM角色。但是,当Lambda函数尝试访问S3存储桶时,会出现访问被拒绝错误: 使用IAM用户凭据连接到S3的外部系统在尝试访问存储桶时也会收到相同的错误。 有人知道是什么导致了这个错误吗? 以下是发生错误的L
我有几个Javascript原型。最初,实例将只填写ID,并为其他数据提供一些通用的位置持有者信息。然后,我将带有ID和对象类型的消息发送给服务器(使用jQuery的AJAX函数),服务器返回一个JSON对象,其中包含所有丢失的信息(但没有ID)。返回对象中的变量与现有对象中的变量具有完全相同的名称。 把它转移到现有空对象中最简单的方法是什么?我想出了几个选择 null