IAP:接入位置、授权与排障
托管身份访问控制:Web 用于支持的应用入口,TCP forwarding 用于 VM 等支持目标的 TCP 连接。
推荐做法#
- Cloud Run 可在 service 原生启用;ALB 后端也可配置 IAP,Cloud Run 链路选择一处启用。
- Web 用户授 IAP-secured Web App User;TCP 用户授 IAP-secured Tunnel User,权限不能互换。
- 仅保护 LB 时封闭后端直连;应用按需要验证 IAP JWT assertion 的签名与 audience。
容易踩的坑#
- IAP 通过不代表拥有应用管理员、OS Login/sudo 或 Kubernetes RBAC。
- External / Test users 是 OAuth 用户范围,不授予 IAP IAM 权限。
Cloud Run Web 配置 · VM SSH / TCP · 支持目标与边界
配置说明与完整示例(按需展开)
Identity-Aware Proxy(IAP)是 Google Cloud 托管访问控制服务:在受支持的应用入口或 TCP tunnel 验证身份和访问策略。你配置保护目标、身份来源与授权,Google 管理代理。
本手册用 Cloud Run 和 VM SSH 做实验;它们只是下面两类能力的示例目标。
能力与适用目标#
| 能力 | 保护什么 | 典型目标及接入方式 |
|---|---|---|
| Web application access | HTTP(S) 应用请求 | 直接启用 IAP 的 Cloud Run、App Engine,以及通过支持的 Application Load Balancer 接入的 Compute Engine、GKE 等应用 |
| TCP forwarding | 到指定后端端口的 TCP 管理连接 | Compute Engine VM 的 SSH、RDP 及其他适用 TCP 管理服务 |
Web 也可通过支持的方案接入 on-premises 应用;TCP forwarding 可用于有或无公网 IP 的 VM,不支持 load-balanced targets。IAP overview、TCP overview
Web 支持浏览器与机器调用。机器调用使用 SA OIDC token(audience 为 IAP OAuth client ID)或 SA JWT(audience 为受保护 URL);相应的签发权限与 IAP 访问授权见 Web 配置。不要复用浏览器 cookie 作为 CI 认证。
一次访问经过哪些检查#
访问者请求目标
→ 网络路径是否可达
→ IAP 验证访问者身份:authentication
→ IAP 检查该身份的访问许可:authorization
→ 后端应用或目标协议继续处理请求浏览器按需跳转登录;TCP 客户端先建立 tunnel,再进行 SSH/RDP 登录。IAP 放行后的操作权限由下表各层决定。
| 层次 | 职责 |
|---|---|
| IAM policy | 记录哪些 Principal 在哪些 resource 上获得哪些 roles |
| IAP | 对被保护入口执行身份和访问策略检查 |
| VPC firewall / ingress | 决定对应网络路径是否允许,不代替用户身份认证 |
| OS Login | 在启用它的 VM 上管理 Linux 登录与 sudo 权限 |
| 应用 / Kubernetes / 数据库 | 决定进入后的业务操作权限 |
Web 场景:IAP 应该启用在哪里#
| 现有架构 | 配置位置 | 必须理解的边界 |
|---|---|---|
| 一个 Cloud Run service | 直接在 Cloud Run 启用 IAP | 对该 service 的 ingress 路径进行 IAP 检查,包括 run.app 和 LB 路径;ingress 网络限制仍然适用 |
| 通过支持的 ALB 接入应用 | 在相应 Backend service 启用 IAP | 保护经过该 LB 的路径;还需限制后端直连,避免绕过 IAP |
| App Engine | 按 App Engine 的 IAP 集成配置 | 使用相应资源和授权方式,不照搬 Cloud Run CLI 参数 |
| Compute Engine / GKE Web 应用 | 通过支持的 ALB / GKE 集成配置 | Web IAP 与 SSH 登录 VM 是不同用途 |
ALB 后的 Cloud Run 只选一处启用 IAP,不要同时启用两层。Cloud Run 集成
只在 ALB 启用 IAP,保护的只是经过它的请求。 同时限制 Cloud Run ingress 或 VM firewall,封闭
run.app/ VM 端口直连,避免绕过认证。
身份来源与 OAuth client#
身份来源证明“谁在访问”,OAuth client 标识参与登录的应用;IAP IAM 决定是否放行。
- Google-managed OAuth client:由 Google 管理,适用于受支持的 Organization 内浏览器访问场景。
- Custom OAuth client:用于 external users、自定义 branding 或适用的 programmatic access 场景,需要配置应用信息及相关权限。
- OAuth consent screen:登录/授权时展示应用身份及请求信息的配置,不是访问者的 IAM role binding。
- Workforce Identity Federation:员工/合作方使用企业外部 IdP(如 Okta、Entra ID)登录,使用 Workforce pool principal 做 IAM 授权。配置方法
- Identity Platform:需要 email/password、SAML/OIDC 等应用用户登录时使用;须配置 Identity Platform providers 和登录流程。此方案不能沿用 IAM 管理用户访问,授权需按应用方案实现。External identities
在 Google OAuth client 路径中,External / Test users 仅控制 OAuth 用户范围,仍需 IAP IAM 授权;这条规则不要套到上面的 Identity Platform 路径。OAuth client 选择
配置示例#
| 实验目标 | 内容 | 操作指南 |
|---|---|---|
| 通过浏览器访问 Cloud Run 演示服务 | 在 service 上启用 IAP,区分两层授权,验证允许和拒绝 | Cloud Run Web access |
| 通过 SSH 登录无公网 IP 的 VM | IAP tunnel、OS Login、firewall 和登录排障 | VM SSH 与 TCP forwarding |
相关操作#
- VM 创建、磁盘与快照:Compute Engine,访问认证继续到 TCP forwarding。
- GKE 私网管理机:Standard 集群,runner 的 SSH 登录复用 TCP 流程,kubectl 权限单独检查。
- Web 演示:Cloud Run → IAP Web access。
- Role、role binding 和继承:IAM。网络入口和后端关联:ALB。