Я знаю, как подписать политику для уникального ключа S3, но можно ли создать политику чтения, которая позволит читать все файлы (я не говорю об объектах перечисления) с /project/1234/*
- так что это должно позволить читать все файлы с префиксом /project/1234
.Как создать политику чтения S3 для префикса?
Чтобы подписать один ключ я использую следующий код (найден в некоторых ОМТ):
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;
}
};