常见问题解答和问题排查

本文档包含有关 Identity-Aware Proxy (IAP) 的常见问题解答。

我可以使用 IAP 保护哪些应用?

IAP 可用于以下产品:

  • App Engine 标准环境和 App Engine 柔性环境应用
  • 使用 HTTP(S) 负载均衡后端服务的 Compute Engine 实例
  • Google Kubernetes Engine 容器
  • 使用 HTTP(S) 负载均衡后端服务的 Cloud Run 应用
  • 一键式 Cloud Run,无负载均衡后端服务

IAP 不能Cloud CDN 搭配使用。

登录我的应用后,为什么网址末尾会有 #?

在一些浏览器中及某些特定情况下,经过身份验证的网址末尾会附加一个 #。这是正常现象,不会引起登录问题。

为什么我的请求失败并返回 405 Method Not Allowed

这种情况通常会在您的请求未附加 Cookie 时发生。默认情况下,JavaScript 方法不会附加 Cookie。

不同的请求方法需要不同的方法:

  • 对于 XMLHttpRequest,将 withCredentials 设置为 true
  • 对于 Fetch API,将 credentials 设置为 includesame-origin

如需了解如何处理与会话相关的错误,请参阅管理 IAP 会话

为什么我收到的是 HTTP 401 Unauthorized 而不是 302 Redirect

仅当您的客户端配置为处理重定向时,IAP 才会发送 302 Redirect

在请求标头中添加 HTTP Accept="text/html,*/*" 以表明支持重定向。

为什么 POST 请求不会触发重定向?

浏览器不会将重定向操作作为对 POST 请求的响应。但实际上,IAP 会返回 401 Unauthorized 状态代码。

