AWS将公共可访问的RDS与Lambdas组合访问Internet?

时间:2017-11-12 08:08:03

标签: amazon-web-services aws-lambda amazon-rds nat vpc

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

如何让Lambda函数访问VPC中的RDS并同时从我的计算机上公开RDS?

P.S。:到目前为止,我总是需要手动更改我的3个私有子网到IGW的路由,以使RDS可访问。

3 个答案:

答案 0 :(得分:2)

首先澄清:NAT不会阻止对VPC的外部访问。 NAT网关只是为您的VPC中没有公共IP地址的资源提供Internet访问。 NAT与您能够从外部访问VPC无关。事实上,你还没有做任何事情来允许外部访问。

您可以使用以下选项从外部访问RDS实例:

  • 将VPN服务器添加到公共子网中的VPC,这样您就可以在建立VPN连接后连接到RDS服务器。
  • 将您的RDS服务器移至公有子网并启用"可公开访问的" flag,允许您直接连接到RDS服务器。
  • 在公有子网中创建Linux Bastion Host,允许您通过SSH端口转发连接到RDS服务器。

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

答案 1 :(得分:1)

您需要在公有子网中创建堡垒主机。堡垒主机提供从公共Internet到您的私人VPC子网的连接。

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

AWS Security: Bastion Host, NAT instances and VPC Peering

OpenVPN

答案 2 :(得分:0)

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

您可以在注释解决方案中找到有关将lambda连接到RDS和Internet的复杂性,同时保持无需VPN即可公开访问的RDS的复杂性,其中一些信息在注释中。我在此处添加了此信息,以防该信息不可用。

  

要允许Lambda访问Internet,请访问RDS并允许   RDS可以公开获得(希望在特定的IP范围内-   即您的静态IP),您的RDS的子网组必须仅包含公共   子网子网中有一个路由表指向   0.0.0.0/0到连接到VPC的IGW。您必须在Amazon RDS>子网组中创建一个包含公共子网的子网组   子网,然后使用此新子网组启动RDS实例(或   将您的当前系统配置为符合这些规范。

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