Identity-Aware Proxy 概览

本页介绍了 Identity-Aware Proxy (IAP) 的基本概念。IAP 是一项 Google Cloud 全球性服务。

借助 IAP,您可以为通过 HTTPS 访问的应用建立一个中央授权层,从而可以采用一种应用级访问权限控制模型,而无需依赖网络级防火墙。

IAP 政策可在整个组织范围内伸缩。您可以集中定义访问权限政策,并将其应用于所有应用和资源。建议您指定专门负责创建和实施政策的团队,这样可以保护项目免受任何应用中错误的政策定义或实现的影响。

何时使用 IAP

当您要对应用和资源强制执行访问权限控制政策时,请使用 IAP。IAP 使用签名标头或 App Engine 标准环境 Users API 来保护应用的安全。借助于 IAP,您可以设置基于群组的应用访问权限,也就是说,您可以允许员工但不允许承包商使用某一资源,或者只允许特定部门使用该资源。

IAP 的工作原理

如果某一应用或资源受 IAP 保护,则该应用或资源只能由具备正确 Cloud Identity and Access Management (Cloud IAM) 角色主账号(也称为用户)通过代理进行访问。如果您授权某用户访问受 IAP 保护的应用或资源,该用户只需要遵守所用产品实现的精确访问权限控制,而不需要 VPN。如果用户尝试访问受 IAP 保护的资源,IAP 会执行身份验证和授权检查。

App Engine
使用 Cloud IAP 时 App Engine 的请求路径示意图
Cloud Run
使用 Cloud IAP 时 Cloud Run 的请求路径示意图
Compute Engine
使用 Cloud IAP 时 Compute Engine 和 Kubernetes Engine 的请求路径示意图
GKE
使用 Cloud IAP 时 Compute Engine 和 Kubernetes Engine 的请求路径示意图
本地
使用 Cloud IAP 时本地应用的请求路径示意图

身份验证

对您资源的请求通过 Cloud Run、App Engine 和 Cloud Load Balancing(外部和内部 HTTP(S) 负载均衡)传入。 Google Cloud 这些产品的服务基础架构代码会检查应用或后端服务是否启用了 IAP。如果启用了 IAP,则受保护资源的相关信息会被发送到 IAP 身份验证服务器。因此,请求标头或 Cookie 中会包含 Google Cloud 项目编号、请求网址及任何 IAP 凭据等信息。

接下来,IAP 会检查用户的浏览器凭据。如果凭据不存在,则用户会被重定向到 OAuth 2.0 Google 账号登录流程,以便将令牌存储在浏览器 Cookie 中,供日后登录使用。如果您需要为现有用户创建 Google 账号,则可以使用 Google Cloud Directory Sync 与 Active Directory 或 LDAP 服务器同步。

如果请求凭据有效,则身份验证服务器会使用这些凭据来获取用户的身份(电子邮件地址和用户 ID)。然后,身份验证服务器会使用该身份检查用户的 IAM 角色,并检查用户是否有权访问资源。

如果您使用的是 Compute Engine 或 Google Kubernetes Engine,则可以访问虚拟机 (VM) 的应用服务端口的用户可以绕过 IAP 身份验证。若代码在受 IAP 保护的应用所在虚拟机上运行,Compute Engine 和 GKE 防火墙无法阻止其访问。防火墙规则可以阻止来自其他虚拟机的访问,前提是配置正确。请了解您的职责以确保安全。

如果您使用的是 Cloud Run,可以通过以下方式启用 IAP

  • 直接在 Cloud Run 服务中。这样,IAP 便可保护 Cloud Run 的所有入站路径,包括自动分配的网址和任何配置的负载平衡器网址。如果您只有一个要为其启用 IAP 的 Cloud Run 服务,此配置非常有用。
  • 通过具有 Cloud Run 后端的负载平衡器。如果您在单个全局负载平衡器后面有多个位于不同区域的 Cloud Run 服务,此配置非常有用。在这种配置中,自动分配的网址不受 IAP 保护,并且可能可以直接访问。详细了解您的职责以确保安全。

如果 Cloud Run 服务位于负载平衡器后面,请勿同时在负载平衡器和 Cloud Run 服务上启用 IAP。

授权

身份验证完成后,IAP 会应用相关的 IAM 政策来检查用户是否有权访问所请求的资源。如果用户对资源所属的Google Cloud 控制台项目拥有 IAP-secured Web App User 角色,即有权访问相应应用。如需管理 IAP-secured Web App User 角色列表,请使用 Google Cloud 控制台上的 IAP 面板

为资源启用 IAP 后,IAP 会自动创建 OAuth 2.0 客户端 ID 和密钥。如果您删除自动生成的 OAuth 2.0 凭据,IAP 将无法正常运行。您可以在 Google Cloud 控制台 API 和服务中查看和管理 OAuth 2.0 凭据。

情境感知访问权限

授权步骤中,您可以使用情境感知访问权限来安全地访问以下类型的资源:

Google Cloud 控制台和 API
  • 保护基础架构对 Google Cloud的访问的第一道防线。
  • 对用户的 Google Cloud 高级情境感知访问权限。
虚拟机 (VM)
  • 启用对 Google Cloud 和其他云中的虚拟机的 SSH/RDP 管理员访问权限。
  • 让您能够实现强大的情境感知控制功能,以便仅允许指定的管理员访问。
Web 应用
  • 为在Google Cloud 和其他云端托管的 Web 应用提供授权和身份验证。
  • 提供持续授权,以防止未经授权的访问和数据丢失。

您的职责

IAP 可以保护对 Cloud Run、App Engine、Cloud Load Balancing (HTTPS) 和内部 HTTP 负载均衡的所有请求的身份验证和授权。

为确保安全,您必须采取以下预防措施:

  • 如果您要在负载平衡器上启用 IAP,请验证是否可以直接访问后端资源。
    • 如果后端资源是虚拟机,请配置防火墙规则以防范没有通过负载平衡器传入的流量。IAP 无法针对项目内的活动提供保护,例如项目内部的另一个虚拟机。
    • 如果后端资源是 Cloud Run 服务,您可以停用 run.app 网址,以确保所有入站流量都通过负载平衡器传入。如果您选择让 run.app 网址保持启用状态,则应使用入站流量控制来屏蔽来自网络外部的流量。
  • 更新您的应用以使用签名标头或使用 App Engine 标准环境 Users API

后续步骤