如何通过EC2实例直接连接私有子网内的Amazon RDS PostgreSQL?
解决DBeaver直接连接EC2主机访问私有子网RDS被拒绝的问题
你直接用DBeaver把EC2设为主机、端口填5432的方式根本走不通——EC2上没有运行PostgreSQL服务,5432端口完全没在监听,自然会返回“连接被拒绝”。正确的做法是利用SSH隧道把DBeaver的请求通过EC2转发到RDS,下面给两种可行方案:
方案1:用DBeaver内置的SSH隧道(推荐,不用手动维护端口转发)
- 打开DBeaver新建PostgreSQL连接,在主配置页面填好RDS的信息:
- 主机:你的RDS端点(
rds_endpoint) - 端口:5432
- 数据库名、用户名、密码都是RDS的对应配置
- 主机:你的RDS端点(
- 切换到SSH标签,勾选「使用SSH隧道」,然后填EC2的跳板信息:
- 主机:EC2的公网IP(
ec2_public_ip) - 端口:22
- 用户名:ec2-user
- 密钥文件:选择你的
sd-private-subnet.pem密钥
- 主机:EC2的公网IP(
- 保存后测试连接,就能正常访问RDS了。
方案2:保持手动端口转发,DBeaver连接本地端口
- 先确保你之前的端口转发命令在后台运行(如果没运行就重新执行):
ssh -i sd-private-subnet.pem -f -N -L 5050:rds_endpoint:5432 ec2-user@ec2_public_ip - 在DBeaver新建PostgreSQL连接,主配置页填本地转发的端口信息:
- 主机:localhost
- 端口:5050
- 数据库名、用户名、密码还是填RDS的对应配置
- 测试连接即可成功。
补充说明:EC2只是作为跳板机,负责把你的请求转发到私有子网的RDS,本身不需要运行PostgreSQL服务。你之前能在EC2上直接连RDS,是因为EC2的安全组和RDS的安全组已经打通,而本地端口转发也是利用了这个打通的规则,DBeaver的内置隧道原理和手动端口转发完全一致,只是把转发逻辑集成到了工具里。
内容的提问来源于stack exchange,提问作者Kachra Seth
相关产品推荐
相关产品推荐

