防火牆會決定哪些網路流量可以通過,哪些流量遭到拒絕。防火牆可套用至傳入流量 (輸入)、傳出流量 (輸出),或兩者皆可。針對 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 範圍 |
---|---|---|
App Engine Cron | 0.1.0.1/32 或 0.1.0.2/32,如果設為拒絕,則會略過預設防火牆規則 | 0.1.0.1/32 或 0.1.0.2/32 |
具備外部 IP 位址的 Compute Engine 執行個體 | 執行個體的外部 IP 位址 | 執行個體的外部 IP 位址 |
沒有外部 IP 位址的 Compute Engine 執行個體 | 0.0.0.0/32 | 0.0.0.0/32 |
沒有外部 IP 位址的 Compute Engine 執行個體,使用 Cloud NAT 建立傳出連線 | 0.0.0.0/32 | 0.0.0.0/32 |
使用 Cloud Tasks 中的 App Engine HTTP 和 App Engine 工作 (包括 App Engine 工作佇列) 的 Cloud Scheduler 工作 | 0.1.0.2/32,如果設為拒絕,則會略過預設防火牆規則 | 0.1.0.2/32 |
Cloud Storage 或 Blobstore | 0.1.0.30/32 | 不適用 |
網址擷取 | 0.1.0.40/32 | 0.1.0.40/32 |
暖機要求 | 0.1.0.3/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 防火牆規則。