从远程机器连接到RDS Postgres

22

我已经配置了一个用于测试的RDS Postgres微型实例,但是连接时遇到问题。我创建了一个安全组,并默认允许所有主机(0.0.0.0/0)连接端口5432,但出于某种原因我无法连接。我尝试连接该机器的5432端口,但它似乎关闭了。有什么想法吗?我已经验证了安全组正在使用正确的安全组。

这是我的配置

TCP
Port (Service)  Source  Action
5432    0.0.0.0/0   Delete

这是我尝试连接到RDS服务的方法

psql -p 5432 -h example.cs945smhrv09.us-west-2.rds.amazonaws.com -U example example

更新

在弄清楚rds在私有的172子网上启动后,我觉得有点傻。我已经能够从我的ec2实例连接它了。

现在的问题是是否有一种方法可以将其放在我可以连接的公共地址上?我想使用安全组配置它以限制源IP,但仍然能够从我的桌面使用psql连接它。

更新2

当我最初发布这个问题时,我不记得所有的细节,但现在这不再是一个问题了。我们现在有一个管理vpc,我们使用vpn服务器连接到它。管理vpc网络被prod和devel安全组信任,用于rds实例。我们无需添加任何公共IP地址即可与它们通信。

6个回答

15

RDS设置向导的第四步(“附加配置”)允许您选择数据库是否可公开访问(如果不可以,则访问仅限于VPC内部,无论安全组设置如何)。我想这决定了主机名是否解析为54.*与172.*。

您的第一个实例可能已被设置为私有 - 据我所知,这在初始化后无法更改。我遇到类似的问题,创建一个设置为公共访问的新实例解决了我的问题。


6
这个答案几乎有4年的历史了,所以在当时可能不可行,但是现在如果您进入实例的修改菜单,就可以将您的RDS实例从公开变为私有。那里有一个单选按钮,用于切换公共状态,您可以立即应用或在下一个维护窗口期间应用。 - Will Ayd

13

我的公司防火墙已经阻止了对默认的Postgres端口5432的出站流量。我直到在终端窗口中使用netcat测试该端口时才意识到这一点:

nc -zv portquiz.net 5432

希望这篇文章能让某人节省半天时间来处理AWS安全组。


4
当然可以。我在本地机器上加载了pgadmin并连接到我的RDS实例。我确认可以使用与psql相同的语法进行连接,尽管对我来说-U不是必需的(但我仍然包括了两个“example”参数)。我编辑了“default”安全组并添加了我的IP(连接的机器的IP)/32以允许访问,虽然我确定你可以更少限制,但我建议从那里开始并查看是否有帮助。

2
嗨,乔,我试过了,但问题是RDS实例没有公共IP地址。它在私有网络上。不确定在哪里配置它以具有公共地址。我现在熟悉vcp安全组,因为它非常像Linux中的iptables。我已将其配置为允许来自任何主机,但仍无法连接到它。我只能从ec2界面连接。我认为我必须进行某种配置才能给它一个公共可路由的IP地址。当我从远程系统ping主机时,它解析为172.*地址,但我的ec2是54.*。 - Chris Hinshaw
这很奇怪,因为我的解析到了一个52.*的地址——我有一个实验性服务器“primoweb.c1seoysgtur3.us-east-1.rds.amazonaws.com”(我的AWS上实际服务器名称)...请检查它是否解析到了一个54地址。我没有做任何特殊的事情,也没有支付IP地址费用。我检查了我的设置,没有找到打开或关闭公共IP地址的方法。 - Joe Love
1
实际上,您的计算机可能具有 NAT 地址,但是它应该可以通过域名解析。 - Joe Love

0
我曾经遇到过这个问题。虽然不是直接的解决方案,但可能对某些人有用。我将Postgres安全组设置为接受来自将使用它的服务器(同一VPC)的连接。然后,我设置了我的Postgres客户端使用ssh隧道。如果我需要使用命令行,我只需通过SSH登录到该服务器,然后从那里使用psql

0

-2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接