如何在开发阶段从公网访问VPC私有子网内的RDS DB实例
核心结论
你无法手动将公有子网的ENI挂载到托管RDS实例上。托管RDS的网络栈由云厂商统一管控,实例的网络接口配置、子网归属在创建时就已固定,不支持用户自行增删、修改ENI或调整子网归属,你之前在私有子网创建RDS时无法直接开启公网访问也是基于这个设计逻辑。
可行替代方案
以下几种方案都可以满足你「开发阶段公网访问、上线后仅保留VPC内网访问」的需求,全程不需要修改RDS本身的私有子网属性:
- 跳板机(堡垒机)代理
在和RDS同VPC的公有子网中创建一台ECS作为跳板机,给跳板机绑定公网IP,配置跳板机安全组仅允许你本地PC的公网IP访问,再配置RDS的安全组允许跳板机的私有IP访问数据库端口。开发阶段你可以通过SSH隧道或者数据库客户端的代理设置,经由跳板机连接私有子网的RDS。开发完成后直接释放跳板机或者解绑其公网IP即可,全程不会影响RDS的运行。 - VPN接入VPC
配置IPsec VPN或者SSL VPN服务,将你的本地PC接入RDS所在的VPC内网,接入后你可以直接通过RDS的私有地址访问实例。开发完成后关停VPN服务或者移除你的本地访问权限即可,全程RDS都不会暴露到公网,安全性最高。 - 临时调整RDS子网组(仅部分云厂商支持)
部分云厂商支持修改RDS的子网组,你可以先将RDS迁移到包含公有子网的子网组,开启公网访问权限,等开发完成后再关闭公网访问,将RDS迁回原私有子网的子网组即可。不过这种方案需要重启RDS实例,会有短暂的服务中断,仅适合开发阶段对可用性要求不高的场景。
操作建议
优先选择跳板机方案,操作成本最低:
- 跳板机选择最低配置的按需付费实例即可,整体使用成本很低
- 配置安全组时严格限制访问源IP,不要放开
0.0.0.0/0的访问权限 - 数据库账号不要设置弱口令,尽可能降低公网暴露阶段的安全风险
内容的提问来源于stack exchange,提问作者Yash
相关产品推荐
相关产品推荐

