CodeBuild无法找到目标Internet Gateway的0.0.0.0/0路由问题求助
解决CodeBuild关联NAT Gateway子网却无法访问互联网/拉取CodeCommit源码的问题
我太懂这种明明配置了NAT Gateway却还是报错的挫败感了——之前帮朋友排查过几乎一模一样的问题,咱们一步步拆解可能的原因:
1. 先确认NAT Gateway本身能不能正常联网
NAT Gateway是"中间人",它自己得先能连上公网,才能给你的私有子网做转发:
- 检查NAT Gateway的状态:必须是Available(可用)状态,要是显示
Pending或者Failed,先解决NAT的部署问题。 - 确认NAT Gateway部署在公有子网里(就是你说的前三个关联Internet Gateway的子网),而且这个公有子网的路由表必须有一条
0.0.0.0/0指向Internet Gateway的路由——不然NAT自己都没网,怎么帮私有子网转发?
2. 检查私有子网(CodeBuild用的子网)的路由配置
别光看路由表的条目,要确认绑定关系和目标都对:
- 确保你配置的那条
0.0.0.0/0 → NAT Gateway的路由表,确实关联了CodeBuild用的这个私有子网。很多时候会犯的错是:路由表创建了,但没绑定到目标子网,或者绑错了子网。 - 核对路由条目的目标:是NAT Gateway的ID(比如
nat-xxxxxx),不是其他资源,也不能填IP地址。
3. 安全组和网络ACL的出站限制
CodeBuild要拉取CodeCommit源码,必须能发起HTTPS请求,这两个安全组件很容易卡流量:
- CodeBuild环境的安全组:要允许**出站(Outbound)**的HTTPS(443端口)流量到
0.0.0.0/0或者CodeCommit的服务IP段。 - 子网的网络ACL(NACL):不仅要允许出站的443端口流量,还要允许对应的入站响应流量(Ephemeral端口,一般是1024-65535)——NACL是双向的,只放出站不放响应的话,请求发出去也收不到回复。
4. 关于CodeBuild的VPC验证警告
你看到的那个"无法找到对应目标Internet Gateway的0.0.0.0/0路由"的警告,其实是CodeBuild的验证工具逻辑问题:它默认检查的是直接指向Internet Gateway的路由,但你用的是NAT Gateway,所以这个警告可以忽略——真正的问题不是这个警告,而是你的网络链路确实不通。
5. 可选优化:用VPC端点访问CodeCommit
如果不想依赖NAT Gateway,推荐给你的VPC创建CodeCommit的VPC端点(类型是Interface端点),这样私有子网里的CodeBuild可以直接通过内网访问CodeCommit,不用走公网,既稳定又能节省NAT的带宽成本。创建端点后,确保路由表里添加了指向端点的CodeCommit服务IP段的路由即可。
最后再快速核对一遍
- NAT Gateway所在公有子网有正常的Internet Gateway路由,且NAT状态可用
- 私有子网绑定了指向NAT Gateway的0.0.0.0/0路由表
- 安全组和NACL允许HTTPS出站及响应流量
- CodeBuild的服务角色有
codecommit:GitPull的权限(这个如果之前能拉取的话一般没问题,但可以确认一下)
内容的提问来源于stack exchange,提问作者Marian Busoi
相关产品推荐
相关产品推荐