对于向受 IAP 保护的资源发出的 POST 请求,请包含以下任一内容:

  • Authorization: Bearer 标头中的 ID 令牌
  • 有效 Cookie(请参阅刷新会话

如果我已停用 API,是否可以使用 IAP?

可以。在停用 API 的情况下,仍可访问受 IAP 保护的资源,但您将无法修改 IAM 权限。

如何阻止具有 Owner 角色的用户使用 IAP 实现 TCP?

理想情况下,应限制使用 Owner (roles/owner) 角色,转而使用更精细的权限。如需相关指导,请参阅 IAM 最佳实践

如果无法减少 Owner 角色的使用,则可以使用防火墙规则阻止使用 IAP 实现 TCP。

IAP 使用哪个网域实现 TCP?

IAP 使用以下 Google 拥有的网域:

为什么我会收到 Server Error

如果您看到:

The server encountered a temporary error and could not complete your request. Please try again in 30 seconds.

您的防火墙可能会屏蔽负载均衡器 IP。

检查防火墙是否允许来自 130.211.0.0/2235.191.0.0/16 的流量。如果这些 IP 地址无法访问您的后端,则您的应用将无法访问。

对于与特定虚拟机的 IAP TCP 连接,还要确保虚拟机接受来自 35.235.240.0/20 范围的连接。

为什么我会收到间歇性内部服务器错误?

类似 An internal server error occurred while authorizing your request. Error code X 的消息表示后端出现故障。

错误代码 130626364703 通常反映的是暂时性问题。为重试实现指数退避算法。

如何解决超出配额错误(错误代码 429)?

当应用超出 IAP 的请求限制时,会发生错误代码 429。该服务会强制执行单独的配额:

  • 基于浏览器的请求:每个项目每分钟 36 万个
  • 程序化请求:每个项目每分钟 36 万个

程序化请求是指包含 AUTHORIZATIONPROXY-AUTHORIZATION 标头但不包含 IAP Cookie 的请求。所有其他请求(包括没有凭据的请求)都被视为浏览器请求。

这些限额会共同应用于项目中的所有受 IAP 保护的资源。

如果您遇到与配额相关的错误,请考虑以下解决方案:

  • 避免在生产环境中进行负载测试 - 使用绕过 IAP 的替代网络路径
  • 对于服务到服务流量,实现指数退避算法以优雅地处理 429 错误
  • 将高流量应用分配到多个项目
  • 针对基于 API 的应用使用 Apigee 或类似的 API 网关解决方案
  • 如果自然增长导致了此问题,请与Google Cloud 支持团队联系,以增加配额

错误代码

下表列出了在配置和使用 IAP 时返回的常见错误代码和消息。

错误代码 说明 问题排查
7 OAuth 客户端 ID 或密钥为空 访问“凭据”页面,验证您的客户端 ID 和密钥。如果这些设置看起来正确但无法正常运行,请使用 API 方法检查设置(Compute Engine 为 GET,App Engine 为 GET),然后使用 PATCH 重置这些设置。
9 OAuth 重定向失败 这是一个内部错误,已自动记录。您无需采取任何行动。
9(使用路径重写规则) OAuth 重定向失败 负载均衡器的路径重写规则会阻止 OAuth 完成。确保负载均衡器后面的所有后端都使用相同的 OAuth 客户端 ID。您可以使用 gcloud compute backend-services update 命令更新此设置。
9(使用路径路由规则) OAuth 重定向失败 为每个路径的两个版本(带尾部斜线和不带尾部斜线)创建路径规则变体,并将它们定向到同一后端。例如,同时包含 /path//path 的规则。
11 OAuth 客户端 ID 配置不正确 “凭据”页面中查看您的客户端 ID 和密钥。如果这些设置看起来正确但无法正常运行,请使用 API 方法检查设置(Compute Engine 为 GET,App Engine 为 GET),然后使用 PATCH 重置这些设置。
13 OIDC 令牌无效 前往“凭据”页面,确认您的客户端 ID 未被删除或修改错误。
51 浏览器缺少连接池支持 要求最终用户将其浏览器更新到最新版本。如需详细了解连接要求,请参阅限制资源访问权限
52 主机名/SSL 证书不匹配 您的系统管理员需要更新 SSL 证书,使其与主机名一致。如需指导,请参阅限制资源访问权限
52(使用主证书映射条目) 主机名/SSL 证书不匹配 IAP 不支持主证书映射条目。使用单独的条目将每个证书映射到正确的主机名。如需相关指导,请参阅创建证书映射条目
53 主机名不在允许的网域中 管理员必须将您的主机名添加到允许的网域列表中。如需了解相关说明,请参阅限制资源访问权限
429 超出了请求配额 您已达到请求上限(每种请求类型每分钟 36 万次)。您可以考虑将工作负载分配到多个项目中,实现客户端请求限制,或者在需要实现合法增长时联系支持团队以增加配额。
551 在多个位置启用了 IAP 您无法同时在转发规则和后端服务上启用 IAP。按照为 Compute Engine 启用中的指南,在一个位置停用该功能。
700、701 员工池提供方问题 为员工池配置一个提供方。如需了解详细要求,请参阅工作组池限制
705 缺少员工身份的 OAuth 客户端 ID 请按照完整的设置流程操作:首先创建 OAuth 客户端 ID,然后更新 IAP 设置
708 员工池名称无效 验证您的员工池是否存在,以及是否使用了正确的格式:locations/global/workforcePools/WORKFORCE_POOL_ID
4003 连接或防火墙问题 检查您的虚拟机进程是否正在运行,以及是否正在侦听预期端口。另请验证您的防火墙规则是否允许在该端口上建立连接。
4010 连接已由目的地关闭 重置虚拟机。如果问题仍然存在,请检查 auth.log(通常位于 /var/log/ 中),或使用串行控制台进行更详细的诊断。
4033 权限、存在性或虚拟机状态问题 通过 IAP 页面确认您已为资源分配 Tunnel User 角色,并验证虚拟机是否存在且正在运行。
4047 实例不存在或已停止 确保虚拟机已启动且已完全完成其启动序列。

如果您无法解决问题,或者您未在此页面上看到列出的错误,请与 Cloud Customer Care 联系,并提供错误说明以及通过 GET 调用 API 得到的响应。请务必从响应中移除客户端密钥。