AWS Lambda在HTTP请求中带有“ X-Forwarded- *”标头的问题

时间:2018-07-10 20:47:17

标签: aws-lambda amazon-cloudfront serverless-framework aws-serverless

我使用Serverless开发了一个AWS Lambda代理,以便调用私有API,处理其结果并返回它。

这很简单,尽管在HTTP请求中设置了“ X-Forwarded-For”后,私有API不会返回任何内容。

我在CloudFront,CloudFormation或API Gateway中都找不到将此标头列入黑名单的方法。

我应该在哪里找?

作为参考,我使用的serverless.yml

service: mylambda
provider:
  name: aws
  runtime: java8
  memorySize: 1024
  timeout: 240
package:
  artifact: target/awslambda-1.0-SNAPSHOT.jar
functions:
  leboncoinlist:
    handler: com.example.awslambda.handler.HttpRequestHandler
    events:
        - http:
            path: list
            method: post
            cors: true

2 个答案:

答案 0 :(得分:1)

Amazon Lambda不允许设置X-Forwared- *标头。它已经是列入黑名单的标头的一部分。如果将其设置为Lambda函数的一部分,则CloudFront的默认行为是该请求未通过CloudFront验证。 CloudFront将HTTP状态代码502(错误网关)返回给查看器。

有关黑名单标题列表的更多信息,请参见以下链接:https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-requirements-limits.html#lambda-cloudfront-star-headers

如果要CloudFront添加任何CloudFront- *标头,则必须将CloudFront配置为基于这些标头进行缓存。有关将CloudFront配置为基于指定的标头进行缓存的信息,请参见以下链接:https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesForwardHeaders

请注意,对于查看器事件,CloudFront-Viewer-Country被列入黑名单。不会公开列入黑名单的标头,并且Lambda @ Edge函数无法添加标头。如果您的Lambda函数添加了列入黑名单的标头,则该请求将无法通过CloudFront验证,并且CloudFront会向查看器返回HTTP状态代码502(错误网关)。

希望这会有所帮助。

答案 1 :(得分:0)

您是否正在使用leboncoin.fr的API?如果是这样,似乎他们使用datadome来启用漫游器保护,这将解释在何处设置此标头以及为什么该API会阻止您的请求。