防火牆會決定哪些網路流量可以通過,哪些流量遭到拒絕。防火牆可套用至傳入流量 (輸入)、傳出流量 (輸出),或兩者皆可。針對 App Engine,App Engine 防火牆只會套用至路由至應用程式或服務的入站流量。
總覽
App Engine 防火牆會檢查應用程式收到的所有類型要求,包括:
- 將一般網頁流量導向應用程式的
appspot.com
位址或自訂網域。 - 來自 Cloud Load Balancing 的要求。
- 來自內部來源的流量,例如 Compute Engine 虛擬機器 (VM) 和 Cloud Tasks。
如果應用程式已設定為使用其他網路服務或產品,您可能需要建立規則,以便在 App Engine 防火牆和其他產品的防火牆或安全性設定中控管入站流量。本指南將說明 App Engine 防火牆的一般行為,以及這些特殊用途的詳細資訊。
App Engine 防火牆規則
您可以使用 Google Cloud 控制台、Google Cloud CLI 或 Admin API,指定允許或封鎖指定 IP 範圍的規則,藉此設定 App Engine 防火牆規則。
根據預設,所有與規則不相符的要求皆可存取您的應用程式。如要封鎖所有不符合特定規則的要求 (不包括預設允許的內部服務要求),請將 default
規則的動作變更為 deny
。
防火牆功能
在 App Engine 標準環境中,App Engine 防火牆可允許特定內部流量略過防火牆。也就是說,如果您將 default
規則設為 deny
,從某些服務傳送至 App Engine 標準環境的要求就不會遭到封鎖。這些是應用程式本身設定中要求的所有流量類型,或是從同一個應用程式傳送的流量。以這種方式略過防火牆規則的要求包括:
- 暖機要求
- 使用 App Engine HTTP 的 Cloud Scheduler 工作 (包括 App Engine Cron)
- Cloud Tasks 中的 App Engine 工作 (包括 App Engine 工作佇列)
如果應用程式使用 App Engine 標準環境,且服務與第一代執行階段相容,則來自舊版 Mail API 的通知也會略過防火牆。
允許服務發出的要求
下表列出常見服務的 IP 範圍和 App Engine 防火牆行為。您使用的 IP 範圍取決於傳入的要求是傳送至在 App Engine 標準環境或彈性環境中執行的版本。
服務 傳送至 App Engine 標準環境的要求 IP 範圍 傳送至 App Engine 彈性環境的要求 IP 範圍 Cloud Storage 或 Blobstore 0.1.0.30/32 不適用 使用 Cloud Tasks 中的 App Engine HTTP 和 App Engine 工作 (包括 App Engine 工作佇列) 的 Cloud Scheduler 工作 0.1.0.2/32,如果設為拒絕,則會略過預設防火牆規則 0.1.0.2/32 App Engine Cron 0.1.0.1/32 或 0.1.0.2/32,如果設為拒絕,則會略過預設防火牆規則 0.1.0.1/32 或 0.1.0.2/32 網址擷取 0.1.0.40/32 0.1.0.40/32 已啟用私人 Google 存取權的 Compute Engine 執行個體 0.0.0.0/32 0.0.0.0/32 視用途而定,設定 App Engine 防火牆規則時,可能需要遵循下列額外指示:
- 從新建立或更新的 App Engine Cron 工作傳送至 App Engine 標準或彈性環境的要求,會來自
0.1.0.2
。如果是使用舊版 gcloud (326.0.0 以下版本) 建立的 Cron 工作,Cron 要求會來自0.1.0.1
。如要進一步瞭解如何識別 App Engine Cron 服務的要求,請參閱「驗證 Cron 要求」。 - 如果您的應用程式會與 Cloud Load Balancing 互動,或已連線至 VPC 網路,請參閱下方的「與其他產品或服務互動」一節。
App Engine 標準範例
在標準環境中執行的應用程式含有兩項服務:
frontend_service
和backend_service
。frontend_service
會使用搭配 App Engine HTTP 的 Cloud Tasks,將訊息傳送至backend_service
。default
防火牆規則會允許 Cloud Tasks 要求,即使已設為deny
也是如此,因此您不需要為 Cloud Tasks 建立防火牆規則。不過,如果您想限制應用程式的存取權,並明確封鎖 Cloud Tasks 要求,請為 IP 範圍
0.1.0.2/32
建立deny
防火牆規則。App Engine 彈性環境範例
在彈性環境中執行的應用程式含有兩項服務:
frontend_service
和backend_service
,且防火牆已設定為預設拒絕流量。frontend_service
會使用搭配 App Engine HTTP 的 Cloud Tasks,將訊息傳送至backend_service
。由於default
防火牆規則會拒絕 Cloud Tasks 要求,因此您需要為0.1.0.2/32
建立allow
防火牆規則。與其他產品或服務互動
Cloud Load Balancing
如果您使用Cloud Load Balancing 和無伺服器 NEG,請注意下列事項:
- 負載平衡器不會干擾或與 App Engine 防火牆規則互動。只有在無伺服器 NEG 將流量導向 App Engine 時,才會評估 App Engine 防火牆規則。
建議您使用入口控管機制,讓應用程式只接收來自負載平衡器 (以及您使用的 VPC,如果有) 的要求。否則,使用者可以使用應用程式的 App Engine 網址,略過負載平衡器、Google Cloud Armor 安全政策、SSL 憑證和透過負載平衡器傳遞的私密金鑰。
如果輸入控管已設為接收
internal-and-cloud-load-balancing
流量,請保留預設的 App Engine 防火牆規則 (allow
),並使用 Google Cloud Armor 網頁應用程式防火牆 (WAF) 規則。
避免快取內容遭到存取
App Engine 防火牆的前方有網路 Proxy 和瀏覽器等負責快取內容的機制。這些機制進行快取時,相關內容會透過特定網址以公開的方式提供,直至到期為止,但即使您建立新的防火牆規則,前述機制仍可存取快取內容。
如要瞭解如何變更靜態內容的預設到期時間,或避免系統快取靜態內容,請參閱「快取效期」。如要避免應用程式程式碼產生的動態內容輸出內容遭快取,請使用
Cache-Control
和Expires
HTTP 回應標頭。如要進一步瞭解 HTTP 標頭,包括如何控管快取,請參閱「避免快取」一文。後續步驟
請按照「建立防火牆」中的操作說明,瞭解如何設定 App Engine 防火牆規則。