如何在集成之前验证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
EXPERTE
gefragt vor 5 Monaten16 Aufrufe
1 Antwort
0
profile picture
EXPERTE
beantwortet vor 5 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen