AWS S3.getSignedUrl():过期语义



我有一个存储在AWS S3桶中的大型数据集。对S3桶的访问是非公共的,在访问S3桶之前,我使用API网关执行授权。授权用户使用S3.getSignedUrl() API调用返回一个签名url,他们可以使用该API获取大对象。

我的问题是关于在参数对象中传递给getSignedUrl调用的过期持续时间的语义。

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

我的理解是URL在expires持续时间(在本例中为60秒)之后过期。

问题是:我可以使用一个短到期URL,返回一个大对象,GET请求本身可能需要更长的时间(比如15分钟)?

S3 SDK文档:

params (map) -传递给操作的参数。参见给定的操作为预期的操作参数。另外,你可以也要通过"到期";参数通知S3 URL应该有多长(强调添加)。

从安全性的角度来看,我希望避免必须提供比必要的更长的过期时间。我试图理解">在文档中URL应该为工作多长时间"的含义。

直观地,我觉得getSignedUrl()返回一个有效期为60秒的签名URL(在本例中),如果在签名URL的到期期内触发GET请求,AWS将授权请求并完成请求,即使需要15分钟将对象流返回给请求者。只要在过期之前发出对底层对象的GET请求,这应该就可以工作。这是正确的吗?

假设您的大型对象可以在单个中下载GET请求是正确的,授权发生在发出该请求时。

如果您需要多个带有range-报头的GET请求,则每个GET请求都是单独授权的。

我试过了:

$ URL=$(aws s3 presign s3://mb-demo-bucket-2020/130MB.txt --expires-in=10)
$ wget -q $URL                                                            
Time: 0h:00m:23s 

下载时间为23秒,URL有效期为10秒。

最新更新