安全性政策總覽

本頁說明如何使用 Google Cloud Armor 安全性政策保護 Google Cloud 部署作業。

Google Cloud Armor 安全性政策提供第 7 層篩選功能,並清除傳入要求中常見的網路攻擊或其他第 7 層屬性,可能在流量抵達負載平衡後端服務或後端儲存空間前就加以封鎖,藉此保護應用程式。每項安全政策都由一組規則組成,可針對第 3 層到第 7 層的屬性進行設定。規則可根據傳入要求的 IP 位址、IP 範圍、區域碼或要求標頭等條件,篩選流量。

Google Cloud Armor 安全性政策適用於下列負載平衡器和端點類型:

  • 所有外部應用程式負載平衡器,包括傳統版應用程式負載平衡器
  • 區域性內部應用程式負載平衡器
  • 全域外部 Proxy 網路負載平衡器 (TCP/SSL)
  • 傳統版 Proxy 網路負載平衡器 (TCP/SSL)
  • 外部直通式網路負載平衡器 (TCP/UDP)
  • 外部通訊協定轉送
  • 指派給網路介面 (NIC) 的外部 IPv4 位址或外部 IPv6 位址範圍

負載平衡器可位於進階級或標準級

後端服務的後端可以是下列任一項目:

使用 Google Cloud Armor 保護混合式部署或多雲架構時,後端必須是網際網路 NEG 或混合式 NEG。如果流量是透過負載平衡器傳送,Google Cloud Armor 也會保護無伺服器 NEG。如要確保只有透過負載平衡器轉送的流量會傳送至無伺服器 NEG,請參閱「連入控制項」。

Google Cloud Armor 也為外部直通式網路負載平衡器通訊協定轉送和使用公開 IP 位址的 VM 提供進階網路 DDoS 防護功能。如要進一步瞭解進階 DDoS 防護功能,請參閱「設定進階網路 DDoS 防護功能」。

透過 Google Cloud Armor 安全性政策保護部署項目 Google Cloud

外部負載平衡服務是在 Google 網路邊緣實作,也就是遍布全球的Google 服務點 (PoP)。在進階級中,導向外部負載平衡器的使用者流量會進入離使用者最近的 PoP。接著透過 Google 的全球網路進行負載平衡,再傳至有足夠容量且距離最近的後端。在標準級別中,使用者流量會透過部署資源的地區中的對等互連、ISP 或中轉網路進入 Google 網路。 Google Cloud

Google Cloud Armor 安全性政策可讓您允許、拒絕、限制頻率,或是將要求重新導向至 Google Cloud 邊緣的後端服務,盡可能靠近傳入流量的來源位置。這有助於防止不當流量消耗資源,或進入虛擬私有雲 (VPC) 網路。

下圖顯示全域外部應用程式負載平衡器、傳統版應用程式負載平衡器、Google 網路和 Google 資料中心的位置。

網路邊緣的 Google Cloud Armor 政策。
網路邊緣的 Google Cloud Armor 政策 (按一下可放大)。

需求條件

使用 Google Cloud Armor 安全性政策的規定如下:

  • 後端服務的負載平衡架構必須為 EXTERNALEXTERNAL_MANAGEDINTERNAL_MANAGED
  • 後端服務的通訊協定必須是 HTTPHTTPSHTTP/2UDPTCPSSLUNSPECIFIED

關於 Google Cloud Armor 安全性政策

Google Cloud Armor 安全性政策是一組規則,可比對第 3 層到第 7 層的屬性,保護對外應用程式或服務。系統會針對傳入流量評估每項規則。

Google Cloud Armor 安全性政策規則包含比對條件,以及符合條件時要採取的動作。條件可以很簡單,例如連入流量的來源 IP 位址是否符合特定 IP 位址或 CIDR 範圍 (也稱為 IP 位址允許清單和拒絕清單規則)。或者,您也可以使用 Google Cloud Armor 自訂規則語言參考資料,建立自訂條件來比對傳入流量的各種屬性,例如網址路徑、要求方法或要求標頭值。

當傳入要求符合安全性政策規則中的條件時,Google Cloud Armor 會根據規則是允許、拒絕或重新導向規則,允許、拒絕或重新導向要求。 您還可以套用其他動作參數,例如插入要求標頭;這項功能是 Google Cloud Armor 機器人管理功能的一部分。如要進一步瞭解機器人管理功能,請參閱機器人管理總覽

