【问题标题】:AWS API Gateway Access Private SubnetAWS API Gateway 访问私有子网
【发布时间】:2019-04-29 19:47:34
【问题描述】:

我的 VPC 中有公共子网和 Pvt 子网。我有一些服务在 Pvt 子网的 EC2 上运行,需要由外部/移动资源访问。我该怎么做 - VPCLink 和 NLB 是这样做的方式,还是任何其他方式,在公共子网 (??) 中创建一些访问点。 Lambda 似乎是答案(现在几乎适用于 AWS 中的所有内容)——甚至不确定该访问如何对 Pvt 子网中的资源起作用。

同样的 Pvt 子网也可以访问外部资源(AWS 之外)——我如何使用 API 网关来做到这一点?

不太了解 API-Gateway(和 Lambda)相对于 VPC 和子网是如何定位的,以及网络访问控制功能如何——它们是否可以直接访问 Pvt 子网。文档对此有些沉默,只谈论 IAM - 如果有人可以解释这一点。在 Lambda 上找到这个:AWS Lambda: How to setup a NAT gateway for a lambda function with VPC access。

documentation 表示“API 网关允许您安全地连接...可公开寻址在 AWS 内部或外部托管的 Web 服务”。我在 Pvt 子网中的资源不可公开寻址 - 我想。

谢谢

【问题讨论】:

  • 你能让它工作吗?我假设您正在尝试使用网关创建公共 API,该网关正在访问私有 VPC 中 EC2 实例上托管的私有 API?

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


【解决方案1】:

在 Ben 的帮助下,这就是答案 Introducing Amazon API Gateway Private Endpoints

入站:通过 API 网关访问私有子网中托管的服务

Endpoint integrations inside a private VPC。借助此功能,您现在可以让在 EC2 上运行的后端在您的 VPC 中保持私有,而无需公开访问的 IP 地址或负载均衡器。

所以基本上 API 网关可以访问已发布的端点,即使在私有子网中也是如此。

OutBound:通过 API 网关从私有子网访问外部托管服务

API Gateway 私有端点通过AWS PrivateLink 接口 VPC 端点成为可能。接口终端节点通过在您在 VPC 中定义的子网中创建弹性网络接口来工作。然后,这些网络接口提供对在其他 VPC 中运行的服务或 API 网关等 AWS 服务的访问。配置接口端点时,您指定哪些服务流量应通过它们。使用私有 DNS 时,该服务的所有流量都被定向到接口端点,而不是通过默认路由,例如通过 NAT 网关或公共 IP 地址。

因此,您只需在 Pvt 子网中创建一个 VPC 端点 用于 API 网关。

【讨论】:

  • 不幸的是,仍然可以绕过在 VPC 中运行的任何其他东西的 API 网关身份验证,因为无法使用安全组来限制对 API 网关的访问。
【解决方案2】:

您在 EC2 上运行的服务是否提供 API? API Gateway 旨在代理 API 请求。它通常与 Lambda 结合使用,以允许 Lambda 函数处理 HTTP 请求。您的服务不需要 API 网关。您可以简单地使用应用程序负载均衡器 (ALB) 或弹性负载均衡器 (ELB)。它们可以驻留在公有子网中,而您的服务保留在私有子网中。您可以使用安全组和 VPC 路由表来允许从公共 ALB/ELB 到私有 EC2 服务的通信。

【讨论】:

  • Ben - 是的,我可以将服务公开为“API”或 REST API。我更喜欢使用 API Gateway 进行访问控制等。所以你是说公开这些“私有”服务的唯一方法是通过公共 ALB,否则 API 网关无法访问它们。因此,除非我使用 NAT 或其他方式,否则我的 Pvt EC2 无法直接访问 API 网关?我完全不清楚 VPC 链接是如何工作的 - 或者它是否适用于这种场景,至少在入站端 (?)。
  • 当您在 API Gateway 中创建 API 时,它将可以公开访问。您可以将 API 网关中的端点设置为私有子网中的 EC2。除非您想要冗余或需要多个实例,否则不需要 ELB。
  • 好的,所以当我的“私有”端点通过 API 网关公开时,这可能会回答我在 I/B 方面的问题。实际上,我确实有一个 ALB 在 Pvt 子网中面向我的服务 - 负责处理冗余等。这个 ALB 是否必须是公共的?那么我必须为 Outbound 做什么 - 是否适用相同的逻辑。
  • ALB 可以是私有的,API 网关将能够接收入站流量并将其路由到您的 ALB。如果您的 API 服务需要出站访问(您确定需要出站访问吗?),请将 NAT 网关附加到您的私有子网并设置路由,以便您的 EC2 实例可以访问 Internet。如果您的服务只需要回复请求并且出于任何其他原因不需要 Internet 访问,则您可能不需要这样做。此外,您可能会发现这篇博文很有帮助:aws.amazon.com/blogs/compute/…
  • Ben - 非常好的链接,澄清了几乎所有内容。所以对于入站,基本上我什么都不用做——API 网关支持与私有 VPC 的端点集成。我的出站场景是我的 Pvt 实例需要访问外部托管服务(不响应) - 为此我可以为 API Gateway 使用/创建 AWS PrivateLink 接口 VPC 端点,并访问这些服务(?)
猜你喜欢
  • 1970-01-01
  • 2015-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-19
相关资源
最近更新 更多