AWS 将 public 可访问 RDS 与访问 Internet 的 Lambda 相结合?

AWS combining public accessible RDS with Lambdas accessing Internet?

我有一个包含 3 个私有子网和一个 public 子网的 VPC。在 3 个私有子网中,我托管了 RDS 和 Lambda 函数。在 public 子网中,我托管了一个 NAT 网关。 3 个私有子网通过路由 table 指向 NAT 网关。 在此设置中,我的 Lambda 函数成功地与我的 RDS 和互联网通信,但我无法从我的家用计算机访问 RDS,因为 NAT 阻止了对 VPC 的外部访问。我现在的问题是:

如何让 Lambda 函数访问 VPC 内的 RDS 并使 RDS public 同时从我的计算机访问?

P.S.: 直到现在我总是需要手动更改我的 3 个私有子网到 IGW 的路由以使 RDS 可访问。

您需要在 public 子网中创建 堡垒主机。堡垒主机提供从 public 互联网到您的私有 VPC 子网的连接。

A​​WS 的一个常见堡垒主机是 OpenVPN。您可以在 AWS Marketplace 中找到预配置的 AMI。

AWS Security: Bastion Host, NAT instances and VPC Peering

OpenVPN

首先澄清一下:NAT 没有阻止对 VPC 的外部访问。 NAT 网关只是提供对 VPC 中没有 public IP 地址的资源的互联网访问。 NAT 与您能否从外部访问 VPC 无关。事实上,您还没有做任何事情来允许外部访问。

您可以通过以下选项从外部访问您的 RDS 实例:

  • 在 public 子网中将 VPN 服务器添加到您的 VPC,这将允许您在建立 VPN 连接后连接到 RDS 服务器。
  • 将您的 RDS 服务器移动到 public 子网并启用 "publicly accessible" 标志,这样您就可以直接连接到 RDS 服务器。
  • 在 public 子网中创建一个 Linux 堡垒主机,这将允许您通过 SSH 端口转发连接到 RDS 服务器。

在任何这些场景中,只要Lambda函数和RDS实例在同一个VPC中,那么Lambda函数就可以访问RDS实例。只要 Lambda 函数保留在带有 NAT 网关的私有子网中,它就可以访问互联网。

用户 reggi 在 gist.github 上有一个指南,标题为 如何设置 AWS lambda 函数以与 Internet 和 VPC 通信。该指南将引导您完成设置 AWS Lambda 以与 Internet 和 VPC 对话的步骤。

您可以在评论中找到有关将 lambda 连接到 RDS 和互联网的复杂性的解决方案,同时在没有 VPN 的情况下维护可公开访问的 RDS,其中一些信息在评论中。我已在此处添加此信息以防信息变得不可用。

To allow lambdas to have internet access, RDS access and to allow the RDS to be publicly available (hopefully within a specific ip range - i.e your static IP), your RDS's subnet group must contain only public subnets; that is subnets which have a route table that points 0.0.0.0/0 to an IGW which is attached to your VPC. You must create a subnet group in Amazon RDS > Subnet Groups which contains the public subnets and then launch an RDS instance with this new subnet group (or configure your current system to these specifications).

https://gist.github.com/reggi/dc5f2620b7b4f515e68e46255ac042a7