防火牆會決定允許通過的網路流量,以及拒絕的流量。防火牆可套用至連入流量 (輸入)、連出流量 (輸出) 或兩者。在 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 彈性環境可能會在虛擬私有雲 (VPC) 層級自動設定防火牆規則,但請注意,VPC 防火牆不會與 App Engine 防火牆互動。
允許服務發出的要求
下表列出常見服務的 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 防火牆的設定和強制執行方式,與虛擬私有雲防火牆不同。虛擬私有雲防火牆規則適用於在虛擬私有雲網路中執行的資源 (例如 Compute Engine 虛擬機器),而 App Engine 防火牆規則則適用於應用程式或服務的傳入要求。
如果網路環境中已設定虛擬私有雲防火牆規則 (例如虛擬私有雲防火牆規則或階層式防火牆政策),則虛擬私有雲層級防火牆和 App Engine 防火牆都必須允許傳入要求 IP 範圍,App Engine 應用程式才能接收要求。
如果是虛擬私有雲層級的防火牆,系統會先評估階層式防火牆政策,再評估虛擬私有雲防火牆規則,並在評估虛擬私有雲防火牆時依序執行。如果要求同時獲得虛擬私有雲層級防火牆和 App Engine 防火牆的許可,App Engine 應用程式或服務就會收到要求。如果虛擬私有雲防火牆拒絕來自 App Engine 防火牆允許的相同 IP 範圍的要求,則無法存取 App Engine 應用程式。
共用虛擬私有雲
App Engine 彈性環境可建立防火牆,視應用程式是否設定為透過共用 VPC 使用 VPC 網路而定。
如果 App Engine 彈性應用程式使用共用虛擬私有雲,App Engine 彈性環境不會自動建立防火牆規則。如要控管存取權及允許虛擬私有雲網路上的流量,您可以在共用虛擬私有雲網路上建立防火牆規則。
此外,如要允許來自流量來源的要求,您需要在虛擬私有雲防火牆和 App Engine 防火牆中,允許相同的 IP 範圍。如果沒有在 VPC 防火牆和 App Engine 防火牆中指定 IP 範圍,該 IP 範圍就無法存取您的 App Engine 應用程式或服務。
如果 App Engine 彈性環境應用程式未設定為使用共用虛擬私人雲端,App Engine 彈性環境會建立最多兩項隱藏的虛擬私人雲端防火牆規則,視應用程式是否使用分割健康狀態檢查 (預設) 或舊版健康狀態檢查而定。這些隱藏的防火牆規則會允許提供服務和進行健康狀態檢查的流量傳入彈性環境:
- 網路名稱:
app.yaml
中指定的網路,如果未設定網路,則為預設網路。 - 目標標記:
app.yaml
檔案中指定的instance_tags
。根據預設,如果未提供任何目標標記,App Engine 彈性環境會產生aef-INSTANCE_ID
格式的專屬標記。這個標記只會影響該特定彈性版本中的執行個體,防火牆規則會以這個標記為目標。 - 「Direction of traffic」(流量方向):ingress
- 「Action on match」(相符時執行的動作):允許
- 「Source IP ranges」(來源 IP 範圍):
35.191.0.0/16
和130.211.0.0/22
- 通訊協定和通訊埠:
- tcp:
8443
(適用於舊版健康狀態檢查) 或10402
(適用於分割健康狀態檢查)
- tcp:
- Priority (優先順序):
1000
避免快取內容遭到存取
App Engine 防火牆的前方有網路 Proxy 和瀏覽器等負責快取內容的機制。這些機制進行快取時,相關內容會透過特定網址以公開的方式提供,直至到期為止,但即使您建立新的防火牆規則,前述機制仍可存取快取內容。
如要避免內容遭快取,請使用 Cache-Control
和 Expires
HTTP 回應標頭。如要進一步瞭解這些 HTTP 標頭,包括如何控管快取,請參閱「避免快取」。
後續步驟
請按照「建立防火牆」一文中的操作說明,瞭解如何設定 App Engine 防火牆規則。