我有一个不完全正统的 CF->S3 设置。这里的相关组件是:
Cloudfront 分发与
origin s3.ap-southeast-2.amazonaws.com
添加 S3 授权(版本 2)查询字符串(使用函数使用的 S3 策略签名)的 Lambda@Edge 函数(原始请求)。
Lambda 返回的请求是完全正确的。如果我记录 uri、主机和查询字符串,我会得到我请求的文件。但是,如果我直接通过 Cloudfront 链接访问它,请求将失败,因为它不再使用AWSAccessKeyID
,而是选择使用x-amz-cf-id
(但使用相同的签名、Amz-Security-Token 等)。更正:它可能不会替代,但需要补充。
我知道是这种情况,因为我已经退回了
StringToSign
和SignatureProvided
。这些都与 Lambda 响应匹配,除了AWSAccessKeyID
已替换为x-amz-cf-id
.
这显然是一个非常具体的问题。我可能不得不考虑改造这个架构,但我不希望这样做。有几个要求导致我放弃了这种不完全常规的设置。