【问题标题】:S3 Signed Url's expiring before argument passedS3 Signed Url 在参数传递之前到期
【发布时间】: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


    【解决方案1】:

    据我所知,使用 serverless 部署的 Lambda 函数不会默认使用您的 IAM 用户凭证。他们使用您在 serverless.yml 中提供的 IAM 角色/策略,以及由 serverless 自动生成的基本 CloudWatch Logs 权限

    问题在于您的 Lambda 函数使用来自 STS 的临时凭证(通过假定的 IAM 角色)来生成预签名 URL。 URL 将在临时会话令牌过期时过期(如果您明确指出更早的超时,则更早)。

    如果您使用 IAM 用户凭证,而不是通过 IAM 角色使用临时凭证,您可以将过期时间延长至 7 天(使用签名 v4)或 end of epoch(使用 potentially deprecated 签名 v2)。因此,您需要为您的 Lambda 函数提供 IAM 用户凭证,可能通过环境变量或 AWS Parameter Store 或 AWS Secrets Manager。

    更多信息请见Why is my presigned URL for an Amazon S3 bucket expiring before the expiration time that I specified?

    此外,这里还有一些小的编码问题:

    • 所有 AWS 方法都有一个 .promise() 选项来返回一个 Promise,因此无需使用回调,也无需手动创建 Promise 对象
    • 虽然getSignedUrl 方法提供了一个异步选项,但操作本身是同步的,因此您只需运行const url = s3.getSignedUrl(...)

    【讨论】:

      猜你喜欢
      • 2013-05-07
      • 2019-01-28
      • 2014-01-05
      • 1970-01-01
      • 1970-01-01
      • 2015-03-18
      • 1970-01-01
      • 2018-07-05
      • 1970-01-01
      相关资源
      最近更新 更多