Amazon RDS 和 VPC 终端节点连接

Posted

技术标签:

【中文标题】Amazon RDS 和 VPC 终端节点连接【英文标题】:Amazon RDS and VPC Endpoints Connectivity 【发布时间】:2021-04-03 21:56:54 【问题描述】:

我有一个驻留在默认 VPC 中的 Amazon RDS Postgres 实例。 为了连接到它,我使用了在 ElasticBeanstalk 中运行的不同 EC2 实例(Java Spring Boot 和 NodeJs)。这些实例也驻留在默认 VPC 中。 这些 EC2 实例是否通过 Internet 连接/查询 RDS 实例,或者调用不会离开 AWS 网络? 如果他们离开 AWS 网络并且呼叫通过 Internet,创建 VPC 终端节点是正确的解决方案吗?或者我的整体理解是不正确的。 非常感谢您的帮助。

【问题讨论】:

【参考方案1】:

这些 EC2 实例是否通过 Internet 连接/查询 RDS 实例,或者调用不会离开 AWS 网络?

在 VPC 内使用时,RDS 终端节点的 DNS 将解析为 私有 IP 地址。因此,即使您使用公有子网或将您的 RDS 实例设置为公开可用,通信也是私有。但是,对于来自 AWS 外部的连接,如果数据库实例是公开可用的,则 RDS 端点将解析为公共 IP 地址。

如果他们离开 AWS 网络并通过互联网进行呼叫,那么创建 VPC 终端节点是正确的解决方案吗?

没有用于 RDS 客户端连接的 VPC 端点,仅用于管理操作(创建 db-instance、终止等)。相比之下,Aurora Serverless 具有带有相应 VPC 端点的 Data API。

【讨论】:

我的数据库实例可公开访问(出于某些管理目的)。但是根据您的说明,这意味着我不需要使用 VPC 端点,来自 EC2 实例的连接将解析为私有 IP 地址并且不会离开 VPC(即使我在应用程序配置/属性文件)。那是对的吗?非常感谢@Marcin @AleksandarT 没错。如果要确保从实例查询时返回哪个 IP,以及从 aws 外部 dig 时返回什么,可以使用 dig <db-endpoint> 命令检查它。如果您的数据库是公开可用的,请确保将其安全组正确设置为仅您的外部 IP,而不是 0.0.0.0/0sg-of-the-instance,以免阻止来自您的实例的连接。为了最终的安全,最好将 rds 放在私有子网中并从外部使用 ***。【参考方案2】:

为了保护您的 DB-Instances 通信,您至少需要确保以下几点:

在私有子网中定位您的 RD(路由表不包含到 Internet 网关的默认出站路由)。 RDS 安全组仅接受来自 PostgreSQL 的 TCP 端口(通常为 5432)上的实例安全组/组的入站流量。

在这种情况下,Traffice 到 RDS 将在您的 vpc 中本地化,对于 vpc 端点,它可用于私下访问 RDS API 操作,这不是您的情况(您只需使用连接字符串将您的应用程序连接到数据库)

【讨论】:

以上是关于Amazon RDS 和 VPC 终端节点连接的主要内容,如果未能解决你的问题,请参考以下文章

AWS RDS 写入器终端节点与读取器终端节点

在VPC中访问RDS posgtgreSQL?

如何使用 terraform 连接不同 VPC 中的副本 Postgres RDS 及其源?

使用 Elastic Beanstalk 和 Amazon RDS 的连接池

Amazon RDS 和 Elastic Beanstalk 连接

为啥我无法在对等互连后从另一个 VPC 中的 EC2 实例连接 AWS RDS 实例