保護後端服務
除了驗證已部署閘道的使用者要求外,也請務必確保 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 函式和背景函式 來說有所不同。
- 根據預設,HTTP 函式需要驗證。您可以在 HTTP 函式上設定 IAM,指定函式是否允許未經驗證的叫用要求。
- 背景函式只能由訂閱的事件來源叫用。
如要讓 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 則需要存取權杖。目前沒有內建的解決方法。