我正在尝试生成指向 API Gateway 的预签名链接(使用 IAM 身份验证),因此客户端可以访问此 API Gateway 后面的我的 Lambda 函数之一,而无需验证请求。这主要是为了方便客户端,因此它可以透明地使用响应中的一些链接,无论它们指向同一个经过身份验证的 API 网关、某个 S3 存储桶还是 Internet 中的任意 URL。
为此,我使用查询参数制作 API 签名 v4(请参阅文档和示例)
因此,如果我尝试签署以下us-west-2
区域和execute-api
服务范围的链接:
https://example.com/some/path?some=params
我会得到以下结果(使用 Node.jsaws4
库,但在这里没关系):
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 分钟......</p>
五分钟后,我将收到以下错误响应:
{"message":"Signature expired: 20210330T175821Z is now earlier than 20210330T180403Z (20210330T180903Z - 5 min.)"}
有关更多详细信息,请参阅对此问题的回复。
我尝试X-Amz-Expires
使用各种值(小于和大于 300 秒)添加文档中提到的查询参数,但没有运气:行为不会改变。
对于由 IAM 实例凭证生成的链接,我需要至少几个小时,最多允许 6 小时,因为链接正在由另一个 Lambda 函数签名。
有什么方法可以增加 API 网关访问的预签名链接有效期?