您可以將 Google Cloud Armor 安全性政策與一或多項後端服務建立關聯。後端服務只能關聯一項安全性政策,但後端服務不一定要關聯相同的安全性政策。如要從支援的後端服務和功能附加及移除安全性政策,請參閱「附加及移除安全性政策」。

如果 Google Cloud Armor 安全性政策與任何後端服務相關聯,就無法刪除。無論後端服務是否設有相關聯的安全性政策,都可以刪除。

如果多個轉送規則指向的後端服務已連結安全性政策,系統會對傳入各個轉送規則 IP 位址的所有流量強制執行政策規則。

在下圖中,Google Cloud Armor 安全性政策 internal-users-policy 與後端服務 test-network 相關聯。

網路邊緣的 Google Cloud Armor 安全性政策。
網路邊緣的 Google Cloud Armor 安全性政策 (按一下可放大)。
Google Cloud Armor 安全性政策具有下列功能:

  • 您也可以選擇搭配使用 QUIC 通訊協定,以及使用 Google Cloud Armor 的負載平衡器。

  • 您可以搭配下列任一網路服務層級的負載平衡器使用 Google Cloud Armor:

    • 進階級
    • 標準級
  • 您可以搭配 GKE 和預設 Ingress 控制器使用後端安全政策。

  • 設定下列任一負載平衡器時,您可以使用預設安全政策,在流量超過使用者指定的門檻時進行節流:

    • 全域外部應用程式負載平衡器
    • 傳統版應用程式負載平衡器
    • 區域性外部應用程式負載平衡器
    • 區域性內部應用程式負載平衡器
    • 全域外部 Proxy 網路負載平衡器
    • 傳統版 Proxy 網路負載平衡器
    • 外部直通式網路負載平衡器

此外,您也可以設定 Google Cloud Armor 預先設定的 WAF 規則,這些規則是複雜的網路應用程式防火牆 (WAF) 規則,包含依開放原始碼業界標準編譯的數十個簽名。每個簽章都對應規則集中的攻擊偵測規則。Google 會照原樣提供這些規則。這些規則可讓 Google Cloud Armor 參照方便命名的規則,評估數十種不同的流量簽章,而不必手動定義每個簽章。如要進一步瞭解預先設定的 WAF 規則,請參閱預先設定的 WAF 規則總覽

安全性政策類型

下表列出各種安全性政策類型,以及可執行的操作。勾號 () 表示安全性政策類型支援這項功能。

後端安全性政策

後端安全政策適用於下列負載平衡器類型公開的後端服務:

  • 全域外部應用程式負載平衡器
  • 傳統版應用程式負載平衡器
  • 區域性外部應用程式負載平衡器
  • 區域性內部應用程式負載平衡器
  • 全域外部 Proxy 網路負載平衡器
  • 傳統版 Proxy 網路負載平衡器

您可以使用後端安全政策,篩選要求並保護後端服務,這些服務會參照先前列出的負載平衡器類型後方的執行個體群組或任何支援的 NEG 類型。如要進一步瞭解負載平衡器支援的 NEG,請參閱網路端點群組總覽

使用全域外部 Proxy 網路負載平衡器或傳統 Proxy 網路負載平衡器時,Google Cloud Armor 只會對新的連線要求強制執行安全性政策規則 deny 動作。deny 動作會終止 TCP 連線。此外,如果您在 deny 動作中提供狀態碼,系統會忽略該狀態碼。

後端安全性政策具有選用的 type 旗標值 CLOUD_ARMOR。 如未設定 type 標記,預設值為 CLOUD_ARMOR

Edge 安全性政策

邊緣安全政策可讓使用者為快取中儲存的內容設定篩選和存取控管政策,包括啟用 Cloud CDN 的後端服務和 Cloud Storage bucket 等端點。與後端安全政策相比,Edge 安全政策支援根據部分參數進行篩選。您無法將邊緣安全政策設為後端政策。下列端點支援 Edge 安全性政策:

  • 全域外部應用程式負載平衡器
  • 傳統版應用程式負載平衡器

