![](/img/trans.png)
[英]Why do AWS recommend public and private subnets with a nat gateway?
[英]RDS public access lost when adding public subnet with internet gateway and private subnets with NAT
任何帮助将非常感激!
最初,我们的 AWS VPC 中有 3 个子网。 VPC 有一个 IGW 和一个默认路由表,其中包含 2 条路由 - 1 条用于内部路由,0.0.0.0/0 用于 IGW。 标准的初始 VPC 设置。
在 VPC 中,我们有一个 RDS 实例,带有一个 RDS 代理,并且在我们开发解决方案时将数据库设置为公共访问。 DB 与默认 VPC SG 以及特定 SG 相关联,该特定 SG 将 IP 地址列入白名单以通过公共端点连接数据库。
同样在 VPC 中,我们有一个使用默认 VPC 安全组和上述 3 个子网的 Lambda。
Lambda 可以连接到 RDS 代理,我们可以通过列入白名单的 IP 连接到 RDS 公共端点 - 这符合预期。
问题:
现在我们需要为 Lambda 提供互联网访问(它需要与 RedisLabs 连接)。 为此,我们添加了:
有了这个地方,Lambda 仍然可以通过 RDS 代理(预期)访问数据库,现在可以访问互联网(预期),但是我们通过面向公众的端点失去了与数据库的连接。
配置中是否缺少允许 Lambda 访问 RDS 和 Internet 并且还允许我们通过公共端点访问 RDS 的内容? 或者我们是否需要公共子网中的 SSH 隧道来执行此操作?
提前致谢!
附加信息:
RDS 当前具有以下 SG: - prod-auth-service-rds - 允许来自我列入白名单的 IP 的 TCP 3306 - sg-11cb746b(默认) - 所有流量,自引用源 (sg-11cb746b)
RDS 位于子网中: - subnet-06d1124e - 现有私有子网 - subnet-ba82bce1 - 现有私有子网 - subnet-3344b955 - 现有私有子网
NAT 在子网 00245f33edbae3358 上
编辑:重新阅读您的回复,如果您的 RDS 数据库位于私有子网上,那么无论您在数据库设置中设置为该选项的内容如何,它都无法公开访问。
————
查看附加信息后,我认为问题在于您的 RDS 安全组。 它只允许来自您默认安全组或您的个人白名单 IP 中的事物的流量。
即使 lambda 位于您的默认安全组中,RDS 也会将流量视为来自您的 Lambda,他们将其视为来自没有安全组的 NAT Gataway。
您可以通过将 NAT 网关的 EIP 作为额外的白名单 IP 添加到 RDS SG 的入站规则来解决此问题。
事实证明,我需要做的就是在与现有 RDS 子网分开的私有子网中创建 Lambda。 然后,单独的子网需要一个将 0.0.0.0/0 转发到 NAT 的路由。
Lambda 现在可以出站 Internet 访问和 RDS 访问,而 RDS 实例仍然可以通过其现有的公共端点访问。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.