【问题标题】:How to bypass authorization in internal lambda call如何绕过内部 lambda 调用中的授权
【发布时间】:2022-01-23 23:42:55
【问题描述】:

我在 api 网关后面实现了两个 lambda(我们称之为 A 和 B)。假设 A 是从“外部”调用的,而 B 是从外部调用的,也是从 A 调用的。 我还实现了 lambda Authorizer(基于令牌;认知)作为身份验证层。一切都按预期工作。 有没有办法绕过 B 的授权程序,仅用于来自 A 的呼叫?
天呐

【问题讨论】:

  • A通过API网关调用B?还是通过 Lambda Invoke API 调用?

标签: aws-lambda lambda-authorizer


【解决方案1】:

我过去曾为完全相同的问题探索过多种可能性。

将呼叫更改为lambda:Invoke

假设您正在为您的微服务生成一些客户端代码,您可以创建这些客户端的两个版本:

  • 外部通过 HTTP API 调用您的服务
  • internal 使用lambda:Invoke 操作直接到您的微服务。

创建镜像 VPC 私有 API

如果您使用 CDK(或类似替代方案)部署基础架构,这可能是可行的。本质上,您将现有 API 保留在原处,并创建另一个没有授权者的 internal 版本。 (请注意,根据项目的性质,您可能仍希望进行某种授权过程。)

从此时起,您可以将内部 HTTP API 的端点作为环境变量传递给 Lambda,并让它们调用它。

您可以找到更多关于此的信息,here。作为一项额外福利,您在与 API Gateway 通信时可能会获得更低的延迟,因为通过 VPC 端点的流量只会流经 AWS 网络,而不是在互联网上出去然后再进来。

将您的工作负载移至 ECS

这可能是您项目的重大变化,但值得一提。

您可以使用 ECS 创建真正的微服务。您可以在 VPC 的私有子网中运行这些服务。为了不必自己处理 IP 地址,您可以探索多种选择:

  • 有一个 VPC 内部的 Route53 托管区域(更多关于此here)。查看更多关于 ECS 服务发现here
  • 在您的 VPC 的私有子网中创建网络负载均衡器并将其端点传递给您的服务。

【讨论】:

  • 至于 lambda:Invoke - aws 是否建议将这种做法用于生产调用? IMO,这应该仅用于测试和 CDK 部署流程。至于“镜像”——这对我来说听起来太多了。谢谢
  • @tal.f 据我所知,在 Lambda 调用方面没有这样的建议(以一种或另一种方式)。
猜你喜欢
  • 2020-02-29
  • 2019-06-30
  • 1970-01-01
  • 2017-02-15
  • 2019-05-31
  • 2014-07-23
  • 1970-01-01
  • 2021-04-13
  • 2019-08-19
相关资源
最近更新 更多