您可以設定邊緣安全政策,在要求從 Google 的快取提供服務前進行篩選。邊緣安全性政策會在 Google 網路最外層的周邊部署及強制執行,也就是 Cloud CDN 快取所在位置的上游。邊緣安全性政策可與後端安全性政策並存,提供雙層防護。無論後端服務指向的資源為何 (例如執行個體群組或網路端點群組),這些政策都可以同時套用至後端服務。只有邊緣安全政策可以套用至後端儲存空間。

如果邊緣安全政策和後端安全政策附加至同一個後端服務,系統只會對通過邊緣安全政策的快取失敗要求強制執行後端安全政策。

系統會先評估及強制執行邊緣安全政策,再評估 Identity-Aware Proxy (IAP)。如果邊緣安全政策封鎖要求,IAP 會在評估要求者的身分之前拒絕要求。在邊緣安全政策中透過規則封鎖要求,可防止 IAP 提供登入頁面,或嘗試驗證使用者身分。

邊緣安全性政策的 type 旗標值為 CLOUD_ARMOR_EDGE

網路邊緣安全性政策

網路邊緣安全性政策可讓您設定規則,在 Google 網路邊緣封鎖流量。強制執行網路邊緣安全性政策不會耗用 VM 或主機資源,有助於防止大量流量耗盡目標工作負載的資源,或導致服務阻斷。您可以為下列資源設定網路邊緣安全性政策:

  • 外部直通式網路負載平衡器
  • 通訊協定轉送
  • 具有公開 IP 位址的 VM

網路邊緣安全性政策支援根據與後端安全性政策相同的某些參數進行篩選,且是唯一支援位元組偏移篩選的安全性政策類型。如需可用參數的完整清單,請參閱「安全性政策類型」表格。

網路邊緣安全性政策的 type 旗標值為 CLOUD_ARMOR_NETWORK。 如要設定網路邊緣安全性政策,您必須先在要建立政策的區域中,設定進階網路分散式阻斷服務防護功能。如要進一步瞭解進階 DDoS 防護功能,請參閱「設定進階網路 DDoS 防護功能」。

規則評估順序

規則評估順序取決於規則優先順序 (編號最低到最高)。獲派最低數字值的規則有最高的邏輯優先順序,會在邏輯優先順序低的規則前先評估。數字優先順序下限為 0。規則的優先順序會隨著數字增加而降低 (1、2、3、N+1)。您無法設定兩個以上優先順序相同的規則。每項規則的優先順序都必須設為介於 0 至 2147483646 之間的數字 (含首尾)。優先順序值 2147483647 (也稱為 INT-MAX) 保留給預設規則

優先順序編號可以有間隔。這些間隙可讓您在日後新增或移除規則,而不影響其餘規則。舉例來說,1、2、3、4、5、9、12、16 是一組有效的優先順序編號,您日後可以新增編號 6 到 8、10 到 11,以及 13 到 15 的規則。您不需要變更現有規則,但執行順序除外。

通常系統會套用符合請求且優先順序最高的規則。 不過,如果使用 evaluatePreconfiguredWaf() 的預先設定規則評估含有主體的 HTTP POST 要求,則不在此限。例外狀況如下:

對於含有主體的 HTTP POST 要求,Google Cloud Armor 會先收到要求標頭,再收到主體 (酬載)。由於 Google Cloud Armor 會先收到標頭資訊,因此會根據標頭評估相符的規則,但不會比對主體中任何預先設定的規則。如果有多個以標頭為準的規則,Google Cloud Armor 會依據優先順序評估這些規則。請注意,redirect 動作和插入自訂標頭動作僅在標頭處理階段有效。如果在下列主體處理階段相符,redirect 動作會轉譯為 deny 動作。如果在主體處理階段相符,自訂要求標頭動作不會生效。

Google Cloud Armor 收到含有主體的 HTTP POST 要求後,會評估適用於要求標頭和主體的規則。因此,系統可能會先比對允許要求標頭的低優先順序規則,再比對封鎖要求主體的較高優先順序規則。在這種情況下,要求中的 HTTP 標頭部分可能會傳送至目標後端服務,但含有潛在惡意內容的主體會遭到封鎖。Google Cloud Armor 會檢查要求主體的前 64 KB (根據設定的檢查限制,可能是 8 KB、16 KB、32 KB、48 KB 或 64 KB)。如要進一步瞭解這項限制,請參閱「POST 和 PATCH 主體檢查限制」。

