防火牆會決定允許通過的網路流量,以及拒絕的流量。防火牆可套用至連入流量 (輸入)、連出流量 (輸出) 或兩者。在 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 |
使用 App Engine HTTP 和 Cloud Tasks 中的 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 互動,或是連線至虛擬私有雲網路,請參閱下方的「與其他產品或服務互動」一節。
App Engine 標準環境範例
在標準環境中執行的應用程式有兩項服務:frontend_service
和 backend_service
。frontend_service
會使用 Cloud Tasks 和 App Engine HTTP 將訊息傳送至 backend_service
。由於default
防火牆規則允許 Cloud Tasks 要求 (即使設定為 deny
),因此您不需要為 Cloud Tasks 建立防火牆規則。
不過,如要限制應用程式存取權,並明確封鎖 Cloud Tasks 要求,請為 IP 範圍 deny
建立 0.1.0.2/32
防火牆規則。
App Engine 彈性環境範例
在彈性環境中執行的應用程式有兩項服務:frontend_service
和 backend_service
,且防火牆已設定為預設拒絕流量。frontend_service
會使用 Cloud Tasks 和 App Engine HTTP 將訊息傳送至 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 防火牆規則。
建議您使用 Ingress 控制項,確保應用程式只會接收負載平衡器 (以及您使用的 VPC) 傳送的要求。否則,使用者可以透過應用程式的 App Engine 網址略過負載平衡器、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 防火牆規則。