无法连接到公共Postgresql RDS实例


23

我在一个VPC中创建了一个基本的测试PostgreSQL RDS实例,该实例具有一个公共子网,应该可以通过公共Internet进行连接。它使用默认的安全组,该安全组已为端口5432打开。当我尝试连接时,它失败。我一定会错过一些非常简单的东西-但是我对此非常迷失。

这是数据库设置,请注意它被标记为Publicly AccessibleRDS设置

这是安全组设置,请注意它已完全打开(在上方的RDS设置中,通过端点旁边的绿色“授权”提示来确认): 安全组设置

这是我要用来连接的命令:

psql --host=myinstance.xxxxxxxxxx.us-east-1.rds.amazonaws.com \
     --port=5432 
     --username=masteruser 
     --password 
     --dbname=testdb

这是我尝试从优胜美地MacBook Pro连接时得到的结果(请注意,它解析为54. * IP地址):

psql: could not connect to server: Operation timed out
    Is the server running on host "myinstance.xxxxxxxxxx.us-east-1.rds.amazonaws.com" (54.xxx.xxx.xxx) and accepting
    TCP/IP connections on port 5432?

我没有启用任何类型的防火墙,并且能够连接到其他提供程序(例如Heroku)上的公共PostgreSQL实例。

任何故障排除提示将不胜感激,因为我在这里很茫然。

更新资料

根据评论,这是默认VPC的入站ACL规则: 网络ACL配置


1
您是否碰上了NetworkACL?我会在那里寻找可能阻止互联网访问的设置。
Optichip 2015年

谢谢回复!ACL似乎没有阻止任何内容,因为第一个规则是允许每个连接的所有来源的所有端口。
爱德华·Q·布里奇斯

Answers:


27

问题是安全组中的入站规则将安全组指定为源。将其更改为包含我的IP地址的CIDR可以解决此问题。


6
对于任何不知道CIDR如何工作的人;如果您的IP地址是91.61.76.202(可以使用myipaddress.com找到您的IP地址),请将您的源设置为91.61.76.202/32
Tom G

您愿意为该解决方案的外观截图吗?
smaccoun

我很高兴,但是我不再在线上拥有该实例。
爱德华·Q·布里奇斯

11

面临类似的问题,这就是我解决的方法:

单击RDS实例的安全组,然后检查入站规则。您可能会看到以下内容:

在此处输入图片说明

必须将IP范围设置为包含您的IP,或者仅在Source下拉列表中选择“ Anywhere”,以使其可以从localhost或任何地方访问:

在此处输入图片说明


是的,这可行。我保留了自定义规则,并添加了一个新规则,该规则会自动获取我的IP地址。
MSC

1

连接到postgres时,我遇到了类似的问题。事件虽然我已经公开访问true,但我无法连接。

我在安全组中添加了一个规则入站规则,现在它运行良好。

在此处输入图片说明


0

只是想添加我的发现以节省时间。上述解决方案可在dev ec2实例上运行,但在我迁移到新服务器后,它停止工作。事实证明,我的RDS实例和EC2实例都在同一VPC中,因此RDS实例看不到我添加到其安全组中的公共IP。为了使此工作正常进行,您需要将R2实例的安全IP添加到RDS实例的安全组中,您可以在其中找到详细信息。


-1

创建Postgres实例后,默认的安全组(rds-launch-wizard)仅列出了我的IP地址,因此在连接之前,我必须添加“所有流量的类型”和“任何地方的源”。我不是网络专家,但是很奇怪我无法使用自己的IP地址作为入站规则进行连接。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.