You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何跨账号跨区域安全暴露Lambda给外部消费者

问题描述

我在AWS账号A的us-west-2区域拥有一个Lambda,该Lambda部署在配置了严格安全组(SG)的VPC私有子网中。我希望实现让账号B、C、D能够通过API Gateway或其他方式调用该Lambda,API Gateway的调用可能来自不同区域。

调用方主机应能通过私有区域(Private Zone)解析的URL进行调用,退一步讲,也可直接安全调用API Gateway。出于安全性和性能考虑,我倾向于采用VPC和端点方案,通过Private Links实现调用。

关于VPC对等连接,所有账号的子网均为10.0.0.0/16,无需账号B、C等访问账号A内的其他主机,仅需这些账号的主机能够调用账号A中的单个API Gateway URL。

设想架构

+-------------------+        +-------------------+        +-------------------+
|    Account B      |        |    Account C      |        |    Account D      |
| (Region varies)   |        | (Region varies)   |        | (Region varies)   |
|                   |        |                   |        |                   |
| +---------------+ |        | +---------------+ |        | +---------------+ |
| |   EC2/ECS/    | |        | |   EC2/ECS/    | |        | |   EC2/ECS/    | |
| |   Fargate     | |        | |   Fargate     | |        | |   Fargate     | |
| |  10.0.0.0/16  | |        | |  10.0.0.0/16  | |        | |  10.0.0.0/16  | |
| +-------+-------+ |        | +-------+-------+ |        | +-------+-------+ |
|         |         |        |         |         |        |         |         |
|   +-----v-----+   |        |   +-----v-----+   |        |   +-----v-----+   |
|   | PrivateLink|   |        |   | PrivateLink|   |        |   | PrivateLink|   |
|   | Endpoint   |   |        |   | Endpoint   |   |        |   | Endpoint   |   |
|   +-----------+   |        |   +-----------+   |        |   +-----------+   |
+--------|-----------+        +--------|-----------+        +--------|-----------+
         |                             |                             |
         |                             |                             |
         |         AWS PrivateLink     |                             |
         +-----------------------------+-----------------------------+
                                       |
                                       |
                          +------------v-------------+
                          |      Account A           |
                          |    (Region: us-west-2)   |
                          |                          |
                          | +----------------------+ |
                          | |   VPC (10.0.0.0/16)  | |
                          | |                      | |
                          | | +------------------+ | |
                          | | |  Private Subnet  | | |
                          | | |                  | | |
                          | | |  +-----------+   | | |
                          | | |  | API       |   | | |
                          | | |  | Gateway   |   | | |
                          | | |  +-----+-----+   | | |
                          | | |        |         | | |
                          | | |    +---v---+     | | |
                          | | |    |Lambda |     | | |
                          | | |    +-------+     | | |
                          | | |                  | | |
                          | | +------------------+ | |
                          | |                      | |
                          | +----------------------+ |
                          |                          |
                          +--------------------------+

前置问题

  1. 这似乎需要使用VPC Endpoint Service,但该服务似乎需要Network Load Balancer(NLB)而非Application Load Balancer(ALB),而NLB无法将Lambda作为目标,那么正确的实现方式是什么?
  2. 即使调用方主机位于不同区域,我是否可以仅启用API Gateway的IAM/角色授权,让消费者扮演对应角色来实现访问?

解决方案

问题1:基于PrivateLink的Lambda调用实现方案

你说的没错,VPC Endpoint Service(PrivateLink服务端)确实需要绑定NLB,但NLB不能直接把Lambda设为目标。这里有两种可行的落地路径:

  • 在账号A的us-west-2区域创建私有API Gateway,选择和Lambda同VPC的私有子网部署,将Lambda配置为API的集成目标。
  • 创建NLB,采用TCP目标类型,把API Gateway的私有域名/IP设为目标。
  • 在账号A中创建VPC Endpoint Service,绑定这个NLB,并在服务配置中添加账号B、C、D的账号ID,允许它们访问。
  • 账号B、C、D各自在自身VPC中创建Interface类型的VPC端点,关联账号A的VPC Endpoint Service;同时在各自的Route 53私有托管区创建记录,将指定的私有域名解析到该VPC端点的DNS名称,实现调用方的私有域名访问。

如果不想依赖API Gateway,也可以直接用Lambda的函数URL:

  • 给账号A的Lambda开启函数URL,配置为私有访问(仅允许VPC内流量触发)。
  • 创建NLB,将Lambda函数URL的域名作为TCP目标(开放443端口)。
  • 后续步骤和路径一一致:绑定VPC Endpoint Service、授权其他账号访问、其他账号创建VPC端点并配置私有域名解析。

注意:NLB的安全组要允许来自其他账号VPC端点的流量,Lambda的安全组要允许来自API Gateway或NLB的流量。

问题2:跨区域IAM授权调用的可行性

可以实现,但有明显的限制和权衡点:

  • IAM配置逻辑:在账号A的API Gateway(或Lambda函数URL)上启用IAM授权;在账号B、C、D中创建IAM角色,给这些角色添加调用账号A资源的权限;同时在账号A的API Gateway资源策略中,允许这些跨账号角色的访问请求。
  • 网络路径限制:如果调用方在其他区域,单纯用IAM授权的话,请求会走公网到达账号A的API Gateway——这和你想要的私有访问需求冲突,而且会带来更高的延迟。如果要实现私有路径,还是得结合问题1中的PrivateLink方案。
  • 安全与性能权衡:跨区域公网调用不仅延迟高,还会暴露公网入口增加安全风险。如果你的核心需求是私有访问+低延迟,建议同时结合PrivateLink和IAM授权,既保证流量走私有路径,又通过IAM做身份验证。

简单来说:仅用IAM授权能实现跨区域调用,但无法满足私有访问的要求;要同时满足安全和性能需求,必须结合PrivateLink方案。

内容的提问来源于stack exchange,提问作者diegoaguilar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 13:07:34