我正在尝试为 S3 存储桶对象生成签名 URL,最大过期时间为 604800 秒或 7 天。然而,经过测试,我发现链接在 24 小时内就会过期。经过一番挖掘,我发现这篇文章声称只有当 aws-sdk 获得 IAM 用户授权并且 s3 库使用 AWS Signature v4 时,7 天到期才可用。
我肯定使用 v4:exports.getS3 = () => new AWS.S3({region : 'us-east-1', signatureVersion: 'v4'})
此外,据我所知,在使用 sdk 时,在没有任何其他操作的情况下,通过无服务器部署的 lambda 应该默认为我的 IAM 用户凭证:const AWS = require('aws-sdk')
这是前面提到的文章:https://aws.amazon.com/premiumsupport/knowledge-center/presigned-url-s3-bucket-expiration/
我还定义了委托给我的用户的 IAM 角色以启用对 s3 的访问iamRoleStatements:
- Effect: Allow
Action:
- dynamodb:*
Resource: "*"
- Effect: Allow
Action:
- ssm:*
Resource: "*"
- Effect: Allow
Action:
- s3:*
Resource: "*"
我已经证实这并不像传递错误的参数那么愚蠢exports.getSignedURL = (key,bucket,method,expiration) =>{
console.log(`GETTING SIGNED URL WITH EXPIRATION ${expiration}`)
return new Promise((resolve, reject) => {
exports.getS3().getSignedUrl(method,{
Bucket: bucket,
Key : key,
Expires : expiration
},(err,url)=>err?reject(err):resolve(url))
});
}
有人遇到过这个问题或者有任何想法可能导致我的问题吗?我缺少一些配置吗?