如何从另一私有子网的EC2实例访问私有子网中的RDS实例?
如何让同一VPC下不同私有子网的EC2实例访问RDS实例?
我之前处理过好多次这种跨私有子网的EC2-RDS访问场景,给你梳理一下核心配置步骤,确保能顺利打通:
1. 先确认基础网络归属
首先要再次核实:你的EC2和RDS确实处于同一个VPC中,并且RDS的DB子网组包含的子网都是该VPC下的私有子网(在RDS控制台的「连接与安全性」板块里查看「DB子网组」,点进去就能确认子网列表)。这点是基础,要是VPC不一样,后面配置再对也白搭。
2. 配置安全组(最容易出问题的环节)
安全组是VPC里的防火墙,必须双向放行流量:
- RDS安全组的入站规则:
- 最灵活的方式:添加一条入站规则,协议选
TCP,端口填你的数据库端口(比如MySQL是3306,PostgreSQL是5432),源直接选择EC2实例所在的安全组ID。这样不管EC2实例的私有IP怎么变,只要它在这个安全组里,就能访问RDS。 - 备选方式:如果不想用安全组做源,也可以指定EC2所在私有子网的CIDR段(比如
10.0.1.0/24)作为源,同样开放对应端口。
- 最灵活的方式:添加一条入站规则,协议选
- EC2安全组的出站规则:
默认安全组一般允许所有出站流量,如果你自定义过安全组,要确保有一条出站规则允许到RDS端口的TCP流量(或者直接放行所有出站,省事)。
3. 确认路由表配置
同VPC内的私有子网之间,默认是可以通过本地路由互通的,只要你的子网路由表没被改坏:
- 检查EC2和RDS所在子网的路由表,确保里面有一条目标为
VPC整体CIDR(比如10.0.0.0/16)、目标类型为local的路由。这条路由是VPC默认就有的,要是不小心删掉了,就会导致同VPC子网之间无法通信。
4. 测试连通性
登录到EC2实例,用命令先测网络通不通:
- 用telnet测试:
telnet your-rds-endpoint.rds.amazonaws.com 3306 - 或者用nc命令:
nc -zv your-rds-endpoint.rds.amazonaws.com 3306
如果返回连通成功的提示,那接下来就可以用数据库客户端连接了;要是连不通,优先检查安全组规则,再核对路由表,最后确认RDS实例状态是available。
5. 额外踩坑提醒
- RDS公有访问设置:一定要把RDS的「公有可访问性」设为否,毕竟都是私有子网,开公网访问既没必要又有安全风险。
- 数据库内部权限:就算网络通了,还要确保数据库用户有从EC2所在子网访问的权限。比如MySQL里要执行:
GRANT ALL ON your_db.* TO 'your_user'@'10.0.1.%' IDENTIFIED BY 'your_password';(把10.0.1.%换成EC2子网的CIDR前缀)。
内容的提问来源于stack exchange,提问作者inj3ct0r
相关产品推荐
相关产品推荐

