【发布时间】:2019-09-05 00:05:30
【问题描述】:
我正在尝试为 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'})
此外,据我所知,通过 serverless 部署的 lambda 在使用 sdk 时应默认使用我的 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))
});
} 那样愚蠢
有没有人遇到过这个问题或有任何想法可能导致我的问题?有没有我遗漏的配置?
【问题讨论】:
标签: amazon-web-services amazon-s3 aws-lambda serverless-framework