【问题标题】:AWS Cloudfront on Lambda Function via the Function URL url returning 403 FobiddenLambda 函数上的 AWS Cloudfront 通过函数 URL url 返回 403 Forbidden
【发布时间】:2023-02-24 07:34:02
【问题描述】:

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

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

    然而结果总是返回 403 Forbidden 和这个 body

    { "Message": null }
    

    而这个标题

    X-cache: Error from cloudfront
    x-amzn-ErrorType: AccessDeniedException
    

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

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-cloudfront


    【解决方案1】:

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


    问题可能是您通过AllViewer附加到缓存行为的源请求策略 (ORP)。

    为什么会这样?您正在使用AllViewer源请求策略,将从查看器收到的所有 HTTP 请求标头转发到您的源。因此,当 CloudFront 将 d123.cloudfront.net 或什至 example.com 作为配置的 CNAME 处理时,CloudFront 会将 Host HTTP 请求标头中的该值转发到您的 Lambda 函数 URL 来源。由于没有解析为该名称的函数 URL,Lambda 无法找到该函数并返回 403 访问被拒绝。

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

    【讨论】:

    • 谢谢,效果很好,就我而言,我还需要转发 originuser-agent,但这是因为我的 lambda 函数代码。
    【解决方案2】:

    您可能需要在 lambda 函数上应用基于资源的策略,以允许云端调用它。转到 lambda 函数 --> 配置 --> 权限 --> 基于资源的策略。添加一个新权限,指定云端分发的 arn 和“lambda:InvokeFunction”的操作。希望这可以帮助?

    【讨论】:

      猜你喜欢
      • 2020-10-05
      • 2021-06-24
      • 2019-09-28
      • 2022-11-07
      • 1970-01-01
      • 1970-01-01
      • 2022-11-03
      • 1970-01-01
      • 2022-10-14
      相关资源
      最近更新 更多