跨账户使用私有 API 的架构模式
这篇博客由高级解决方案架构师托马斯·摩尔和高级解决方案架构师乔什·哈特撰写。
在多个团队构建和管理组件的微服务架构中,不同的 亚马逊云科技 账户通常使用私有 API 终端节点。
这篇博客文章展示了服务如何使用通过 亚马逊云科技 PrivateLink 安全发布在另一个 亚马逊云科技 账户中的

通过 亚马逊云科技 PrivateLink 跨账户使用 API Gateway 私有终端节点。
本博客介绍了跨账户使用 API 网关终端节点。要公开 API 网关背后的跨账户资源,请阅读
概述
要访问 API Gateway 私有终端节点,您必须在您的 VPC 内创建接口 VPC 终端节点(名为 execute-api)。这将在您的 亚马逊云科技 账户 VPC 和 API Gateway 服务 VPC 之间创建一个 亚马逊云科技 PrivateLink 连接。PrivateLink 连接允许流量在不通过互联网的情况下流经私有 IP 地址空间。
PrivateLink 允许访问不同 亚马逊云科技 账户中的私有 API 网关终端节点,无需使用 VPC 对等、VPN 连接或 AW
下图显示了消费者账户中的接口 VPC 终端节点如何创建回到 API Gateway 服务账户 VPC 的 PrivateLink 连接。应用于私有 API 的资源策略决定哪个 VPC 终端节点可以访问该 API。因此,确保资源策略正确无误以防止来自其他 亚马逊云科技 账户 VPC 终端节点的意外访问至关重要。

访问私有 API 网关终端节点需要通过 亚马逊云科技 PrivateLink 连接到 亚马逊云科技 服务账户 VPC。
在此示例中,资源策略拒绝与私有 API 端点的所有连接,除非账户 A 中的 aws: sourcevpce 条件与 vpce-1a2b3c4d 相匹配。这意味着来自其他 execute-api VPC 端点的连接将被拒绝。要允许账户 B 进行访问,请将 vpce-9z8y7x6w 添加到资源策略中。请参阅
有关 VPC 链接工作原理的更多详细信息,请参阅
以下部分涵盖了跨账户使用 API Gateway 私有端点的三种架构模式:
- 从区域 API 网关到私有 API 网关
- Lambda 函数在另一个账户中调用 API 网关
- 容器微服务使用 mTLS 在另一个账户中调用 API Gateway
区域 API 网关到私有 API 网关跨账户
在不同的 亚马逊云科技 账户中构建微服务时,通常使用私有 API Gateway 终端节点来允许服务间通信。有时,这些端点的一部分必须公开以供最终用户使用。其中一种模式是拥有一个中央公共 API 网关,该网关充当多个私有 API 网关端点的前门。这允许对身份验证、记录和监控进行集中管理。
下图显示了如何使用 VPC 链接实现此目的。VPC 链接使您能够将 API 网关集成连接到 VPC 内的私有资源。API Gateway VPC 接口终端节点是您想要连接的 VPC 资源,因为这将流量路由到不同 亚马逊云科技 账户中的私有 API 网关终端节点。

API 网关区域终端节点使用 API 网关私有终端节点跨账户
VPC 链接需要使用
您可以使用在
Lambda 函数调用私有 API 网关跨账户
另一个受欢迎的要求是,
下图显示了如何使用

使用来自 Lambda 跨账户的 API 网关私有端点
与前面的示例不同,不需要 NLB 或 VPC 链接。私有 API 网关上的资源策略必须允许从使用者 Lambda 函数所在的账户中的 VPC 终端节点进行访问。
由于 Lambda 函数具有 VPC 附件,因此它将使用 VPC 内部的 DNS 解析。这意味着,如果您在为 API Gateway 创建接口 VPC 终端节点时选择了 “启用私有 DNS 名称” 选项,那就是 https://{restapi-id}.execute-api。{区域} .amazonaws.com 终端节点将自动解析为私有 IP 地址。请注意,此 DNS 配置可以阻止从 VPC 内部的区域和边缘优化 API 端点进行访问。有关更多信息,请参阅
您可以使用在
使用双向 TLS (mTLS) 跨账户调用私有 API 网关
在开放银行等受监管行业开展业务的客户通常必须实现双向 TLS (mTL) 才能安全地访问其 API。它也非常适合物联网 (IoT) 应用程序使用数字证书对设备进行身份验证。

双向 TLS (mTLS) 通过带有 TLS 的证书对客户端和服务器进行验证
区域 API 网关
下图显示了如何组合使用 PrivateLink、 基于

使用 mTLS 跨账户使用 API 网关私有端点
在此架构图中,
server {
listen 443 ssl;
ssl_certificate /etc/ssl/server.crt;
ssl_certificate_key /etc/ssl/server.key;
ssl_protocols TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;
ssl_client_certificate /etc/ssl/client.crt;
ssl_verify_client on;
location / {
proxy_pass https://{api-gateway-endpoint-api};
}
}
通过 VPC 终端节点服务连接到 API 时,连接客户端必须提供客户端证书:
curl --key client.key --cert client.crt --cacert server.crt https://{vpc-endpoint-service-url}
在 VPC 终端节点和 NGINX 代理上使用 VPC 安全组规则,防止客户端绕过 mTLS 端点直接连接到 API 网关端点。
结论
这篇文章探讨了跨亚马逊云科技账户使用私有API Gateway的三种解决方案。所有解决方案的关键组件是 VPC 接口终端节点。使用
如需更多无服务器学习资源,请访问