建立 App Engine 防火牆規則

在 App Engine 中,您最多可以為防火牆建立 1000 項個別規則,並為這些規則指定優先順序,藉此允許或限制特定範圍的 IP 位址和子網路。應用程式只會回應防火牆允許的請求。

如要瞭解 App Engine 防火牆的運作方式,請參閱「瞭解防火牆」。

事前準備

您必須具備下列其中一種 App Engine IAM 角色,才能為應用程式建立 App Engine 防火牆規則,這些角色均擁有建立或修改防火牆規則的必要權限:

  • App Engine 管理員
  • 編輯者
  • 擁有者

建立防火牆規則

您可以使用以下任何一種方法建立防火牆規則。每次建立規則時,都要重複下列步驟:

主控台

請使用主控台的「防火牆規則」頁面建立防火牆規則: Google Cloud

  1. 前往 Google Cloud 主控台的「建立防火牆規則」頁面:

    前往「Create a Firewall Rule」(建立防火牆規則) 頁面

  2. 指定防火牆規則的詳細資料:

    1. 在「Priority」(優先順序) 中輸入整數來指定規則的相對重要性,以及定義規則的評估順序。

      有效值是 12147483646。優先順序為 1 的規則會最先受到評估,優先順序 2147483647 則保留給「預設」規則,這項規則最後才會受到評估。

    2. 在「Action on match」(相符時執行的動作) 中,指定要允許或拒絕符合規則的存取要求。設為 allow 的規則會將要求轉送至應用程式,而設為 deny 的規則會以 403 Forbidden 錯誤回應要求。
    3. 在「IP range」(IP 範圍) 中,定義適用於該規則的 IP 位址範圍。IP 位址範圍必須以 CIDR 標示法來定義,且可包含子網路遮罩,同時支援 IPv4 和 IPv6。
    4. 選填項目:在「Description」(說明) 中新增規則的相關說明,但長度不可超過 100 個字元。
  3. 按一下 [Save] (儲存) 即可建立規則。
  4. 測試規則,以確保優先順序和動作會提供合乎您預期的行為:
    1. 按一下 [Test IP address] (測試 IP 位址)
    2. 輸入您要驗證的 IP 位址,然後按一下 [Test] (測試),確保系統能夠正確評估對應的規則。
gcloud

請執行下列 gcloud app firewall-rules 指令來建立防火牆規則:

  1. 執行下列指令來建立防火牆規則:

    gcloud app firewall-rules create PRIORITY --action ALLOW_OR_DENY --source-range IP_RANGE --description DESCRIPTION
    where:
    • PRIORITY 是介於 12147483646 之間的整數,用來定義規則的重要性和評估順序。優先順序為 1 的規則會最先受到評估,優先順序 2147483647 則保留給「預設」規則,這項規則最後才會受到評估。
    • ALLOW_OR_DENY 指定要允許或拒絕符合規則的存取要求。有效值為 allowdeny。設為 allow 的規則會將要求轉送至應用程式,而設為 deny 的規則會以 403 Forbidden 錯誤來回應要求。
    • IP_RANGE 定義適用於該規則的 IP 位址範圍。IP 範圍必須以 CIDR 標示法來定義,且可包含子網路遮罩,同時支援 IPv4 和 IPv6。
    • DESCRIPTION 是選填的規則說明,長度不超過 100 個字元。
  2. 執行下列指令來測試規則,以確保優先順序和動作會提供合乎您預期的行為:
    gcloud app firewall-rules test-ip IP_ADDRESS
    其中 IP_ADDRESS 是您要用來測試防火牆規則的 IP 位址。
  3. 執行下列指令,來查看現有規則的清單:
    gcloud app firewall-rules list
  4. 執行下列指令,刪除某個現有的規則:
    gcloud app firewall-rules delete PRIORITY
    其中 PRIORITY 是待刪除規則的優先順序值。
範例:
以下範例可協助您建立防火牆:
  • 新增允許 IPv6 位址和子網路遮罩的規則,接著進行測試,確保其評估順序高於其他規則:

    gcloud app firewall-rules create 123 --source-range fe80::3636:3bff:fecc:8778/128 --action allow
    gcloud app firewall-rules test-ip fe80::3636:3bff:fecc:8778
  • 新增拒絕 IPv4 位址和子網路遮罩的規則,接著進行測試,確保系統會正確評估這項規則:

    gcloud app firewall-rules create 123456 --source-range "74.125.0.0/16" --action deny
    gcloud app firewall-rules test-ip 74.125.0.8
  • 更新並測試預設規則,確保這項規則會限制所有不符合其他任何規則的 IP 位址:

    gcloud app firewall-rules update default --action deny
    gcloud app firewall-rules test-ip 123.456.7.89
