You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Node.js Lambda生成有效期7天的S3预签名URL?

可以通过Node.js Lambda函数实现7天有效期的S3预签名URL

要解决预签名URL有效期不足7天的问题,核心是调整Lambda执行角色的会话时长,同时确保代码正确设置过期时间:

  • 调整IAM角色的最大会话时长
    Lambda执行角色默认最大会话时长为1小时,这会限制生成预签名URL所用临时凭证的有效期,导致预签名URL无法达到7天。你需要将该角色的最大会话时长修改为AWS允许的最大值——7天(168小时):

    1. 登录IAM控制台,找到你的Lambda执行角色
    2. 进入角色详情页,点击“编辑”最大会话时长选项
    3. 设置为168小时,保存修改
  • Node.js代码实现
    确保使用的AWS SDK版本正确,并在生成预签名URL时指定7天的过期时间(604800秒)。以下是两种SDK版本的示例:

    AWS SDK v2 示例

    const AWS = require('aws-sdk');
    const s3 = new AWS.S3();
    
    exports.handler = async (event) => {
      const params = {
        Bucket: '你的存储桶名称',
        Key: '你的对象键',
        Expires: 604800 // 7天,单位秒
      };
    
      try {
        const signedUrl = s3.getSignedUrl('getObject', params);
        return {
          statusCode: 200,
          body: JSON.stringify({ signedUrl })
        };
      } catch (err) {
        console.error('生成预签名URL出错:', err);
        return {
          statusCode: 500,
          body: JSON.stringify({ error: err.message })
        };
      }
    };
    

    AWS SDK v3 示例

    const { S3Client, GetObjectCommand } = require("@aws-sdk/client-s3");
    const { getSignedUrl } = require("@aws-sdk/s3-request-presigner");
    
    const s3Client = new S3Client({ region: '你的区域' });
    
    exports.handler = async (event) => {
      const command = new GetObjectCommand({
        Bucket: '你的存储桶名称',
        Key: '你的对象键'
      });
    
      try {
        const signedUrl = await getSignedUrl(s3Client, command, { expiresIn: 604800 });
        return {
          statusCode: 200,
          body: JSON.stringify({ signedUrl })
        };
      } catch (err) {
        console.error('生成预签名URL出错:', err);
        return {
          statusCode: 500,
          body: JSON.stringify({ error: err.message })
        };
      }
    };
    
  • 注意事项

    • 预签名URL的有效期不能超过生成它的临时凭证的剩余有效期,所以必须确保角色会话时长设置为7天
    • Lambda执行角色必须具备对应S3对象的权限(如s3:GetObject或s3:PutObject,根据你的需求)
    • 确认角色的信任关系允许Lambda服务扮演该角色

内容的提问来源于stack exchange,提问作者user2976975

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 00:05:29