Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services AWS S3预签名URL,无到期日_Amazon Web Services_Amazon S3_Pre Signed Url - Fatal编程技术网

Amazon web services AWS S3预签名URL,无到期日

Amazon web services AWS S3预签名URL,无到期日,amazon-web-services,amazon-s3,pre-signed-url,Amazon Web Services,Amazon S3,Pre Signed Url,有没有什么方法可以在没有任何到期日的情况下生成预签名的URL? 我正在开发一个电子邮件应用程序,我的附件将保存在S3中。 另外,请让我知道通过JavaScript SDK下载附件的最佳方式 我正在使用下面的代码 var params = {Bucket: 'bucket', Key: 'key', Expires: 60}; var url = s3.getSignedUrl('getObject', params); console.log('The URL is', url); 预签名ur

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

我正在使用下面的代码

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

预签名url的最长过期时间为创建时。因此,在没有到期时间的情况下,不可能有预先签名的url。

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

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

  • IAM实例配置文件(临时、轮换凭据):最长有效期为6小时
  • STS(临时凭证):有效期长达36小时
  • IAM用户(长期凭据):使用签名v4时最长7天有效
  • IAM用户(长期凭据):在使用签名v2时有效
特别注意:

  • 签名v2是
  • 签名v2的过期限制与签名v4不同
  • 签名v4提供了一些超过v2的功能
  • 如果使用STS凭据生成预签名URL,则当STS凭据过期时,该URL将过期,如果该过期时间早于您为预签名URL请求的显式过期时间
  • 创建在新纪元结束前有效的预签名URL不是最佳安全实践
有关更多信息,请参阅:


一个解决方案可能是让AWS CloudFront发行版为您的S3 bucket提供有限的访问权限,只访问发行版的原始访问标识,然后使用CloudFront签名的URL。有效期可以是几年。所以对于无限或半无限的URL,我推荐这样的解决方案

在客户端上,您可以执行以下操作:

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


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

您是否有指向说明此问题的文档的链接?我到处都找不到。那将非常有帮助。谢谢。我在任何文档中都没有看到。我在aws sdk附带的presign_v4文件的源代码中找到了一条注释。在我的例子中,它是通过安装ruby aws sdk gem v 1.58实现的ruby sdk。确切位置是Home/Library/Ruby/Gems/2.0.0/Gems/aws-sdk-v1-1.58.0/lib/aws/s3/presign_v4.rbCool,谢谢。我后来发现:“您可以设置的最小值是1,最大值是604800(七天)。”当您使用签名v4时,7天的限制适用。最大过期时间取决于其他因素。很好的解释:你找到解决这个问题的方法了吗?我也有同样的问题(在rails中),我知道这是一个老问题,但如果您有时间重新考虑提供的答案并将其中一个标记为已接受(如果您认为它是正确的),这将对读者有所帮助。答案是,您不能!它显然违背了拥有一个经过签名的URL的目的,您可以在给定的时间后过期&强制执行访问控制。如果你不想让你的URL过期,你可以很好地使用公共对象。我们可以在这里尝试一些技巧,将图像名和s3 bucket名保存到数据库中,而不是预签名的URL,并在显示时创建“预签名”最长过期时间的URL并发送到浏览器。IAM实例配置文件每6小时回收一次的事实让我省去了很多麻烦。谢谢你!你能发布aws cloudfront签名URL的代码/链接吗?@VishalParkash这里是aws网站的官方文档,包含如何创建这些链接的代码示例。