我使用的服务将我需要的数据放在S3上,并为我提供了一份预先下载的预签名列表(http://.s3.amazonaws.com/?AWSAccessKeyID
= .. &安培; Signature
= ...&安培; Expires
= ...)
我想将这些文件复制到我的S3存储桶中,而不必下载它们并再次上传。
我使用的是Ruby SDK(但是如果有效,我愿意尝试别的东西......)并且不能写这样的东西。
我能够使用我的凭据(access_key和secret)初始化S3对象,授予我访问我的存储桶的权限,但是如何通过" source-side" access_key_id
,signature
和expires
参数?
为了使问题更简单 - 我甚至无法使用预签名参数对对象执行GET请求。 (不是使用常规HTTP,我想通过SDK API来实现)。
我找到了很多关于如何创建预签名网址的示例,但没有说明如何使用已经给定的参数进行身份验证(显然我没有secret_key
我的数据提供商。)
谢谢!
答案 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。