用IAP保护单个Compute Engine实例:为何需负载均衡器?能否规避?
问题解答
1. 为何必须使用负载均衡器?
IAP的HTTP(S)访问保护功能和Google全局负载均衡器(GLB)深度绑定——IAP本质是在GLB层面插入的身份验证拦截器,所有用户请求必须先经过GLB前端,IAP才能完成身份校验、权限验证,之后再把合法请求转发到后端GCE实例。
如果直接访问GCE实例的公网IP,请求不会经过IAP的认证环节,IAP根本无法介入拦截和验证,自然起不到保护作用。官方教程要求配置LB,也是因为这是IAP HTTP保护的必经路径,同时LB还能提供SSL终止、请求路由等配套能力。
2. 无需LB、MIG保护单个GCE实例的方法
有两种可行方案,取决于你要保护的服务类型:
方案一:IAP TCP转发(适用于SSH/RDP或任意TCP服务)
这是最直接的低成本方案,完全不需要LB和MIG:
- 给目标GCE实例设置目标标签(比如
iap-protected) - 创建防火墙规则,允许IAP专属IP段
35.235.240.0/20访问你需要开放的端口(比如SSH的22、RDP的3389,或者你的应用端口),目标标签选择你设置的标签 - 移除实例的公网IP(如果有的话),只保留内部IP,避免直接公网访问
- 给需要访问实例的用户分配
IAP-Secured Tunnel User角色,确保他们有通过IAP访问实例的权限 - 通过命令行或控制台访问:
- SSH访问:
gcloud compute ssh INSTANCE_NAME --tunnel-through-iap - 自定义TCP端口转发(比如把实例的80端口映射到本地的8080):
gcloud compute start-iap-tunnel INSTANCE_NAME 80 --local-host-port=localhost:8080,之后访问localhost:8080就会经过IAP认证
- SSH访问:
方案二:HTTP/HTTPS服务的替代方案(无LB)
如果你的服务是HTTP/HTTPS类型,且不想用LB,只能通过TCP端口转发的方式间接访问(如上方案一),因为IAP的HTTP原生保护必须依赖LB。这种方式下,用户需要通过本地端口转发来访问服务,无法直接用域名公网访问,但能满足IAP认证的安全需求。
如果一定要用域名直接访问HTTP服务,确实没办法绕开负载均衡器——这是IAP HTTP保护的架构限制。
内容的提问来源于stack exchange,提问作者Stf_F
相关产品推荐
相关产品推荐

