Google Compute Engine 上80端口Webserver如何限制仅特定google-accounts访问
GCE 上限制仅指定Google账号访问80端口Web服务的可行方案
GCE不存在App Engine那种开箱即用、直接绑定实例业务流量的IAM访问控制能力,但有多个可落地的实现路径可以满足仅开放给指定Google账号的访问要求,且体验上可以对齐App Engine的IAM访问控制效果:
方案一:通过Cloud IAP前置代理实现(最贴近原生IAM体验)
这是最无侵入、运维成本最低的实现方式,和App Engine IAM访问控制逻辑完全一致,不需要修改原有webserver的业务代码:
- 整体链路:将公网访问流量全部导入Cloud IAP作为前置反向代理层,不再将GCE实例的80端口直接暴露到公网
- 访问逻辑:用户发起web访问请求时,会被强制重定向到Google OAuth登录流程,只有你在IAP访问策略中明确授权的Google账号(支持普通Gmail账号、Workspace域账号),才能通过身份校验、被代理转发到后端运行在GCE上的webserver
- 配置核心要求:
- 将GCE实例纳入实例组,绑定到外部HTTP负载均衡的后端服务配置上
- 为该后端服务开启IAP保护,在IAP访问策略中添加需要放行的指定Google账号,配置对应访问权限
- 调整GCE实例的防火墙规则,仅允许来自云负载均衡、IAP代理IP段的流量访问本地80端口,彻底屏蔽用户直连GCE公网IP绕开校验的路径
- 原webserver可以继续保持80端口监听,仅需将监听地址改为内网网卡即可,不需要修改端口号
方案二:Webserver层原生集成Google OAuth校验
如果不想引入前置代理、负载均衡组件,可以直接在webserver层完成身份校验逻辑:
- 具体实现方式:
- 对Nginx/OpenResty这类反向代理类webserver,可以安装适配OAuth2协议的校验模块,对接Google的OAuth2授权端点,将允许访问的Google账号邮箱写入校验规则的白名单,未通过校验的请求直接返回403
- 对自研业务webserver,可以在请求入口增加OAuth2登录校验中间件,在用户完成Google账号登录后,校验其邮箱地址是否在指定白名单内,不在白名单的请求直接拦截
- 注意事项:需要覆盖webserver所有对外暴露的静态资源、接口路径,避免出现未接入校验逻辑的路径被公开访问
常见认知误区
不要尝试通过给GCE实例绑定IAM角色实现业务访问控制:GCE体系内的IAM权限仅用于控制对实例的管理类操作(比如SSH登录、控制台操作、实例配置修改),完全不会拦截流向实例80端口的业务访问流量,这也是多数用户初期误以为找不到GCE对应App Engine式访问控制方案的核心原因。
内容的提问来源于stack exchange,提问作者Egirus Ornila
相关产品推荐
相关产品推荐

