我在 api 网关后面实现了两个 lambda(我们称之为 A 和 B)。假设 A 是从“外部”调用的,B 是从外部调用的,也是从 A 调用的。
我还实现了 lambda Authorizer(基于 token ;cognito)作为身份验证层。一切都按预期工作。
有没有办法绕过 B 的授权程序,仅针对来自 A 的调用?
发送
最佳答案
对于完全相同的问题,我过去曾探索过多种可能性。
将调用更改为 lambda:Invoke
假设您正在为您的微服务生成一些客户端代码,您可以创建这些客户端的两个版本:
- external 通过 HTTP API 调用您的服务
- 内部使用
lambda:Invoke
操作直接到您的微服务。
创建一个镜像的 VPC 私有(private) API
如果您使用 CDK(或类似的替代方案)部署基础设施,这可能是可行的。本质上,您将现有的 API 保留在原处,并创建另一个没有授权方的内部版本。 (请注意,根据项目的性质,您可能仍希望进行某种授权过程。)
从现在开始,您可以将内部 HTTP API 的端点作为环境变量传递给 Lambda,并让它们调用它。
您可以找到更多相关信息,here .作为一项福利,您在与 API 网关通信时可能会获得更低的延迟,因为通过 VPC 端点的流量只会流经 AWS 网络,而不是在互联网上流出并返回。
将您的工作负载转移到 ECS
这可能是您项目的重大变化,但值得一提。
您可以使用 ECS 创建真正的微服务。您可以在 VPC 的私有(private)子网中运行这些服务。为了不必自己处理 IP 地址,您可以探索多种选择:
关于aws-lambda - 如何在内部 lambda 调用中绕过授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70823528/