AWS S3预先签名的URL没有到期日期

时间:2014-06-03 11:43:27

标签: amazon-web-services amazon-s3 pre-signed-url

有没有什么方法可以生成预签名网址而没有任何到期日期? 我正在开发一个电子邮件应用程序,我的附件将保存在S3中。 另请告诉我通过JavaScript SDK下载附件的最佳方式是什么。

我正在使用以下代码

var params = {Bucket: 'bucket', Key: 'key', Expires: 60};
var url = s3.getSignedUrl('getObject', params);
console.log('The URL is', url);

4 个答案:

答案 0 :(得分:43)

从创建时起,预签名网址的最长到期时间为one week。因此,如果没有到期时间,就无法获得预先签名的网址。

答案 1 :(得分:2)

这取决于您如何生成S3预签名URL。具体来说,您使用哪种签名版本以及使用哪种类型的IAM凭据。

可用于创建预签名URL的凭据包括:

  • IAM实例配置文件(临时,轮换凭证):有效期长达6小时
  • STS(临时凭据):有效期长达36小时
  • IAM用户(长期凭证):使用签名v4时,有效期最长为7天
  • IAM用户(长期凭证):在使用签名v2时有效至end of the epoch

请特别注意:

  • 签名v2为potentially deprecated
  • 签名v2的有效期限与签名v4不同
  • 签名v4在v2上提供了一些security and efficiency benefits
  • 如果您使用STS凭据生成预签名URL,则该URL将在STS凭据过期时过期,如果该时间早于您请求的预签名URL的显式过期时间
  • 创建有效的预签名URL直到最佳时机不是最佳安全做法

有关更多信息,请参见:

答案 2 :(得分:1)

对您来说,某种解决方案可能是制作可为S3存储桶提供服务的AWS CloudFront发行版,并且仅对“发行源访问身份”具有有限的访问权限,然后使用CloudFront签名URL。哪个到期时间甚至可以是几年。因此,对于无限或半无限的网址,我建议使用这种解决方案。

答案 3 :(得分:0)

在客户端上,您可以这样做:

const image = image.split('&Expires')[0]

那是我使用的解决方法之一