Java连接AWS RDS PostgreSQL时抛出SocketTimeoutException是什么原因?
两次配置失败的原因
- 配置1(sg-id-1)的问题:PostgreSQL默认监听5432端口,但该安全组的入站规则仅开放了SSH端口和自定义的MyLocalPort,没有允许5432端口的入站流量,外部连接请求直接被安全组拦截,因此触发超时。
- 配置2(sg-id-2)的问题:入站规则的源地址设置为安全组ID,这种配置仅允许绑定了对应安全组的AWS内部资源(比如你创建的EC2实例)访问RDS。但你当时是在本地IDE运行代码,发起连接的是本地设备的公网IP,不属于该安全组关联的资源范围,因此流量被拦截。
最终配置生效的逻辑
你最终的配置同时满足了两个公网访问RDS的必要条件:
- 安全组入站规则开放了5432端口,且源地址设置为
0.0.0.0/0,允许所有公网IP的访问请求,覆盖了你本地IDE的公网IP范围 - RDS所在子网的路由表添加了互联网网关路由,保证RDS收到连接请求后,回包可以正常路由到公网返回给你的本地设备,完成TCP握手
提示:演示使用结束后建议把安全组入站规则的源地址修改为你本地的公网IP,避免端口长期暴露在公网被恶意扫描。
内容的提问来源于stack exchange,提问作者Stephen Carroll
相关产品推荐
相关产品推荐

