如何配置 NAT 以与我的 Lambdas 一起使用,该 Lambdas 已经具有用于 S3 访问的 Internet 网关?
How do I configure a NAT for use with my Lambdas that already have an Internet Gateway for S3 access?
我的设置是:
S3 (website) -> API Gateway -> Lambda -> RDS
-> S3 (configuration)
-> Shopify
-> Transactional Mail
我设置了一个 Internet 网关以允许访问我的 S3 配置,我需要连接一个 NAT 以允许我向第 3 方发出呼叫。我试图通过更改 0.0.0.0/0 -> {my NAT} 的路由 Table 条目来仅使用 NAT (),但这只会导致无法访问我的S3 配置桶。
如有任何帮助,我们将不胜感激!
编辑:为了清楚起见,我已经阅读了文档,我在理解我的 Lambda 和 RDS 共享的安全组以及它们关联的子网之间的关系时遇到了问题。
当我将我的 lambda 配置为我的 RDS 实例所在的安全组的一部分时,我需要将它与至少 2 个子网关联...这些应该是新子网,而不是与我的 RDS 关联的子网实例?也就是 lambda 是否需要与 RDS 共享子网才能访问它?
如果 Lambda 函数只需要访问 VPC 资源和 S3,那么最简单的配置方法是在您的 VPC 中添加一个 S3 Endpoint。如果您的 Lambda 函数需要访问 VPC 资源以及除 S3 和 DynamoDB(目前支持 VPC 端点的仅有的 2 个服务)之外的其他资源,那么您的 Lambda 函数必须位于具有 NAT 网关的私有子网中。
public 子网中的实例可以选择具有 public IP 地址,但这不是必需的。 VPC 中的 Lambda 函数永远不会获得 public IP 地址,这就是为什么 VPC 中的 Lambda 函数必须位于具有 NAT 网关的私有子网中才能访问 Internet。
Lambda 函数获得 public IP 的唯一一次是当它们根本不在 VPC 中时。在那种情况下,他们可以访问除您的 VPC 中的资源之外的任何内容。
关于您的 "same security group" 评论的说明:在同一个安全组中不允许资源相互访问。 Lambda 函数需要位于 RDS 安全组已授予访问权限的安全组中。关于子网,Lambda 只需位于同一 VPC 中的任何子网中,不需要与 RDS 实例位于同一子网中。
我的设置是:
S3 (website) -> API Gateway -> Lambda -> RDS
-> S3 (configuration)
-> Shopify
-> Transactional Mail
我设置了一个 Internet 网关以允许访问我的 S3 配置,我需要连接一个 NAT 以允许我向第 3 方发出呼叫。我试图通过更改 0.0.0.0/0 -> {my NAT} 的路由 Table 条目来仅使用 NAT (
如有任何帮助,我们将不胜感激!
编辑:为了清楚起见,我已经阅读了文档,我在理解我的 Lambda 和 RDS 共享的安全组以及它们关联的子网之间的关系时遇到了问题。
当我将我的 lambda 配置为我的 RDS 实例所在的安全组的一部分时,我需要将它与至少 2 个子网关联...这些应该是新子网,而不是与我的 RDS 关联的子网实例?也就是 lambda 是否需要与 RDS 共享子网才能访问它?
如果 Lambda 函数只需要访问 VPC 资源和 S3,那么最简单的配置方法是在您的 VPC 中添加一个 S3 Endpoint。如果您的 Lambda 函数需要访问 VPC 资源以及除 S3 和 DynamoDB(目前支持 VPC 端点的仅有的 2 个服务)之外的其他资源,那么您的 Lambda 函数必须位于具有 NAT 网关的私有子网中。
public 子网中的实例可以选择具有 public IP 地址,但这不是必需的。 VPC 中的 Lambda 函数永远不会获得 public IP 地址,这就是为什么 VPC 中的 Lambda 函数必须位于具有 NAT 网关的私有子网中才能访问 Internet。
Lambda 函数获得 public IP 的唯一一次是当它们根本不在 VPC 中时。在那种情况下,他们可以访问除您的 VPC 中的资源之外的任何内容。
关于您的 "same security group" 评论的说明:在同一个安全组中不允许资源相互访问。 Lambda 函数需要位于 RDS 安全组已授予访问权限的安全组中。关于子网,Lambda 只需位于同一 VPC 中的任何子网中,不需要与 RDS 实例位于同一子网中。