导读:本期聚焦于蜗牛创作的《身份感知代理IAP如何配置才能实现零信任访问控制?》,敬请观看详情。身份感知代理通常被简称为IAP,它不是传统VPN隧道,而是一种应用层访问控制方案。IAP把凭据校验、设备状态和上下文策略放在请求到达后端之前执行,避免将内部服务直接暴露到公网。配置IAP时最容易混淆的是负载均衡类型,只有外部应用负载均衡和全局外部代理负载均衡能直接与IAP集成,经典网络负载均衡或内部负载均衡不支持。IAP的核心步骤包括启用IAP API、创建OAuth同意屏幕和OAuth客户端、将后端服务绑定到支持的外部应用负载均衡、授予受限访问者IAP安全Web应用用户角色,最后通过IAP条件实现路径级或IP级放行。理解这些顺序后,配置流程可以压缩到十几条gcloud命令,但权限模型和会话超时需要提前设计。本文从请求决策流程、控制台与命令行配置、细粒度策略以及日志排错四个维度展开说明。

身份感知代理(Identity-Aware Proxy,IAP)通过七层拦截请求并执行身份校验,把访问控制从网络层上移到应用层。与VPN先建立网络通道再允许内网访问不同,IAP只对经过应用负载均衡的HTTPS请求生效,因此不需要开放任何入站防火墙端口,也不用把后端实例配置公网IP。配置IAP的本质是建立一条从用户浏览器到Google身份平台再到后端服务的受控链路,最终由IAP在反向代理层决定是否放行。

身份感知代理IAP如何配置才能实现零信任访问控制?

在实际配置前,需要先理解IAP的决策顺序:请求先到达外部应用负载均衡,由转发规则匹配后端服务;如果该后端服务启用了IAP,七层代理会检查Cookie中的IAP会话,无有效会话则跳转OAuth授权页;用户完成登录并满足IAP的上下文条件后,代理才会把请求转发给实例组、GKE Pod或Cloud Run服务。这个顺序决定了后续所有配置都必须围绕负载均衡、OAuth客户端和IAM角色三个对象展开。

准备工作:OAuth同意屏幕与IAP客户端

IAP依赖Google OAuth2完成用户认证,所以创建同意屏幕和OAuth客户端是第一步。同意屏幕只需要填写应用名称和支持邮箱,内部应用可以把发布状态设置为测试,避免公开审核。OAuth客户端必须选择Web应用类型,因为IAP跳转回调属于浏览器场景,不能使用桌面客户端或服务账号客户端。授权重定向URI由IAP自动生成,格式为https://iap.googleapis.com/v1/oauth/clientIds/客户端ID:handleRedirect,在控制台启用IAP时系统会提示自动创建,但手工创建能更好地控制客户端名称和密钥轮换。

还需要为用户授予roles/iap.httpsResourceAccessor角色。这个角色允许用户通过HTTPS访问启用了IAP的资源,但不授予任何底层云资源权限。团队通常把这一层理解为应用访问门禁,真正进入实例后仍受操作系统账户或应用账户约束,形成双层控制。服务账号访问IAP后端时不能使用普通账号流程,需要改用服务账号的OpenID Connect令牌,令牌通过元数据服务器获取并放在请求头中。

gcloud services enable iap.googleapis.com

gcloud iap oauth-brands create \
  --application_title=InternalApps \
  --support_email=admin@ipipp.com

gcloud iap oauth-clients create projects/PROJECT_ID/brands/BRAND_ID \
  --display_name=web-client

配置外部应用负载均衡并启用IAP

IAP目前只支持外部全局应用负载均衡的HTTP/HTTPS后端服务,经典代理负载均衡或内部负载均衡无法启用。因此先要检查转发规则和目标代理是否指向正确的后端服务。创建时至少需要一个健康检查、后端服务以及URL映射,后端可以指向托管实例组或无服务器NEG。全局外部应用负载均衡的URL映射必须匹配域名,建议使用自定义域名并上传TLS证书,IAP对自签名证书会话续期并不友好。

