本文包含 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 權限。
如何防止擁有「擁有者」角色的使用者使用 TCP 的應用程式內購功能?
建議您盡量減少使用擁有者 (roles/owner
) 角色,改用更精細的權限。如需相關指南,請參閱身分與存取權管理最佳做法。
如果無法這麼做,您可以使用防火牆規則封鎖 TCP 的 IAP。
IAP for 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 無法連上後端,就無法存取應用程式。
如果是與特定 VM 建立的 IAP TCP 連線,請一併確認 VM 是否接受來自 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。這項服務會強制執行不同的配額:
- 透過瀏覽器提出的要求:每項專案每分鐘 360,000 次
- 程式輔助廣告請求:每項專案每分鐘 360,000 次
程式輔助要求包含 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 | 超出要求配額 | 您已達到要求上限 (每個要求類型為 360,000/分鐘)。如需合理擴充,請考慮在多個專案中分配工作負載、實施用戶端要求節流,或與支援團隊聯絡,要求增加配額。 |
551 | 在多個位置啟用應用程式內購 | 您無法同時在轉送規則和後端服務上啟用 IAP。按照「為 Compute Engine 啟用」一節的說明,在一個位置停用這項功能。 |
700、701 | 工作團隊集區提供者問題 | 為工作團隊集區設定單一提供者。詳情請參閱「工作站集區限制」。 |
705 | 缺少人力資源身分的 OAuth 用戶端 ID | 請完成整個設定程序:先建立 OAuth 用戶端 ID,然後更新 IAP 設定。 |
708 | 工作團隊集區名稱無效 | 確認工作團隊集區是否存在,且採用正確的格式:locations/global/workforcePools/WORKFORCE_POOL_ID 。 |
4003 | 連線或防火牆問題 | 請確認 VM 程序是否正在執行,並在預期的通訊埠上監聽。此外,請確認防火牆規則允許該通訊埠的連線。 |
4010 | 連線遭到目的地關閉 | 重設 VM。如果問題仍未解決,請檢查 auth.log (通常位於 /var/log/ 中),或使用序列主控台進行更詳細的診斷。 |
4033 | 權限、存在或 VM 狀態問題 | 透過 IAP 頁面確認您已為資源指派「通道使用者」角色,並驗證 VM 是否存在且正在執行。 |
4047 | 執行個體不存在或已停止 | 請確認 VM 已開機並完成啟動程序。 |
如果無法解決問題,或未在本頁列出的錯誤,請與 Cloud Customer Care 聯絡,並說明錯誤和您從 GET
對 API 的呼叫中收到的回應。請務必從回應中移除用戶端機密。