如何在集成之前验证API Gateway请求中的 header 值

0

【以下的问题经过翻译处理】 许多客户一直试图限制仅从他们的 CloudFront 分配访问 API 网关上的 API。限制的形式可以是:

  • 拥有 Cloudfront 使用的 IP CIDR 的允许列表,但如果攻击者使用代理到达目标,则可以绕过此列表
  • HTTP 标头,可以通过多种方式验证,例如:
  • 将验证普通身份验证标头和 CF 可能包含的任何额外标头的自定义授权器
  • 代理模式下的 API 网关,其中应用程序将处理请求身份验证和 CF 可能包含的任何额外标头

我的想法是在我们进入集成阶段之前验证标头,或者如果请求不是来自我信任的来源,API 网关将更早地丢弃请求,甚至浪费处理周期来调用自定义授权方中的 lambda 函数。

我目前可能不理想的解决方案是:

在方法请求中添加一个必需的标头,例如:X-CDN-XXXXXXXXXX,其中 XXXXXXXXXX 是 CloudFront 在原始请求中注入的哈希值。标头是必需的,值可以只是“CloudFront”,或者如果我们将此机制与多个 CDN 一起使用,我们可以在值中添加 CDN 名称。

更改 Bad Parameters 的默认响应以停止返回缺少参数的名称,因为该名称现在是敏感的。

增加安全性的可选机制是:

  • 在另一个标头中带有秘密的第二个 HTTP 标头

添加第二个标头,如“X-CDN-KEY”,并将秘密作为值。如果请求从这 2 个标头的存在通过方法请求验证,则请求前进到集成,应用程序将处理该请求。

这种方法可能会降低处理成本、减少延迟、降低 DDOS 攻击的风险并提高可扩展性。但更好的方法是在我们进行集成之前验证标头值(并可能调用 lambda 函数或任何后端来处理请求)

OpenAPI 支持路径、查询、标头、cookie 等参数,它们可以有模式来使用类型、格式、正则表达式和静态值来验证参数值。

但是使用 API 网关我没有看到如何将模型应用于 HTTP 标头,然后在方法请求阶段验证标头值。

profile picture
专家
已提问 5 个月前13 查看次数
1 回答
0
profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则