預先設定規則的 evaluatePreconfiguredWaf() 運算式是唯一會根據要求主體評估的運算式。所有其他運算式只會根據要求標頭進行評估。在具有要求主體的 HTTP 要求類型中,Google Cloud Armor 只會處理 POSTPATCH 要求。檢查範圍僅限於設定的檢查限制,最多為要求主體的前 64 KB (8 KB、16 KB、32 KB、48 KB 或 64 KB),並會像網址查詢參數一樣解碼。Google Cloud Armor 可以剖析並套用預先設定的網路應用程式防火牆規則,處理 JSON 格式的 POST 主體 (Content-Type = "application/json")。不過,Google Cloud Armor 不支援其他以 HTTP Content-Type/Content-Encoding 為基礎的解碼器,例如 XML、Gzip 或 UTF-16。

範例

在下列範例中,系統會依序評估規則 1、2 和 3 的 IPHTTP 標頭欄位。不過,如果 IP 位址 9.9.9.1 在 HTTP POST 主體中發動 XSS 攻擊,系統只會封鎖主體 (依據規則 2),HTTP 標頭則會傳遞至後端 (依據規則 3)。

Rule1
expr: inIPRange(origin.ip, '10.10.10.0/24')
action: deny(403)
priority: 1
Rule2
expr: evaluatePreconfiguredWaf('xss-stable')
action: deny(403)
priority: 2
Rule3
expr: inIPRange(origin.ip, '9.9.9.0/24')
action: allow
priority: 3
Rule-default
action: deny(403)
priority: INT-MAX

在下列範例中,政策允許 IP 位址 9.9.9.1,且不會掃描 XSS 攻擊:

Rule1
expr: inIPRange(origin.ip, '10.10.10.0/24')
action: deny(403)
priority: 1
Rule2
expr: inIPRange(origin.ip, '9.9.9.0/24')
action: allow
priority: 2
Rule3
expr: evaluatePreconfiguredWaf('xss-stable')
action: deny(403)
priority: 3
Rule-default
action: allow
priority: INT-MAX

預設規則

每項 Google Cloud Armor 安全性政策都包含預設規則,如果沒有相符的較高優先順序規則,或是政策中沒有其他規則,系統就會比對這項規則。系統會自動為預設規則指派優先順序 2147483647 (INT-MAX),且預設規則一律會出現在安全性政策中。

你無法刪除預設規則,但可以修改。預設規則的預設動作為 deny,但您可以將動作變更為 allow

指紋

每項 Google Cloud Armor 安全性政策都有 fingerprint 欄位。指紋是政策中儲存內容的雜湊值。建立政策時,請勿提供這個欄位的值。如果您提供值,系統會忽略。不過,更新安全性政策時,您必須指定目前的指紋,這是在匯出或說明政策時取得的 (分別使用 EXPORTDESCRIBE)。

指紋可防止您覆寫其他使用者的更新。如果您提供的指紋已過時,表示自您上次擷取指紋後,安全性政策已更新。如要檢查是否有任何差異並擷取最新指紋,請執行 DESCRIBE 指令。

規則語言和違規處置引擎

規則語言和強制執行引擎提供下列功能:

  • 可編寫自訂規則運算式,比對連入要求的第 3 層到第 7 層屬性。Google Cloud Armor 提供彈性語言,可編寫自訂比對條件。

  • 單一規則最多可合併 5 個子運算式。

  • 根據傳入要求的區域代碼,拒絕或允許要求。區域代碼採用 ISO 3166-1 alpha 2 代碼。區域代碼有時會對應至特定國家/地區,但有些代碼涵蓋的範圍包括國家/地區及其相關區域。舉例來說,US 代碼包含美國所有州、一個行政區和六個邊遠地區。

規則類型

Google Cloud Armor 提供下列類型的規則。

origin.iporigin.region_code

IP 位址許可清單和拒絕清單規則

