是否可通过Cloud IAP建立到App Engine实例的SSH隧道?
结论
这种场景下并非完全无法实现SSH over IAP访问App Engine实例,只是没有官方原生的一键参数支持,需要通过变通方案实现,核心原因和实现逻辑如下:
原生参数不支持的原因
- IAP的「SSH AND TCP RESOURCES」分类仅纳管GCE、GKE这类IaaS层可直接访问VPC网络的计算资源,App Engine作为全托管PaaS服务,实例的网络栈由谷歌侧统一封装,SSH端口不会直接暴露到VPC可路由范围内,因此不会出现在IAP的TCP资源列表中,自然也无法直接通过
--tunnel-through-iap参数对接。 - 你所了解的「IAP对流量端点透明」的特性,前提是目标端点已经被纳入IAP TCP资源的纳管范围,App Engine的实例SSH端口默认不在这个可纳管范围内,这是谷歌侧的服务设计限制,和实例内部的SSH配置无关。
可行的变通实现方案
你可以通过同一VPC下的GCE跳板机转接实现,步骤如下:
- 准备一台和App Engine实例部署在同一VPC的GCE实例,为该实例配置好IAP SSH访问权限,执行命令建立本地端口转发的IAP隧道:
gcloud compute start-iap-tunnel <跳板机实例ID> 22 --local-host-port=localhost:2222
- 保持上述隧道进程运行,在新的终端窗口中执行App Engine SSH命令,指定通过本地转发的跳板机链路发起连接即可实现全程走IAP访问:
gcloud app instances ssh --project=$PROJECT --service $SERVICE --version $VERSION $INSTANCE_ID --ssh-flag="-o ProxyCommand='ssh -p 2222 localhost -W %h:%p'"
注意事项
App Engine的SSH访问本身仅在实例调试模式下生效,实例销毁、重启后对应的实例ID会自动失效,该限制不受IAP接入方式的影响。
内容的提问来源于stack exchange,提问作者Mike Hartman
相关产品推荐
相关产品推荐

