保護後端服務
除了驗證使用者對已部署閘道的要求,也必須保護 API Gateway 與後端服務之間的存取權。您可以採取下列做法,防止公開存取後端代管服務 (Cloud Run、Cloud Run functions、App Engine 等):
- 只允許通過驗證的使用者存取後端服務。
- 將必要權限授予與閘道 API 設定相關聯的服務帳戶,讓閘道有權叫用後端。
本頁面說明保護後端服務所需的步驟,以及閘道服務帳戶存取這些服務所需的角色和權限。
Cloud Run
根據預設,所有 Cloud Run 全代管服務都會以不公開的方式部署,也就是說,如果要求中未提供驗證憑證,就無法存取這些服務。
Cloud Run 服務受到 IAM 保護。根據預設,任何具備 run.routes.invoke 權限的角色都能呼叫 Cloud Run 服務。
您可以在 Cloud Run (全代管) 服務上設定 IAM,將存取權授予其他使用者。
如要透過 API Gateway 存取 Cloud Run 服務,請將適當的角色和權限授予閘道的服務帳戶:roles/run.invoker 角色或包含 run.routes.invoke 權限的角色。
您可以使用服務層級 IAM,控管閘道對個別服務的存取權,或使用專案層級 IAM,控管閘道對專案中所有服務的存取權。
如果閘道對 Cloud Run 服務的要求遭到拒絕,請確認閘道的服務帳戶已獲派 roles/run.invoker 角色,且閘道的服務帳戶具備 run.routes.invoke 權限。如要進一步瞭解叫用者角色和權限,請參閱 Cloud Run IAM 參考資料。
Cloud Run functions
如果是 Cloud Run functions 後端服務,則會使用 Identity and Access Management (IAM) 控管查看、建立、更新及刪除函式的權限。IAM 會授予角色,強制驗證 Cloud Run functions 服務 (例如 API Gateway) 的呼叫端。
透過 IAM 授予角色和權限,即可控管兩組動作:
- 開發人員作業:建立、更新及刪除函式,以及管理函式的存取權。
- 函式叫用:導致函式執行。
- HTTP 函式預設需要驗證。您可以設定 HTTP 函式的 IAM,指定函式是否允許未經驗證的叫用。
- 背景函式只能由訂閱的事件來源叫用。
如要讓 API Gateway 呼叫 Cloud Run functions 後端服務,請將 roles/cloudfunctions.invoker 角色或任何包含 cloudfunctions.functions.invoke 權限的角色,授予閘道的服務帳戶。
您可以使用服務層級 IAM 控管閘道對個別函式的存取權,或使用專案層級 IAM 控管閘道對專案中所有函式的存取權。
如果閘道對 Cloud Run functions 服務的要求遭到拒絕,請確認閘道的服務帳戶已獲派 roles/cloudfunctions.invoker 角色,且閘道的服務帳戶具備 cloudfunctions.functions.invoke 權限。如要進一步瞭解叫用者角色和權限,請參閱 Cloud Functions IAM 參考資料。
App Engine
如要保護 App Engine 應用程式,您必須使用 Identity-Aware Proxy (IAP),確保要求經過驗證。
按照步驟為部署 App Engine 後端服務的專案啟用 IAP。啟用 IAP 可確保 App Engine 後端應用程式的存取安全。
如要讓 API Gateway 呼叫 App Engine 後端服務,請按照「設定 IAP 存取權」中的步驟操作,將 IAP-secured Web App User 角色授予與閘道相關聯的服務帳戶。此外,請為服務帳戶授予包含下列權限的角色:
appengine.applications.updateclientauthconfig.clients.createclientauthconfig.clients.getWithSecret
其他 Google Cloud API
Google Cloud API (例如 aiplatform.googleapis.com 或 bigquery.googleapis.com) 需要存取權杖,並會拒絕 API Gateway 傳送至其他後端的 ID 權杖。閘道能否呼叫這些 API,取決於其串流模式:
串流閘道:
effectiveStreamingMode為EFFECTIVE_STREAMING_MODE_ENABLED的閘道會使用閘道服務帳戶的存取權杖,向主機結尾為.googleapis.com或.vertexai.goog的每個後端進行驗證。存取權杖只有https://www.googleapis.com/auth/cloud-platform範圍,因此閘道無法呼叫需要其他 OAuth 範圍的 API 方法。相同閘道上的其他後端仍會收到 ID 權杖。如果後端設定了
disable_auth(OpenAPI 2.0) 或disableAuth(OpenAPI 3.x),則不會收到權杖。jwt_audience(OpenAPI 2.0) 和jwtAudience(OpenAPI 3.x) 欄位對這些後端沒有影響。將目標 API 所需的 IAM 角色授予閘道的服務帳戶,例如 Gemini Enterprise Agent Platform (
aiplatform.googleapis.com) 的 Agent Platform 使用者 (roles/aiplatform.user) 角色。如果串流閘道尚未傳送存取權杖,則會在 API Gateway 下次推出閘道更新時開始傳送。如要立即切換,請更新為新的 API 設定。其他閘道:
effectiveStreamingMode為EFFECTIVE_STREAMING_MODE_DISABLED的閘道不支援呼叫 Google CloudAPI,呼叫可能會失敗,並傳回401回應代碼。