首页 > 解决方案 > API 网关中是否可以有 Authorizer Lambda 和 Proxy Lambda?

问题描述

我正在通过 API Gateway 将调用路由到我的后端 API,该 API 托管在 AWS 上。客户端请求包含一个 JWT 令牌,该令牌由生成 IAM 策略的 lambda 授权方验证,然后由 API 网关缓存,然后再访问 API 端点。

我想添加另一个 lambda 函数来对请求进行一些验证,该验证与 lambda 授权方完成的 jwt 令牌验证不同。只有验证成功,客户端请求才会被传递到后端。这样的场景可能吗?

谢谢!

标签: amazon-web-servicesaws-lambdaaws-api-gateway

解决方案


API 网关中是否可以有 Authorizer Lambda 和 Proxy Lambda?

是的,可以让 API Gateway 将授权 Lambda 连接到代理 Lambda,但是,听起来您还希望将代理 Lambda 连接到单独的 Lambda。(也许您正在寻找Spring 模型中的“请求过滤器” 。)API Gateway 和 Lambda 并不像人们希望的那样支持这种结构。

如果您想实现服务级别的关注点分离,您可能需要查看Lambda to Lambda invocation。在您提出的模型中,这看起来像......

Gateway Authorizer λ -> Gateway Proxy λ (perform routing) -> "backend" λ

这为您带来的是在代理级别拥有自定义路由和验证逻辑的能力。但是,我应该发出以下警告:

  • 代理 Lambda 将需要等待后端 Lambda 完成处理以将结果返回给网关,这意味着您基本上将为每个请求支付双倍的费用(这很简单,因为您可能有不同的 Lambda 大小和不同的计费率,但你明白我的意思)
  • 您正在将配置从 AWS 控制台移出,并移到一个更受管理的解决方案中。在您的情况下,这可能不是问题,但如果您的路由解决方案的可扩展性成为瓶颈,随着您的应用程序的增长,请记住这一点

您可能感兴趣的 AWS Lambda 的一项功能是Lambda 层。这将更像是代码级别的分离而不是服务级别的分离,这在您的情况下可能足够也可能不够。

在实践中,我的团队仅使用 API Gateway Authorizer 来解决 AuthN(就像您正在做的那样)。然后,我们让每个 Lambda 处理其特定的输入验证(查询参数、请求正文等)并通过查询自定义服务来处理 AuthZ。

希望这可以帮助。祝你好运 :)。


推荐阅读