您可以在安全政策中建立 IP 位址許可清單和拒絕清單規則。以下提供幾個範例:

  • 使用 IP 位址/CIDR 拒絕清單,可禁止來源 IP 位址或 CIDR 範圍存取支援的負載平衡器。

  • 使用 IP 位址/CIDR 的允許清單,可允許來源 IP 位址或 CIDR 範圍存取支援的負載平衡器。

  • 允許清單和拒絕清單規則支援 IPv4 和 IPv6 位址。

  • 封鎖清單規則可以傳回 HTTP 403 Unauthorized404 Access Denied502 Bad Gateway 狀態碼。

  • 超出動作規則可能會傳回 HTTP 429 Too Many Requests 狀態碼。

來源地理位置規則

您可以允許或拒絕來自特定地理區域的要求,這些區域由 Unicode 國家/地區代碼定義。

Google Cloud Armor 會使用自家 IP 地理位置資料庫,判斷要求地理位置。資料庫會定期更新。我們無法保證特定的更新頻率,但在正常運作期間,Google Cloud Armor 使用的對應項大約每週更新一次。

更新後的對應項目必須在全球範圍內傳播至 Google 的基礎架構。推出程序會逐步進行,通常需要幾天時間,並涵蓋 Google Cloud Armor 部署的多個區域和地區。因此,在推出期間,如果來源 IP 位址的地理位置對應發生變化,您可能會發現系統對來自相同來源 IP 位址的要求處理方式不一致。

預先設定的網路應用程式防火牆規則

Google Cloud Armor 提供根據 OWASP 核心規則集 (CRS) 預先設定的完整 WAF 規則清單,協助您偵測下列項目:

  • SQL 注入式攻擊
  • 跨網站指令碼攻擊
  • 本機檔案包含攻擊
  • 遠端檔案包含攻擊
  • 遠端程式碼執行攻擊
  • 方法強制執行攻擊
  • 掃描器偵測攻擊
  • 通訊協定攻擊
  • PHP 注入式攻擊
  • 工作階段固定攻擊
  • Java 攻擊
  • NodeJS 攻擊

詳情請參閱「Google Cloud Armor 預先設定的 WAF 規則總覽」。

機器人管理規則

您可以透過機器人管理規則執行下列操作:

  1. 重新導向 reCAPTCHA 評估要求,並視需要提供手動驗證問題。
  2. 評估要求隨附的 reCAPTCHA 權杖,並根據權杖屬性套用設定的動作。
  3. 使用 302 狀態碼將要求重新導向至您設定的替代網址。
  4. 在將要求 Proxy 至後端之前,先插入自訂標頭。

如要進一步瞭解機器人管理功能,請參閱機器人管理總覽

已有名稱的 IP 位址清單的預先設定規則

已有名稱的 IP 位址清單的預先設定規則提供下列功能:

  • 將第三方供應商的已命名 IP 位址清單與 Google Cloud Armor 整合。

  • 簡化允許或拒絕的 IP 位址範圍維護作業。

  • 每天同步處理第三方供應商的名單。

  • 提高在安全政策中設定 IP 位址和範圍的容量,因為具名 IP 位址清單不受每項規則的 IP 位址數量限制。

頻率限制規則

您可以使用速率限制規則執行下列動作:

  • 根據您設定的門檻,限制每個用戶端的請求數。
  • 暫時禁止在設定的時間內,超出要求門檻的用戶端。

使用全域外部 Proxy 網路負載平衡器或傳統 Proxy 網路負載平衡器時,適用下列限制:

  • Google Cloud Armor 只會對用戶端的新連線要求強制執行速率限制動作,例如節流或禁止。
  • 僅支援 ALLIP 金鑰類型。
  • 如果您嘗試搭配 TCP/SSL 負載平衡器使用 HTTP-HEADERHTTP-COOKIE 金鑰類型,系統會將金鑰類型解讀為 ALL,同樣地,XFF-IP 會解讀為 IP

如要進一步瞭解速率限制和運作方式,請參閱「速率限制總覽」。

預覽模式

您可以預覽規則的效果,而不必強制執行。在預覽模式中,系統會在 Cloud Monitoring 中記錄動作。您可以選擇預覽安全性政策中的個別規則,也可以預覽政策中的所有規則。預覽模式中的規則會照常收取每項要求的費用。

如要為規則啟用預覽模式,請使用 Google Cloud CLI 和 gcloud compute security-policies rules update 指令的 --preview 旗標

