我知道如何为唯一的S3密钥签署策略,但是是否可以创建允许从/project/1234/*
读取所有文件(我不是在讨论列出对象)的读取策略 - 所以它应该允许阅读前缀为/project/1234
的所有文件。
要签署单个密钥,我使用以下代码(在某些lib中找到):
this.readPolicy = function(key, bucket, duration, download, cb) {
var dateObj = new Date;
var expiration = new Date(dateObj.getTime() + duration * 1000);
expiration = Math.round(expiration.getTime() / 1000);
var policy = 'GET\n\n\n' + expiration + '\n';
policy += '/' + bucket + '/' + key;
if (download) {
policy += '?response-content-disposition=attachment;filename=' + encodeURIComponent(download);
}
var signature = crypto.createHmac("sha1", this.secretKey).update(policy);
var url = 'https://s3.amazonaws.com/';
url += bucket + '/';
url += key;
url += '?AWSAccessKeyId=' + this.accessKey;
url += '&Expires=' + expiration;
url += '&Signature=' + encodeURIComponent(signature.digest("base64"));
if (download) {
url += '&response-content-disposition=attachment;filename=' + encodeURIComponent(download);
}
if (cb) {
cb(null, url);
} else {
return url;
}
};
答案 0 :(得分:1)
该代码的作者实际上滥用了“#34; policy”这个词。"这是使用签名版本2的签名请求。
签名的S3下载不支持策略文档。它们仅用于基于浏览器的POST
上传。预先签署GET
(或HEAD
)请求的网址的唯一方法是签署特定对象的请求。