Lambda 函数上的 AWS Cloudfront 通过函数 URL url 返回 403 Fobidden

ndk*_*-fj 4 amazon-web-services amazon-cloudfront aws-lambda

我已经设置了 lambda 函数 url 和 cloudfront 系统

  1. Lambda Function Url 很简单,是一个将返回图像或 json 值的函数
  2. Cloudfront 使用此设置:
    • 起源:
      • 源域:{LAMBDA FUNCTION URL}
      • 协议:仅限 HTTPS - TLSv1
      • 启用起源护盾:否
    • 行为:
      • 观众:Redirect HTTP to HTTPS
      • 允许的 HTTP 方法:GET, HEAD
      • 限制查看者访问:No
      • 缓存策略:Managed-CachingDisabled
      • 原产地请求政策:AllViewer

然而,结果总是403 Forbidden以这个身体返回

{ "Message": null }
Run Code Online (Sandbox Code Playgroud)

还有这个标题

X-cache: Error from cloudfront
x-amzn-ErrorType: AccessDeniedException
Run Code Online (Sandbox Code Playgroud)

是否有任何我错过的设置导致此错误?我已经测试使用邮递员和浏览器直接点击函数 url,它工作正常

Cri*_*ian 7

更新- 在您的源请求策略中,设置新的AllViewerExceptHost托管策略。这将转发除标题之外的所有查看器标题Host。建议您将此与CachingDisabled托管缓存策略配对。

\n
\n

问题可能是您通过附加到缓存行为的AllViewer源请求策略 (ORP)将Host标头转发到您的源(Lambda 函数 URL) 。

\n

为什么会出现这种情况?您正在使用AllViewer源请求策略,该策略将从查看器收到的所有 HTTP 请求标头转发到您的源。d123.cloudfront.net因此,当 CloudFront 处理\xe2\x80\x94 或example.com配置的 CNAME\xe2\x80\x94请求时,CloudFront会将HostHTTP 请求标头中的该值转发到您的 Lambda 函数 URL 源。由于没有解析为该名称的函数 URL,Lambda 无法找到该函数并返回 403 Access Denied。

\n

如何解决:创建一个仅转发您需要的标头的自定义源请求策略,而不是附加AllViewer源请求策略。重要的是,不要转发Host标头。配置完成后,CloudFront 将使用您的源主机名作为 Lambda 能够解析的主机标头\xe2\x80\x94。

\n