如何使用预签名URL复制对象?

时间:2014-07-22 10:14:01

标签: ruby amazon-web-services amazon-s3

我使用的服务将我需要的数据放在S3上,并为我提供了一份预先下载的预签名列表(http://.s3.amazonaws.com/?AWSAccessKeyID = .. &安培; Signature = ...&安培; Expires = ...)
我想将这些文件复制到我的S3存储桶中,而不必下载它们并再次上传。

我使用的是Ruby SDK(但是如果有效,我愿意尝试别的东西......)并且不能写这样的东西。

我能够使用我的凭据(access_key和secret)初始化S3对象,授予我访问我的存储桶的权限,但是如何通过" source-side" access_key_idsignatureexpires参数?

为了使问题更简单 - 我甚至无法使用预签名参数对对象执行GET请求。 (不是使用常规HTTP,我想通过SDK API来实现)。

我找到了很多关于如何创建预签名网址的示例,但没有说明如何使用已经给定的参数进行身份验证(显然我没有secret_key我的数据提供商。)

谢谢!

2 个答案:

答案 0 :(得分:1)

您无法使用已签名的网址执行此操作,但正如已经提到的,如果您在EC2中的相关区域内获取并上传相关存储区,则基本上不会产生任何额外费用。< / p>

另外值得注意的是,两个存储桶不必位于同一帐户中,但用于发出请求的aws密钥必须具有放置目标对象和获取源对象的权限。可以跨帐户授予权限......但在许多情况下,这不太可能被授予。

http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html

答案 1 :(得分:1)

您实际上可以使用预先签名的URL进行复制。要执行此操作,您需要创建一个预先签名的PUT请求,该请求还包含类似x-amz-copy-source: /sourceBucket/sourceObject的标头,以指定要从中复制的位置。此外,如果您希望复制的对象具有新元数据,则还需要添加标头x-amz-metadata-directive: REPLACE。有关详细信息,请参阅REST API documentation