本文提供 Identity-Aware Proxy (IAP) 的疑難排解指南和常見問題解答。
排解網頁登入問題
如果在登入或存取應用程式時發生錯誤,檢查瀏覽器的網路流量有助於診斷問題。
檢查網路流量
- 在瀏覽器中開啟新的無痕 (Chrome) 或私密視窗。
- 開啟瀏覽器的開發人員工具,然後前往「Network」分頁。
- 選取「Preserve log」選項,擷取重新導向期間的所有要求。
- 前往發生問題的網址,重現問題。
- 檢查記錄中的網路要求,找出發生錯誤的位置。
分析網路流量
存取受 IAP 保護的應用程式時,系統會將您重新導向至登入頁面。成功透過識別資訊提供者完成驗證後,系統會向 https://iap.googleapis.com 網域提出要求,完成驗證後才會核發 IAP Cookie,並將您重新導向至應用程式。
您可以根據發生錯誤的網域排解錯誤:
iap.googleapis.com錯誤:如果iap.googleapis.com網域發生錯誤,頁面會顯示詳細錯誤訊息。如果錯誤與 IAP 設定有關 (例如 OAuth 用戶端問題),請調整設定。如果遇到不知道如何解決的用戶端錯誤,或看到伺服器錯誤,請提交Google Cloud 支援單。- 應用程式網域錯誤:如果重新導向至受 IAP 保護的應用程式網域後發生錯誤,系統會顯示錯誤代碼。如要瞭解常見錯誤,請參閱「錯誤代碼」一節。如果無法解決問題,請提交 Google Cloud 支援單。
我可以使用 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設為include或same-origin。
為什麼我收到的是
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 使用 IAP?
建議您盡量少用擁有者 (
roles/owner) 角色,改用更精細的權限。如需指引,請參閱 IAM 最佳做法。如果無法這麼做,可以使用防火牆規則封鎖 TCP 適用的 IAP。
IAP for TCP 使用什麼網域?
IAP 使用下列 Google 擁有的網域:tunnel.cloudproxy.appmtls.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通常代表暫時性問題。實作指數輪詢重試機制。如何修正 Identity Platform 錯誤 (錯誤代碼 38)
錯誤代碼
38表示在 IAP 中,外部身分的 Identity Platform 驗證網址設定不正確。如要找出網址,請按照下列步驟操作:
前往 IAP 頁面。
按一下「應用程式」分頁標籤。
在「Resource」(資源) 欄中找出應用程式,然後勾選對應的核取方塊。
確認「驗證網址」或「登入網址」正確無誤。
如要瞭解如何搭配使用外部身分和 IAP,請參閱「使用外部身分驗證使用者」。
如何解決超過配額錯誤 (錯誤代碼 429)?
如果應用程式超出 IAP 的要求限制,就會發生錯誤代碼 429。這項服務會強制執行不同的配額:
瀏覽器要求:每項專案每分鐘 360,000 次
程式輔助要求:每項專案每分鐘 360,000 次
程式輔助要求是指包含
AUTHORIZATION或PROXY-AUTHORIZATION標頭,且不含 IAP Cookie 的要求。所有其他要求 (包括不含憑證的要求) 都會視為瀏覽器要求。這些限制會一併套用至專案中所有受 IAP 保護的資源。
如果遇到配額相關錯誤,請考慮下列解決方案:
避免在正式環境中進行負載測試。請改用略過 IAP 的替代網路路徑。
如果是服務對服務流量,請實作指數輪詢,妥善處理 429 錯誤。
將高流量應用程式分散到多項專案。
針對以 API 為基礎的應用程式,使用 Apigee 或類似的 API 閘道解決方案。
如果問題是由自然成長造成,請與Google Cloud 支援團隊聯絡,要求提高配額。
使用 Identity Platform 時,IAP 發生登入問題或異常行為
搭配使用 Identity Platform 和第三方識別資訊提供者 (IdP) 時,ID 權杖中的大型宣告資料可能會導致 IAP 工作階段 Cookie 超過瀏覽器大小限制 (通常約為 4 KB)。IAP 會將工作階段資訊 (包括這些要求) 儲存在瀏覽器 Cookie 中。
如果超過工作階段 Cookie 大小限制,可能會導致登入失敗或無限登入迴圈。為避免這些問題,建議採取下列行動:
減少憑證附加資訊:設定第三方 IdP,只將必要的憑證附加資訊傳送至 Identity Platform。盡量減少權杖中包含的聲明大小和數量。
檢查 Cookie 大小:使用瀏覽器開發人員工具,檢查應用程式網域上設定的 Cookie 大小。尋找與 Cookie 大小相關的警告,尤其是與 IAP 相關的 Cookie。
測試最少量的要求:暫時設定 IdP,傳送最少量的要求。如果問題解決,就表示根本原因是 Cookie 大小限制。
為什麼我收到 HTTP 502 錯誤,並顯示「Google 帳戶 OAuth 用戶端 ID/密鑰空白」?
如果您存取受 IAP 保護的應用程式,並收到
HTTP 502 Bad Gateway錯誤和Empty Google Account OAuth client ID(s)/secret(s).訊息,表示 IAP 找不到應用程式的 OAuth 憑證。這項錯誤通常會在下列情況發生:
- 專案不屬於任何組織:預設的 Google 代管 OAuth 用戶端僅適用於屬於Google Cloud 組織的專案。如果專案不屬於任何組織,您必須為 App Engine 或相應平台設定自訂 OAuth 憑證。
- OAuth 憑證已刪除或未設定:如果您先前設定了自訂 OAuth 憑證,但 OAuth 用戶端已刪除,請在「Credentials」(憑證) 頁面重新建立憑證,並按照「搭配使用自訂 OAuth 用戶端與 IAP」一文所述更新 IAP 設定。
錯誤代碼
下表列出設定及使用 IAP 時,系統傳回的常見錯誤代碼和訊息。
錯誤代碼 說明 疑難排解 7、HTTP 502 OAuth 用戶端 ID 或密鑰空白 ( Empty Google Account OAuth client ID(s)/secret(s).)如果專案不屬於任何組織,請設定自訂 OAuth 憑證。否則,請前往「憑證」頁面驗證用戶端 ID 和密鑰,或使用 API 方法 (Compute Engine 的 GET、App Engine 的GET) 檢查設定,並使用PATCH重設。詳情請參閱「HTTP 502 錯誤」。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 EngineGET),並使用PATCH重設。13 OIDC 權杖無效 前往「憑證」頁面,確認用戶端 ID 未遭刪除或不當修改。 51 瀏覽器不支援連線集區 請使用者將瀏覽器更新至最新版本。如要進一步瞭解連線需求,請參閱「限制資源存取權」。 52 主機名稱/SSL 憑證不符 系統管理員必須更新 SSL 憑證,使其與主機名稱相符。如需相關指引,請參閱「限制資源存取權」。 52 (含主要憑證對應關係) 主機名稱/SSL 憑證不符 IAP 不支援主要憑證對應關係。請使用個別項目,將每個憑證對應至正確的主機名稱。如需相關指南,請參閱「建立憑證對應關係」。 53 主機名稱不在允許的網域中 管理員必須將您的主機名稱加入允許網域清單。如需操作說明,請參閱「限制資源存取權」。 253、HTTP 429 超過要求配額 您已達到要求上限 (每種要求類型每分鐘 360,000 次)。建議您將工作負載分散到多項專案、實作用戶端要求節流機制,或在需要合理擴充時聯絡支援團隊提高配額。 551 在多個位置啟用 IAP 您無法同時在轉送規則和後端服務啟用 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 取得的回應。請務必從回應中移除用戶端密鑰。