API

如要透過程式建立 App Engine 應用程式的防火牆規則,您可以使用 Admin API 中的 apps.firewall.ingressRules 方法。

如要測試防火牆規則並確保優先順序和動作符合預期行為,您可以使用 apps.firewall.ingressRules.list 方法,並在 matchingAddress 參數中指定要測試的 IP 位址。

瞭解 App Engine 防火牆規則

App Engine 防火牆由已排序的規則清單組成,這些規則可允許或拒絕指定的 IP 位址或範圍存取您的應用程式,涵蓋範圍包括 App Engine 應用程式的所有資源。

防火牆規則優先順序

防火牆規則是依重要性排序,而重要性則根據您對每項規則以數值定義的優先順序而定。您必須為每項規則指定專屬的優先順序值,因為此值可定義各規則相對於防火牆中其他規則的重要性。規則的優先順序值從 1 (最重要的值) 排列到 2147483647 (最不重要的值)。

個防火牆都包含一項自動建立的 default規則,優先順序為 2147483647,適用於應用程式的整個 IP 範圍。default 規則的評估順序一律次於防火牆的其他所有規則,並適用於所有 IP 位址的所有要求。

防火牆會先評估優先順序最高的規則,接下來再按順序評估防火牆中的其他規則,直到某項規則符合要求的 IP 範圍。找到相符的規則後,防火牆就會允許或拒絕連線,並略過防火牆中其餘的所有規則。如果防火牆中所有手動定義的規則皆不符合要求,系統就會評估 default 規則。

舉例來說,如果您建立優先順序為 1 的規則,系統會一律先評估這項規則。如果傳入要求與優先順序為 1 的規則相符,系統則只會評估該規則,並略過防火牆中的所有其他規則,包括 default 規則在內。

以下防火牆範例說明規則優先順序對防火牆行為的影響。

防火牆範例

在此範例中,某公司設定了防火牆,將開發中應用程式的存取權授予工程團隊和內部公司網路。建立防火牆規則時,每個優先順序之間保留了較大的間隔值,以因應增加規則之需。

優先順序 動作 IP 範圍 說明
1000 拒絕 192.0.2.1 拒絕 DoS 攻擊者存取。
2000 允許 198.51.100.2 允許分公司辦公室的某位工程師存取。
3000 拒絕 198.51.100.0/24 拒絕所有非工程部門建築物的網路存取。
5000 允許 203.0.113.0/24 允許主建築物的網路存取。
2147483647 拒絕 * 預設動作

建立防火牆之後,假設系統會將下列要求導向範例應用程式,請注意應用程式的回應:

  • 來自 198.51.100.2 的要求符合優先順序為 2000 的規則,並且獲得允許。
  • 來自 198.51.100.100 的要求符合優先順序為 3000 的規則,因此遭到拒絕。
  • 來自 203.0.113.54 的要求符合優先順序為 5000 的規則,並且獲得允許。
  • 來自 45.123.35.242 的要求符合預設規則,因此遭到拒絕。

解決發生衝突的規則

舉例來說,假設將公司防火牆的兩個優先順序互換,如果將優先順序 2000 和 3000 的規則互換,請留意以下非預期的行為。

優先順序 動作 IP 範圍 說明
1000 拒絕 192.0.2.1 拒絕 DoS 攻擊者存取。
2000 拒絕 198.51.100.0/24 拒絕所有非工程建築物的網路存取。
3000 允許 198.51.100.2 允許分公司辦公室的某位工程師存取。
5000 允許 203.0.113.0/24 允許主建築物的網路存取。
2147483647 拒絕 * 預設動作

分公司辦公室裡的工程師將無法存取公司的應用程式,因為根據新的規則優先順序,系統一律不會評估「允許該工程師存取」的規則。儘管有一項規則允許該名工程師的 IP 位址 198.51.100.2 進行存取,但這個 IP 位址同時符合拒絕 198.51.100.0/24 範圍中所有非工程大樓存取的規則,而且拒絕規則的優先順序較高。

如要修正這個問題,您必須針對允許 198.51.100.2 存取的規則,把優先順序設定為高於拒絕 IP 範圍 198.51.100.0/24 存取的規則。

後續步驟

如要確保您是以安全的方式設定應用程式和適當的存取權層級,請參閱應用程式安全防護存取權控管的相關說明。