我有一个应用程序,其中客户端托管在具有 CloudFront 分配的 S3 上。API 位于带有 WAF 的 API 网关后面,客户端向 API 发出 http 请求以获取和发布数据。
我想限制对 API 的访问,使其只能从客户端获得,并且当有人尝试直接访问 API 时它应该返回错误。
诀窍是 API 向第三方公开,因此我不能使用 API Gateway 授权方,因为它们必须具有直接访问权限。
我在 CloudFront 中设置了一个自定义源头 ( My-Secret-Header: 1234567890qwertyuiop
),我认为我可以在 WAF 中创建一个规则以允许使用此头的请求(加上基于其他标准的第 3 方,但该部分运行良好,它不是问题),并阻止其他所有内容。
问题是它My-Secret-Header
永远不会进入 WAF,并且它不会被添加到源自客户端应用程序的 http 请求中。
我还尝试使用 Lambda@Edge 添加自定义标头,但没有成功。我使用 Lambda@Edge 和event.Records[0].cf.request.origin.s3.customHeaders
节目My-Secret-Header
(这是意料之中的)创建了大量的登录信息。
将自定义标头添加到客户端请求的最佳方法是什么,以便可以在 WAF 中创建规则?