Spring Boot连接AWS RDS PostgreSQL:private subnet通信问题问询
连接私有子网中AWS RDS PostgreSQL的解决方案
方案1:通过SSH隧道(堡垒机)连接(本地开发首选)
私有子网内的RDS无公网IP,无法直接从本地访问,可借助公有子网内的堡垒机做端口转发:
- 在VPC的公有子网部署一台EC2堡垒机,配置安全组:
- 入站:允许你的本地IP访问22端口(SSH)
- 出站:允许访问RDS实例的5432端口
- 本地执行SSH端口转发命令,将RDS的5432端口映射到本地:
ssh -L 5432:<RDS实例端点>:5432 ec2-user@<堡垒机公网IP> -i <你的密钥对.pem>- 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实现安全连接:
- 给VPC内的EC2实例(可在私有子网)配置SSM权限(附加
AmazonSSMManagedInstanceCore策略)
- 给VPC内的EC2实例(可在私有子网)配置SSM权限(附加
- 本地安装并配置AWS CLI,执行端口转发命令:
aws ssm start-session --target <EC2实例ID> --document-name AWS-StartPortForwardingSession --parameters "portNumber=5432,localPortNumber=5432,destination=<RDS实例端点>:5432"- Spring应用同样配置
localhost:5432即可连接
- Spring应用同样配置
必做配置检查
- RDS安全组:确认入站规则允许访问源(堡垒机、应用子网、转发后的本地流量)的5432端口
- VPC路由表:私有子网路由表不要指向互联网网关,公有子网路由表需包含互联网网关路由(若用堡垒机)
- RDS公网访问:私有子网内的RDS建议关闭公网访问,避免安全风险
内容的提问来源于stack exchange,提问作者crescent17
相关产品推荐
相关产品推荐

