amazon-s3 - 签署具有未来到期和开始日期的 S3 URL
问题描述
我们可以使用 JS SDK 为 S3 签名一个 URL,并设置一个过期日期:
const params = {Bucket: 'bucket', Key: 'key', Expires: 60};
const url = s3.getSignedUrl('getObject', params);
console.log('The URL is', url); // expires in 60 seconds
我们还可以设置签名请求有效的日期吗?
假设我想以一种直到明天才有效的方式签署一个 URL,然后在一天内有效。我该怎么做?最好使用 JS SDK。
解决方案
S3 的预签名 URL 不直接提供此功能。
如果您改为使用CloudFront 签名 URL 和自定义策略,CloudFront 确实支持这一点。
您可以创建 CloudFront 分配,并使用原始访问身份将其连接到存储桶,这允许 CloudFront 对自己进行身份验证以访问存储桶,然后在 CloudFront 分配上“限制查看器访问”,以便 CloudFront 仅在有效时允许访问提供了签名的 CloudFront URL。CloudFront 签名 URL 需要“不晚于”日期,但也支持“不早于”日期。
您需要使用CloudFront.Signer.getSignedUrl()
但不提供url
orexpires
选项。仅通过policy
选项。
这policy
是一个 JSON 字符串,包含Resource
、DateLessThan
(到期时间)和DateGreaterThan
(在此之前,访问 URL 将被拒绝)的值。您可以选择传递IpAddress
以将此 URL 的使用限制为单个 IPv4 地址或块。不支持基于 IPv6 的限制。
这是一项高级操作,但请参阅这些示例策略语句以了解预期格式。示例中显示的空格不需要包含在策略文档中。
您无需按照说明实际签署和转义 URL,因为 SDK 正在为您处理该部分……但您需要创建 JSON 策略。
推荐阅读
- angularjs - 动态添加联系号码的角度反应
- marklogic - 在marklogic中将数据插入森林
- jquery - 使用jquery验证视图中的空值
- git - 当 Jenkins 从 git origin 获取时,它给出错误“无法锁定 ref”
- javascript - 如何向原型添加属性(javascript)
- c# - Gridview 仅显示 MySQL 数据库中的 1 行 - ASP.net C#
- node.js - 类型错误:getUserInfo 不是函数
- html - 如何在 HTML/CSS 中为视频添加边框半径
- google-sheets - 在 Google 表格中以易于管理的方式汇总学生信息/呈现
- java - 无法在 MDB 中同时处理消息