S3 签名 URL 在参数通过之前就过期了

2023-11-29

我正在尝试为 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)) }); }

有人遇到过这个问题或者有任何想法可能导致我的问题吗?我缺少一些配置吗?


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

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

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

有关更多信息,请参阅为什么我的 Amazon S3 存储桶的预签名 URL 在我指定的过期时间之前就过期了?

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

  • 所有 AWS 方法都有一个 .promise() 选项来返回 Promise,因此无需使用回调,也无需手动创建 Promise 对象
  • getSignedUrl方法提供了一个异步选项,操作本身是同步的,所以你应该简单地运行const url = s3.getSignedUrl(...)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

S3 签名 URL 在参数通过之前就过期了 的相关文章

  • AWS:将子域指向不同的弹性beanstalk环境

    使用 Amazon AWS 我有两个 Elastic Beanstalk 环境 一台托管我的 React 客户端 另一台托管客户端的 Node js API I own some domain name com我想使用两个子域 app so
  • 放大发布导致 AccessDenied 错误

    我部署了一个简单的网络应用程序S3 via amplify publish 主办方有Cloudfront启用 我在设置托管时选择了放大中的 PROD 环境 并且我正在工作eu central 1地区 但每当我尝试访问Cloudfront网址
  • 如何使用java sdk创建AWS Elastic Beanstalk环境?

    任何人都可以帮助我或提供任何资源来使用 java 程序创建 Aws Elastic beanstalk 环境并在其中部署我们的应用程序吗 先感谢您 您可以下载 AWS Java SDKhere http aws amazon com sdk
  • 在 AWS elastic beanstalk 上安装 HTTPS SSL 的过程?

    我已成功安装自我认证的 SSL 以使 https 在 AWS linux EC2 上运行 然后 我在自动缩放和负载平衡环境中的弹性豆茎上尝试它 但我失败了 我所做的过程是首先启动一个新的弹性豆茎应用程序 我生成 SSL 证书的私钥和自认证公
  • 私有 EC2 和 HTTP 流量中的 AWS 应用程序

    我有一个应用程序在私有子网的 EC2 实例中运行 以增加额外的安全性 直接从与公共子网关联的面向互联网的 NLB 接收流量 我还在公共子网中配置了一个 NAT 网关 以便私有 EC2 实例可以从 Internet 下载所需的任何内容 我刚刚
  • 无法加载 Rails.config.active_storage.service

    我正在利用 Active Storage 设置一个新的 Rails 5 2 应用程序 并使用 AWS 来托管生产中的图像 但是 我在应用程序读取凭据时遇到问题 2018 07 06T08 11 52 625415 00 00 app web
  • 从 aws Glue 脚本调用存储过程

    ETL 作业完成后 在 AWS Glue 脚本中调用存储过程的最佳方式是什么 我正在使用 PySpark 从 S3 获取数据并将其存储在临时表中 在这个过程之后 需要调用一个存储过程 该存储过程将数据从临时表加载到相应的 MDS 表中 如果
  • Rails Heroku 服务器回形针 Amazon S3 - AWS::S3::Errors::RequestTimeout

    当我使用附加图像保存 konkurrencer 模型时 我在 Heroku 上收到错误 但在本地服务器上却没有 我的 Heroku 日志 36m2012 04 01T17 45 37 00 00 app web 1 0m Started P
  • 使用无服务器框架为 dynamodb 设置复合排序键

    我是 dynamodb 和 serverless 的新手 我已经阅读过复合排序键 https www alexdebrie com posts dynamodb one to many composite sort keys with hi
  • 在 AWS Tensorflow 实例中安装 SciPy

    我完全碰壁了 我正在尝试将 SciPy 安装在预先配置了 Tensorflow 的 AWS 实例上 该实例没有apt get包管理器 所以我被迫使用pip 所以我尝试过udo usr local bin pip install scipy
  • 如何仅更改音频文件的 AWS S3 内容类型

    我在 AWS S3 存储桶上有超过 50000 个文件 音频 图像 pdf 现在我面临着 Firefox 的问题 由于其内容类型 音频文件无法在 Firefox 上播放 之前一直运转良好 当我更改内容类型时 音频文件效果很好二进制 八位字节
  • Postgres 数据库中特殊的时区处理

    我的环境 I m in 法国巴黎 UTC 1 or CET It s 12am 00 00 我们在2016 年 11 月 25 日 My Postgres数据库托管于亚马逊网络服务 AWS RDS 在eu west 1 region 问题
  • 请求中包含的安全令牌已过期

    我有一个脚本 可以从 Cloudwatch 中提取大量指标以用于我们自己的内部报告 该脚本会迭代特定区域中的所有 EC2 实例 并请求过去 2 周的 5 个 cloudwatch 指标 所有可用的统计数据 每次以 5 分钟为间隔返回 5 天
  • Lambda 的 AWS 开发工具包 V2 Maven 库是什么?

    我正在尝试更新我的项目 以便通过 bom 配置来使用 SDK v2 我已经更新了我的 pom 文件 但现在RequestHandler and Context找不到 这是我的 Maven 配置文件
  • boto3 搜索未使用的安全组

    我正在使用 AWS Python SDK Boto3 我想知道哪些安全组未使用 我用 boto2 做到了 但我不知道如何用 boto3 做同样的事情 from boto ec2 connection import EC2Connection
  • 如何验证无效的 CIDR 块?

    我为我的 VPC 保留了以下 CIDR gt 10 0 0 0 22 这告诉我的是 我还有 10 位剩余用于我的主机 ip 或1 024地址 我试图计算range有效地址 因为 Amazon 在创建新的私有子网时要求提供有效的 IPv4 C
  • 使用 boto3 从 s3 下载时使用 filename 作为文件名

    我正在使用 boto3 上传文件 如下所示 client boto3 client s3 aws access key id id aws secret access key key client upload file tmp test
  • 授权标头格式错误;区域“us-east-1”是错误的;期待“eu-central-1”

    使用 Node JS 和以下配置文件 accessKeyId XXX secretAccessKey XXXX 区域 eu central 1 签名版本 v4 我仍然收到此错误消息 就好像 aws sdk 尝试访问 us east 1 Re
  • 如何使用 AWS CLI 获取最近启动的 EC2 实例?

    我当前正在使用以下 CLI 命令来获取实例公共IP地址 and 发射时间对于给定的实例Name标签 myInstanceName aws ec2 describe instances filters Name tag Name Values
  • S3 对象级别事件未触发

    我在 aws eventsbridge 中使用事件模式创建了一个事件规则 source aws s3 目标是 CloudWatch 日志组 现在 当我在存储桶级别更改某些内容时 例如存储桶权限 然后我看到云监视中捕获的事件 但是当我在 s3

随机推荐