API网关中是否可以有授权者Lambda和代理Lambda?

时间:2019-01-02 21:18:39

标签: amazon-web-services aws-lambda aws-api-gateway

我将调用路由到通过API网关托管在AWS上的后端API。客户端请求包括一个JWT令牌,该令牌由Lambda授权者验证,该Lambda授权者生成IAM策略,然后在到达API端点之前由API网关缓存。

我想添加另一个lambda函数来对请求进行一些验证,该验证与lambda授权者完成的jwt令牌验证是分开的。仅当验证成功时,客户端请求才会传递到后端。这样的情况可能吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

  

API网关中是否可以有授权者Lambda和代理Lambda?

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

如果要实现关注点的服务级别分离,则可能需要研究Lambda to Lambda invocation。在您建议的模型中,这看起来类似于...

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

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

  • 代理Lambda将需要等待后端Lambda完成处理才能将结果返回给网关,这意味着您实际上将为每个请求支付双倍的费用(这是简化的,因为您可能拥有不同的Lambda大小,不同的计费率,但我明白了)
  • 您要将配置从AWS控制台移出,而移入一个更具托管性的解决方案。在您的情况下,这可能不是问题,但是如果您的路由解决方案的可扩展性成为瓶颈,那么随着应用程序的增长,就需要牢记这一点

您可能会对AWS Lambda感兴趣的一项功能是Lambda Layers。与服务级别的分离相比,这更多的是代码级的分离,这在您的情况下可能足够,也可能不够。

在实践中,我们的团队仅使用API​​网关授权器来解决AuthN(听起来好像您在做)。然后,我们让每个Lambda处理其特定的输入验证(查询参数,请求正文等),并通过查询自定义服务来处理AuthZ。

希望这会有所帮助。祝你好运:)。

答案 1 :(得分:0)

您可以在API网关上实现Request Validation,但主要用于检查HTTP调用是否“有效”;表示标头存在且不为空白,JSON有效负载遵循模型。