如要停用預覽模式,請使用 --no-preview 標記。您也可以使用Google Cloud 控制台。

如有要求觸發預覽模式,Google Cloud Armor 會繼續評估其他規則,直到找到相符規則為止。相符規則和已啟用預覽模式的規則都會列入記錄。

自訂錯誤回應

使用全域外部應用程式負載平衡器時,您可以為負載平衡器或後端執行個體產生的錯誤,設定 HTTP 狀態碼的自訂錯誤回應。此外,您也可以為 Google Cloud Armor 拒絕的流量設定自訂錯誤代碼,方法是為現有安全性政策規則使用的相同 4xx 系列或 5xx 系列狀態碼設定自訂回應網頁。

如要進一步瞭解自訂錯誤回應,請參閱自訂錯誤回應總覽。如需設定步驟,請參閱「設定自訂錯誤回應」。

記錄

Google Cloud Armor 提供詳盡的記錄功能,可讓您定義記錄的詳細程度。無論安全性政策是否處於預先發布模式,Google Cloud Armor 都會根據與傳入要求相符的第一條 (優先順序最高) 規則產生記錄。也就是說,系統不會為不相符的規則產生記錄,也不會為優先順序較低的相符規則產生記錄。

如需記錄的完整資訊,請參閱「使用要求記錄」。如要進一步瞭解詳細記錄,請參閱「詳細記錄」。如要查看 Google Cloud Armor 記錄,請參閱檢視記錄

外部應用程式負載平衡器要求記錄

系統會透過 Cloud Logging 記錄每個經過 Google Cloud Armor 安全性政策評估的 HTTP(S) 要求。記錄檔會提供詳細資料,例如套用的安全性政策名稱、相符規則,以及是否強制執行規則。系統預設會停用新後端服務資源的記錄要求。如要記錄 Google Cloud Armor 要求,您必須為受安全性政策保護的每個後端服務啟用 HTTP(S) 記錄功能。

詳情請參閱「外部應用程式負載平衡器的記錄與監控功能」。

外部 Proxy 網路負載平衡器要求記錄

如要為外部 Proxy 網路負載平衡器設定記錄,請使用 Google Cloud CLI 指令,如「TCP/SSL Proxy 負載平衡記錄和監控」一文所述。您無法使用 Google Cloud 控制台,為外部 Proxy 網路負載平衡器啟用記錄功能。

限制

以下各節將詳細說明安全政策的限制。

POST 和 PATCH 主體檢查限制

預先設定規則的 evaluatePreconfiguredWaf() 運算式是 Google Cloud Armor 針對要求主體評估的唯一運算式。在具有要求主體的 HTTP 要求類型中,Google Cloud Armor 只會處理 POSTPATCH 要求。

檢查範圍僅限於設定的檢查限制,最多為 POSTPATCH 內文的前 64 KB (8 KB、16 KB、32 KB、48 KB 或 64 KB)。如要進一步瞭解如何在使用預先設定的 WAF 規則時,設定要求主體的檢查限制,請參閱「更新預先設定的 WAF 規則檢查限制」。

要求主體其餘部分可能包含與 WAF 規則簽章相符的酬載,您的應用程式可能會接受。如要降低要求主體大小超過設定檢查上限的風險,請參閱「降低要求主體大小超過設定檢查上限的風險」,瞭解如何檢查前 64 KB (8 KB、16 KB、32 KB、48 KB 或 64 KB)。

Google Cloud Armor 可以剖析並套用預先設定的網路應用程式防火牆規則,處理預設網址編碼和 JSON 格式的 POSTPATCH 主體 (Content-Type = "application/json"),在這種情況下,系統會對資料中解碼的名稱和值分別套用規則。如果是其他內容類型和編碼類型,Google Cloud Armor 不會解碼資料,但會對原始資料套用預先設定的規則。

如何處理 WebSocket 連線

全域外部應用程式負載平衡器內建 WebSocket 通訊協定支援。 WebSocket 管道是從 HTTP(S) 要求啟動的。舉例來說,如果 IP 位址拒絕清單封鎖了來源 IP 位址,Google Cloud Armor 就會禁止建立 WebSocket 管道。不過,管道中的後續交易不符合 HTTP 通訊協定,且 Google Cloud Armor 不會評估第一個要求之後的任何訊息。

後續步驟