Amazon S3 Requester Pays Buckets不请求用户付费

时间:2014-08-12 17:57:52

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

我正在尝试设置Amazon S3存储桶,以便用户可以从网页下载文件,但他们付费下载而非我。我创建了一个桶选择Requester Pays Bucket。我有PHP代码来生成用户下载文件的链接。但是,当我测试链接时,文件开始下载而不要求测试用户付费。我在文档网站上看到要添加" x-amz-request-payer:requester"链接但似乎没有效果。任何帮助都会很棒。

以下是我生成链接的代码:

$string = sprintf("GET\n\n\n%s\n%s\n/%s/%s", $time, "x-amz-request-payer:requester" ,$bucket, $pathToObject);
// Generate an HMAC-SHA1 signature for it
$signature = base64_encode(hash_hmac('sha1', $string, $secretKey, true));
// Create the final URL
return sprintf(
"https://s3.amazonaws.com/%s/%s?%s",
$bucket,
$pathToObject,
http_build_query(array(
'AWSAccessKeyId' => $key,
'Expires' => $time,
'Signature' => $signature,
'x-amz-request-payer' => 'requester'
))
); 

1 个答案:

答案 0 :(得分:2)

您似乎缺少一些关于“Requester Pays”存储桶的概念......与您的意图相比较,以及您的代码正在做什么。

在您发布的代码中, 是请求者,而不是点击该链接的人。这是您用来签署请求的AWS密钥和秘密,您将需要为下载付费。这看起来不像你想要的那样,但这就是“Requester Pays”桶的作用 - 它们为拥有用于签署请求的AWS密钥的帐户开账单。

需要x-amz-request-payer标头,以便没有欺骗,请求者知道他们正在为他们发送的请求付费(因为他们必须为其添加该标头)工作)。

因此,通过Requester Pays存储桶,我可以使用我的AWS密钥(假设您授予我权限)并访问您的资源......并且AWS会向我收取转账费用......但是没有“输入您的结算信息“请求Pays存储桶的弹出窗口会显示在想要下载数据的人的屏幕上。

  

基本上,存储桶拥有者将存储桶指定为请求者付款存储桶,然后请求者将x-amz-request-payer=requester标头添加到GET请求中,以表明他们同意为数据传输和请求付费。

     

- http://docs.aws.amazon.com/AmazonDevPay/latest/DevPayDeveloperGuide/S3RequesterPays.html

所有这些都说明了,您可以Amazon DevPay使用sell access to S3 data in a Requester Pays bucket,但这似乎需要您使用DevPay develop and register a product(例如网络应用),您的客户将由亚马逊付款收费。