保護後端服務

除了驗證部署的閘道收到的使用者要求,確保 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 函式

對於 Cloud Run 函式後端服務,Identity and Access Management (IAM) 用於控管函式的查看、建立、更新和刪除權限。IAM 會授予角色,強制對 Cloud Run Functions 服務 (例如 API Gateway) 的呼叫端進行驗證。

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

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

授予函式叫用權限的方式,會因HTTP 函式背景函式而異。

如要讓 API Gateway 呼叫 Cloud Run 函式後端服務,請將 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。也就是說,如果 API 設定參照一或多個含有 *.googleapis.com 的後端 (例如 bigquery.googleapis.com),呼叫就會失敗並傳回 401 回應代碼。

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