允许从同一 VPC 上的 EC2 实例访问 RDS 实例

允许从同一 VPC 上的 EC2 实例访问 RDS 实例

我无法访问 MySQL RDS 实例。

我正在尝试从 EC2 实例连接到 RDS 实例。RDS 实例和 EC2 实例都包含在同一 VPC myVPC 中。我已通过检查 RDS 实例和 RC2 实例下列出的 VPC 是否匹配来确认这一点。

我发现有关此问题的大部分问题都围绕着安全组。许多用户都遇到了这个问题,他们的问题通过确保与 RDS 实例关联的 VPC 安全组与他们的 EC2 实例相同而得到解决。就我而言,两个实例都在同一个 VPC 上并使用同一个安全组。在这个安全组中,我有一条规则,允许所有入站流量跨越我的 VPC 的整个 IP 范围(例如,172.35.0.0/16)。为了使它完全正常工作,我允许所有流量跨越此安全组的所有 IP 地址的所有端口。这仍然没有奏效。

阅读一些文档后,有人建议确保子网与 VPC 使用的相同路由表相关联。我通过转到将 myVPC 内的所有子网与此路由表相关联的路由表来做到这一点。

我也尝试过使用和不使用弹性 IP。我能够使用弹性 IP 地址连接到我的 EC2 实例。

我意识到这个问题被问得很多。到目前为止,我还没有遇到一个能解决我的问题的人。

编辑:添加更多安全设置细节 ec2 实例和 RDS 都使用相同的安全组。该安全组中有一行内容如下

MYSQL TCP 3306 172.35.0.0/16我的 CIDR 范围

我补充道

MYSQL TCP 3306 172.35.0.1/32我的 ec2 实例私有 IP

以上方法均无效。

确实起作用的是在我的网络 ACL 设置下我更改了一行

1 MySQL(3306) TCP(6) 3306 172.35.0.1/32 ALLOW

1 ALL TRAFFIC ALL ALL 0.0.0.0/32 ALLOW

所以我的问题已经解决了,但现在我又有另一个问题。如何避免让 3306 对所有入站连接开放。我可能会将此作为新问题发布并链接到此处。

答案1

几周前我自己也遇到过这个问题。就我而言,我忘记允许我的 EC2 实例在端口 3306 上向 VPC CIDR 发出出站流量。尝试向您的 EC2 实例安全组添加一条出站规则,如下所示:

Type    Protocol    Port Range    Destination
MYSQL   TCP         3306          172.35.0.0/16

答案2

您确定您的数据库位于 EC2 实例所在的 VPC 内吗?假设如此,请创建一个安全组,允许 3306 从 VPC 的 CIDR 范围入站。

为了以稍微更熟悉的方式进行测试,您可以临时构建一个带有 MySQL 的实例,只要它也在您的 VPC 中,就应该以相同的方式工作。

确保您的 RDS 位于可从 VPC 中的其他机器访问的子网组中,例如,如果您是多可用区等,请确保您能够在子网之间路由。

更新:还请尝试使用 VPC IP,而不是外部 DNS 名称来访问它,您的 DNS 可能指向外部网络地址或出现故障。

答案3

我遇到了同样的问题。我使用免费套餐的微型实例进行测试。如果您的 RDS 和 EC2 不在同一个可用区,那么您将需要使用公共 IP。如果它们在同一个区域或 EC2 在多个区域之间共享,那么您可以使用私有 IP。

答案4

在为同一问题寻找解决方案之后,我想提供看似可行的方法。最初,我的 RDS 和 EC2 实例具有不同的安全组。

在更新 RDS 以使用 VPC 安全组后,我仍然无法连接。最终,当我为 VPC 上的 CDIR 范围添加了端口 3306 的入站规则时,问题终于解决了,正如 @TheFiddlerWins 所回答的那样。

VPC 安全组应该已经封装了该规则,所以令人失望的是,我无法确切地说出为什么这会导致它起作用,但此后它确实起作用了。

相关内容