无法连接调整公网访问权限后的私有RDS(EC2及本地均失败)
PostgreSQL RDS连接全失败排查思路
一、先确认RDS实例本身状态
- 登录AWS控制台,查看RDS实例的状态是否为
available,排查是否存在维护、故障或重启中的异常提示 - 检查RDS的公网访问属性:确认“Publicly accessible”设置为
Yes,同时验证实例的弹性公网IP是否正常绑定 - 查看RDS日志:在控制台“日志”选项卡下载或查看
postgresql.log,搜索是否有拒绝连接、认证失败或监听地址异常的记录
二、排查安全组配置(优先级高于NACL)
针对EC2内部连接失败:
- 确认RDS关联的安全组入站规则:需包含
PostgreSQL (5432)协议,源为EC2实例所在的安全组ID(如sg-xxxxxx),而非仅允许公网IP - 检查EC2实例的安全组出站规则:确认是否允许访问5432端口(默认出站全通,若有自定义规则需验证)
针对本地连接失败:
- 确认RDS安全组入站规则中,是否添加了本地公网IP的5432端口访问:可通过
curl ifconfig.me获取本地公网IP,添加规则PostgreSQL (5432),源为xxx.xxx.xxx.xxx/32 - 可临时添加
0.0.0.0/0的5432端口访问测试是否为IP范围问题,测试后立即删除该规则避免安全风险
三、排查VPC网络ACL(NACL)
- 检查RDS所在子网的入站NACL规则:必须允许来自EC2所在子网IP段(或EC2安全组对应IP)以及本地公网IP的5432端口流量,规则优先级(编号越小越高)需高于拒绝规则
- 检查出站NACL规则:必须允许RDS向EC2和本地IP返回的响应流量(可临时设置为允许所有出站流量测试)
- 注意:NACL是无状态的,入站允许的同时必须对应出站允许响应流量,否则连接会被截断
四、检查网络路由配置
- 对于EC2连接RDS:确认EC2所在子网的路由表是否存在指向RDS所在VPC的内网路由(同VPC默认存在,跨VPC需验证对等连接/中转网关配置)
- 对于本地连接RDS:确认RDS所在子网的路由表是否有指向互联网网关(IGW)的路由,否则公网访问请求无法到达RDS
五、验证连接参数
- 本地测试时,使用RDS的公网端点(控制台“Connectivity & security”下的“Endpoint”),不要用内网端点
- 确认连接命令的端口、用户名、数据库名正确,测试命令示例:
psql -h <RDS公网端点> -p 5432 -U <主用户名> -d <数据库名> - EC2上测试时,切换为RDS内网端点执行上述命令
六、排查PostgreSQL内部配置
- 查看RDS参数组,确认
listen_addresses是否设置为*(RDS默认配置为允许所有地址,若自定义修改过需调整) - 验证数据库用户的连接权限:用主用户登录RDS后执行
SELECT * FROM pg_hba_rule;,排查是否存在IP限制规则
内容的提问来源于stack exchange,提问作者Adolfo Esparza
相关产品推荐
相关产品推荐

