将查询参数从 cloudfront 传递到 api 网关

han*_*ome 3 amazon-web-services amazon-cloudfront

我创建了一个 lambda 函数,前面有一个 API 网关和 Cloudfront 分发

在云前端行为中我禁用了缓存

在此输入图像描述

这是 lambda 函数:

exports.handler = async (event) => {
    const response = {
        statusCode: 200,
        body: JSON.stringify('rawQueryString is: ' + event.rawQueryString),
    };
    return response;
};
Run Code Online (Sandbox Code Playgroud)

调用 api 网关我在 lambda 响应中看到查询字符串 https://xxx.execute-api.us-east-1.amazonaws.com/api?name=john

rawQueryString is: '?name=john'

调用cloudfront发行版我看不到lambda响应中的查询字符串 https://xxx.cloudfront.net/api?name=john

rawQueryString is: ''

我尝试使用“来源请求政策”

在此输入图像描述

但现在当我打电话https://xxx.cloudfront.net/api?name=john

我明白了

{
    "message": "Forbidden"
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*cin 7

您应该为您的缓存行为设置源请求策略。您可以尝试使用 AWS 托管的Managed-AllViewer策略或创建新策略来转发查询字符串:

在此输入图像描述

  • 我选择了预定义的 Managed-AllViewer 之一,它应该转发标头、cookie 和查询字符串,对吗?但这样做之后我收到消息:禁止 (2认同)