【发布时间】:2014-02-26 13:57:28
【问题描述】:
是否有人成功地使用 AWS 开发工具包为 S3 存储桶中的对象生成签名 URL,这些对象也可以在 CloudFront 上运行?我正在使用JavaScript AWS SDK,通过 S3 链接生成签名 URL 非常简单。我刚刚创建了一个私有存储桶并使用以下代码生成 URL:
var AWS = require('aws-sdk')
, s3 = new AWS.S3()
, params = {Bucket: 'my-bucket', Key: 'path/to/key', Expiration: 20}
s3.getSignedUrl('getObject', params, function (err, url) {
console.log('Signed URL: ' + url)
})
这很好用,但我还想向我的用户公开一个 CloudFront URL,以便他们可以通过使用 CDN 获得更快的下载速度。我设置了一个 CloudFront 分配,它修改了存储桶策略以允许访问。然而,在这样做之后,任何文件都可以通过 CloudFront URL 访问,亚马逊似乎忽略了我链接中的签名。在阅读了更多关于此的内容后,我看到人们生成一个 .pem 文件以获取与 CloudFront 一起使用的签名 URL,但为什么 S3 不需要这样做?似乎 getSignedUrl 方法只是使用 AWS 密钥和 AWS 访问密钥进行签名。以前有人做过这样的设置吗?
更新: 经过进一步研究,CloudFront 处理的 URL 签名似乎与 S3 [link] 完全不同。但是,我仍然不清楚如何使用 Javascript 创建签名的 CloudFront URL。
【问题讨论】:
-
我不明白你的实现。你能详细解释一下吗?我需要为我的 android 应用程序做同样的事情。所以我的想法是:我的客户端将向我的服务器发送请求——>我的服务器将请求 AWS S3 获取签名 URL——>我的服务器将把这个 URL 发送回客户端完成上传部分。这是不是很好的方法。我的服务器是用 node.js 编写的。你能帮我做这件事吗? ?
-
如果它是用节点编写的,你应该可以使用我写的aws-cloudfront-sign 实用程序。那里的 README.md 应该解释你需要做什么。
标签: javascript node.js amazon-web-services amazon-s3 pre-signed-url