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