You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot连接AWS RDS PostgreSQL:private subnet通信问题问询

连接私有子网中AWS RDS PostgreSQL的解决方案

方案1:通过SSH隧道(堡垒机)连接(本地开发首选)

私有子网内的RDS无公网IP,无法直接从本地访问,可借助公有子网内的堡垒机做端口转发:

    1. 在VPC的公有子网部署一台EC2堡垒机,配置安全组:
    • 入站:允许你的本地IP访问22端口(SSH)
    • 出站:允许访问RDS实例的5432端口
    1. 本地执行SSH端口转发命令,将RDS的5432端口映射到本地:
    ssh -L 5432:<RDS实例端点>:5432 ec2-user@<堡垒机公网IP> -i <你的密钥对.pem>
    
    1. Spring应用配置指向本地映射端口:
    spring.datasource.url=jdbc:postgresql://localhost:5432/<数据库名>
    spring.datasource.username=<数据库账号>
    spring.datasource.password=<数据库密码>
    

方案2:将Spring应用部署到同VPC子网内

若应用最终要部署到AWS,直接把Spring应用放在同一VPC的公有/私有子网:

  • 配置应用所在子网的安全组:允许出站访问RDS的5432端口
  • 配置RDS的安全组:允许来自应用子网安全组的5432端口入站流量
  • Spring应用直接使用RDS端点配置:
    spring.datasource.url=jdbc:postgresql://<RDS实例端点>:5432/<数据库名>
    spring.datasource.username=<数据库账号>
    spring.datasource.password=<数据库密码>
    

方案3:使用AWS Session Manager建立隧道(无公网IP堡垒机)

无需给堡垒机分配公网IP,借助AWS SSM实现安全连接:

    1. 给VPC内的EC2实例(可在私有子网)配置SSM权限(附加AmazonSSMManagedInstanceCore策略)
    1. 本地安装并配置AWS CLI,执行端口转发命令:
    aws ssm start-session --target <EC2实例ID> --document-name AWS-StartPortForwardingSession --parameters "portNumber=5432,localPortNumber=5432,destination=<RDS实例端点>:5432"
    
    1. Spring应用同样配置localhost:5432即可连接

必做配置检查

  • RDS安全组:确认入站规则允许访问源(堡垒机、应用子网、转发后的本地流量)的5432端口
  • VPC路由表:私有子网路由表不要指向互联网网关,公有子网路由表需包含互联网网关路由(若用堡垒机)
  • RDS公网访问:私有子网内的RDS建议关闭公网访问,避免安全风险

内容的提问来源于stack exchange,提问作者crescent17

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 23:47:26