2015-07-21 2 views
0

Я знаю, как подписать политику для уникального ключа 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; 
     } 
    }; 

ответ

1

Автор этого кода на самом деле злоупотребляют слово «политики.» Это подписанный запрос, используя подпись 2.

Документы политики не поддерживаются для подписанных загрузок S3. Они используются только для загружаемых браузером POST. Единственный способ предварительно подписать URL-адрес для запроса GET (или HEAD) - это подписать запрос для определенного объекта.

Смежные вопросы