本文档包含有关 Identity-Aware Proxy (IAP) 的常见问题解答。
我可以使用 IAP 保护哪些应用?
IAP 可用于:
- App Engine 标准环境和 App Engine 柔性环境应用
- 使用 HTTP(S) 负载平衡后端服务的 Compute Engine 实例
- Google Kubernetes Engine 容器
- 使用 HTTP(S) 负载均衡后端服务的 Cloud Run 应用
IAP 不能与 Cloud CDN 搭配使用。
登录我的应用后,为什么网址末尾会有 #?
在某些浏览器中及某些特定情况下,经过身份验证的网址末尾会附加一个 #
。这是正常现象,不会引起登录问题。
为什么我的请求失败并返回 405 Method Not Allowed
?
这种情况通常是由于您的请求没有附加 Cookie。默认情况下,JavaScript 方法不会附加 Cookie。
不同的请求方法需要采用不同的方法:
- 对于
XMLHttpRequest
,将withCredentials
设置为true
- 对于 Fetch API,将
credentials
设置为include
或same-origin
如需了解如何处理与会话相关的错误,请参阅管理 IAP 会话。
为什么我收到的是 HTTP 401 Unauthorized
,而不是 302 Redirect
?
仅当您的客户端配置为处理重定向时,IAP 才会发送 302 Redirect
。
将 HTTP Accept="text/html,*/*"
添加到请求标头中,以指明支持重定向。
为什么 POST 请求不会触发重定向?
浏览器不会将重定向操作作为对 POST 请求的响应。而是会返回 401 Unauthorized
状态代码。
对于向 IAP 保护的资源发出的 POST 请求,请添加以下任一项:
Authorization: Bearer
标头中的 ID 令牌- 有效的 Cookie(请参阅刷新会话)
如果我已停用 API,是否可以使用 IAP?
是,在停用 API 后,您仍然可以访问受 IAP 保护的资源,但无法修改 IAM 权限。
如何阻止具有 Owner 角色的用户使用 IAP 实现 TCP?
理想情况下,应限制使用 Owner (roles/owner
) 角色,而改为使用更精细的权限。如需相关指导,请参阅 IAM 最佳实践。
如果无法实现上述方法,您可以使用防火墙规则阻止使用 IAP 实现 TCP。
IAP 使用哪个网域实现 TCP?
IAP 使用以下 Google 自有网域:
tunnel.cloudproxy.app
mtls.tunnel.cloudproxy.app
(启用基于证书的访问权限时)
为什么我会收到 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/22
和 35.191.0.0/16
的流量。如果这些 IP 无法访问您的后端,您的应用将无法访问。
对于与特定虚拟机的 IAP TCP 连接,还应确保虚拟机接受来自 35.235.240.0/20
范围的连接。
为什么我会间歇性收到内部服务器错误?
An internal server error occurred while authorizing your request.
Error code X
等消息表示后端失败。
错误代码 1
、30
、62
、63
、64
或 703
通常反映的是暂时性问题。为重试实现指数退避算法。
如何解决配额超出错误 (429)?
如果您的应用超出了 IAP 的请求限制,就会出现错误代码 429。该服务会强制执行单独的配额:
- 基于浏览器的请求:每个项目每分钟 36 万个
- 程序化请求:每个项目每分钟 36 万个
程序化请求是指包含 AUTHORIZATION
或 PROXY-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 得到的响应。请务必从响应中移除客户端密钥。