启用IAP可以在控制台后端服务页面直接开启,也可以使用gcloud命令。命令需要指定OAuth客户端ID和密钥,密钥在OAuth客户端详情中显示。执行后会生成Cookie名称和签名密钥,不要手工修改。启用IAP后,未认证请求会返回302重定向到Google登录,这会导致健康检查失败,需要将健康检查路径加入IAP的绕过规则,或者改用TCP健康检查。

gcloud compute backend-services update web-backend \
  --iap=enabled \
  --oauth2-client-id=YOUR_CLIENT_ID \
  --oauth2-client-secret=YOUR_CLIENT_SECRET \
  --global

完成上述操作后,还需要把负载均衡的前端IP或域名解析到正确位置。对于内部应用,建议使用Private Service Connect或仅允许指定VPC内的客户端访问,不要在公网DNS中暴露未备案域名。同时检查防火墙规则是否放行来自负载均衡代理的请求,因为IAP转发到后端时源地址属于负载均衡网段而不是最终用户IP。

精细化访问策略与条件配置

默认开启IAP后,任何拥有IAP安全Web应用用户角色的成员都能访问整个后端服务。生产环境通常需要按路径、IP、设备或时间进一步收敛。IAP条件使用CEL表达式,可以针对特定路径前缀放行内部工具,也可以限制只有办公网出口IP才能访问管理后台。例如要求请求路径为/admin且来源网段不在公司出口就拒绝,条件表达式为!request.path.startsWith('/admin') || request.ip_address.startsWith('203.0.113'),这样普通路径仍走常规认证,敏感路径附加IP约束。

IAP设置文件支持更细的OAuth参数,比如loginHint用来预填登录账号,cookieDomain用于跨子域共享会话。还可以配置访问拒绝页和CORS设置。将设置写入YAML文件后使用gcloud iap settings set命令下发,资源类型写compute或backend-services。修改设置会覆盖整个资源,因此建议先在临时项目验证,避免误关闭OAuth客户端绑定。

# 保存为 settings.yaml 后下发
accessSettings:
  oauthSettings:
    loginHint: user@ipipp.com
  gcipSettings:
    tenantIds: []
  corsSettings: {}
applicationSettings:
  cookieDomain: ipipp.com
  csmSettings: {}
gcloud iap settings set settings.yaml \
  --project=PROJECT_ID \
  --resource-type=compute

验证配置与常见故障排查

配置完成后,应先用普通浏览器访问负载均衡IP或域名,确认会跳转Google登录并返回后端响应。然后使用无权限的测试账号访问,应看到403或IAP拒绝页。验证请求头时,IAP会向后端注入X-Goog-Authenticated-User-Email和X-Goog-Authenticated-User-Id等头,应用可以信任这些头,但必须确保后端只接受来自负载均衡的连接,否则攻击者可能直接向后端伪造请求头。

常见故障包括404而不是登录跳转,通常是URL映射没有匹配到后端服务;502错误一般是后端健康检查失败或IAP与后端服务协议不匹配;登录后一直循环重定向多数是Cookie域名配置错误或浏览器禁用了第三方Cookie。日志分析可使用Cloud Logging过滤protoPayload.serviceName=iap.googleapis.com,结合HTTP状态码和IAP决策原因定位。

gcloud logging read 'protoPayload.serviceName="iap.googleapis.com" AND severity>=ERROR' \
  --limit=20 \
  --format=json

如果所有验证均通过,还可以进一步接入Cloud Audit Logs审计用户访问行为,或者将IAP与VPC Service Controls联合使用,形成更完整的零信任边界。配置完成后应定期轮换OAuth客户端密钥,并检查IAM角色分配是否仍然符合最小权限原则。

身份感知代理IAP配置零信任访问修改时间:2026-08-21 23:32:09

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。