保護後端服務

除了驗證已部署閘道的使用者要求外,也請務必確保 API Gateway 與後端服務之間的存取權。您可以透過下列方式,防止後端代管服務 (Cloud Run、Cloud Run 函式、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 函式

針對 Cloud Run 函式後端服務,您可以使用身分與存取權管理 (IAM) 控管查看、建立、更新和刪除函式的權限。IAM 會透過授予角色,強制執行 Cloud Run 函式服務 (例如 API Gateway) 呼叫端的驗證。

使用 IAM 授予角色和權限,可控管兩組操作:

  • 開發人員作業:建立、更新及刪除函式,以及管理函式存取權。
  • 函式叫用:導致函式執行。

授予叫用函式功能的權限,對於 HTTP 函式背景函式 來說有所不同。

如要讓 API Gateway 呼叫 Cloud Functions 後端服務,請將 roles/cloudfunctions.invoker 角色或任何含有 cloudfunctions.functions.invoke 權限的角色授予閘道服務帳戶。

您可以使用服務層級 IAM 控管閘道對個別函式的存取權,或是使用專案層級 IAM 控管閘道對專案中的所有函式的存取權。

如果閘道對 Cloud Run 函式服務提出的要求遭到拒絕,請確認閘道的服務帳戶已獲授予 roles/cloudfunctions.invoker 角色,且閘道的服務帳戶具備 cloudfunctions.functions.invoke 權限。如要進一步瞭解叫用者角色和權限,請參閱 Cloud Functions IAM 參考資料

App Engine

您必須使用 Identity Aware Proxy (IAP) 確保已驗證要求,以保護 App Engine 應用程式的安全。

請按照步驟為部署 App Engine 後端服務的專案啟用 IAP。啟用 IAP 可確保 App Engine 後端應用程式的存取權。

如要讓 API Gateway 呼叫 App Engine 後端服務,請按照「設定 IAP 存取權」中的步驟,將 IAP-secured Web App User 角色授予與閘道相關聯的服務帳戶。此外,請為服務帳戶授予包含下列權限的角色:

  • appengine.applications.update
  • clientauthconfig.clients.create
  • clientauthconfig.clients.getWithSecret

其他 Google Cloud API

API Gateway 不支援將代理轉送至其他 Google Cloud API。這表示使用 *.googleapis.com (例如 bigquery.googleapis.com) 參照一或多個後端的 API 設定,會導致呼叫失敗,並傳回 401 回應代碼。

API Gateway 會使用 ID 權杖驗證後端,而其他 Google Cloud API 則需要存取權杖。目前沒有內建的解決方法。