【发布时间】:2021-06-27 12:01:13
【问题描述】:
我正在尝试生成到 API 网关(使用 IAM 身份验证)的预签名链接,因此客户端可以访问此 API 网关后面的我的 Lambda 函数之一,而无需验证请求。这主要是为了方便客户端,因此它可能会透明地使用响应中的一些链接,无论它们指向同一个经过身份验证的 API 网关、某个 S3 存储桶还是 Internet 中的任意 URL。
为此,我使用查询参数制作 API 签名 v4(请参阅 docs 和 example)
所以,如果我尝试在us-west-2 区域和execute-api 服务范围内的以下链接上签名:
https://example.com/some/path?some=params
我会得到以下结果(using Node.js aws4 library,但在这里没关系):
https://example.com/some/path?some=params&
X-Amz-Security-Token=<Session Token Removed>
X-Amz-Date=20210330T180303Z&
X-Amz-Algorithm=AWS4-HMAC-SHA256&
X-Amz-Credential=<Access Key Removed>%2F20210330%2Fus-west-2%2Fexecute-api%2Faws4_request&
X-Amz-SignedHeaders=host&
X-Amz-Signature=884f132ad6f0c7a850e6b1d22b5fed169c13e2189b6e0d0d568d11f967f4a8bd
而且它有效!但仅在生成后的前 5 分钟......
五分钟后,我会收到以下错误响应:
{"message":"Signature expired: 20210330T175821Z is now earlier than 20210330T180403Z (20210330T180903Z - 5 min.)"}
更多详情请见this response to this question。
我尝试使用各种值(小于和大于 300 秒)添加文档中提到的 X-Amz-Expires 查询参数,但没有运气:行为不会改变。
我需要至少几个小时,最多 allowed 6 hours for links generated by IAM instance credentials,因为链接正在由另一个 Lambda 函数签名。
有什么方法可以增加 API 网关访问的预签名链接有效期?
【问题讨论】:
-
能贴出你的js代码吗?
-
这里是:github.com/mhart/aws4/issues/130(在实际应用中我还明确提供了区域)。
标签: amazon-web-services aws-api-gateway pre-signed-url sigv4