我有一个存储在 AWS S3 存储桶中的大型数据集。对 S3 存储桶的访问是非公开的,我正在使用 API 网关执行授权,然后才能访问 S3 存储桶。授权用户使用 S3.getSignedUrl() API 调用返回一个签名的 url,他们可以使用它来获取大对象。
我的问题是关于在参数对象中传递给 getSignedUrl 调用的到期持续时间的语义。
var params = {Bucket: 'bucket', Key: 'key', Expires: 60};
var url = s3.getSignedUrl('getObject', params);
我的理解是 URL 在 Expires 持续时间(本例中为 60 秒)后过期。
问题是:我可以使用一个简短的到期 URL 来返回一个大对象,而 GET 请求本身可能需要更长的时间(比如 15 分钟)?
params (map) — 传递给操作的参数。有关预期的操作参数,请参见给定的操作。此外,您还可以传递“Expires”参数来通知 S3 URL 应该 工作多长时间(强调添加)。
从安全的角度来看,我想避免提供比必要更长的过期时间。我试图理解文档中“ URL 应该工作多长时间”的含义。
直觉上,我觉得 getSignedUrl() 返回一个签名 URL,该 URL 有效期为 60 秒(在本例中),如果在签名 URL 到期内触发 GET 请求,AWS 将授权该请求并完成该请求,即使它将对象流回请求者需要 15 分钟。只要在到期之前发出对基础对象的 GET 请求,这应该可以工作。它是否正确?