跨VPC配置AWS Fargate安全连接RDS的问题排查
问题分析与解决方案
你的核心问题其实分为两个关键部分:跨VPC的RDS私有DNS解析异常,以及安全组的合规访问控制配置。咱们一步步拆解解决:
1. 修复DNS解析到私有IP的问题
你已经建立了VPC对等连接,但ECS仍解析到RDS公网IP,这是因为默认情况下,VPC对等连接未开启跨VPC的私有DNS解析能力。需要补充以下配置:
- 打开VPC控制台,找到你的VPC对等连接,进入选项标签页:
- 启用「允许VPC-1解析VPC-2的私有DNS主机名」
- 同时确保VPC-2侧也启用了「允许VPC-1解析本VPC的私有DNS主机名」
- 确认RDS终端节点:RDS默认终端节点在同VPC内会自动解析私有IP,但跨VPC必须依赖对等连接的DNS解析支持,开启上述选项后,VPC-1内的ECS就能通过RDS默认域名解析到它的私有IP了。
2. 配置正确的安全组与路由规则
放弃用NAT网关IP做安全组规则的方案——VPC对等连接的核心价值就是让两个VPC的私有网络直接通信,完全不需要走公网或NAT:
- 路由表配置:
- 在VPC-1的路由表中,添加路由:目标为VPC-2的私有CIDR(比如
192.168.0.0/16),下一跳选择你的VPC对等连接ID - 在VPC-2的路由表中,添加路由:目标为VPC-1的私有CIDR,下一跳同样选择对等连接ID
- 在VPC-1的路由表中,添加路由:目标为VPC-2的私有CIDR(比如
- RDS安全组配置:
- 编辑RDS的安全组,添加入站规则:协议选择数据库对应协议(如TCP),端口填你的数据库端口(如3306、5432),来源设置为VPC-1的私有CIDR范围(而非
0.0.0.0/0或NAT IP)
- 编辑RDS的安全组,添加入站规则:协议选择数据库对应协议(如TCP),端口填你的数据库端口(如3306、5432),来源设置为VPC-1的私有CIDR范围(而非
- ECS任务安全组:确保ECS任务使用的安全组允许出站到RDS的数据库端口(目标可设为VPC-2的CIDR或RDS安全组)
3. 补充:之前NAT网关方案失败的原因(可选)
你之前尝试让ECS出站流量走NAT导致部署失败,大概率是因为Fargate任务需要拉取容器镜像(比如从ECR、Docker Hub),但NAT网关的安全组或路由未允许这些出站请求。不过这个方案本身没必要,对等连接的私有通信更安全高效,优先用上面的方案即可。
替代方案:AWS PrivateLink(若对等连接不适用)
如果因为跨账户、跨区域等原因无法使用VPC对等连接,可以考虑用AWS PrivateLink创建RDS的接口端点:
- 在VPC-2中创建RDS的Interface VPC Endpoint,然后在VPC-1中通过端点服务的私有域名访问RDS,流量完全在AWS私有网络内,无需对等连接,同时安全组可限制仅允许VPC-1的CIDR访问端点。
内容的提问来源于stack exchange,提问作者michal.slocinski
相关产品推荐
相关产品推荐

