本頁說明如何使用 Google Cloud Armor 安全性政策保護 Trusted Cloud by S3NS 部署作業。
Google Cloud Armor 安全性政策提供第 7 層篩選功能,並清除傳入要求中的常見網路攻擊或其他第 7 層屬性,藉此保護應用程式,在流量抵達負載平衡後端服務前,可能就能加以封鎖。每項安全政策都由一組規則組成,可針對第 3 層到第 7 層的屬性進行設定。規則可根據傳入要求的 IP 位址、IP 範圍、區域碼或要求標頭等條件,篩選流量。Google Cloud Armor 安全性政策適用於區域外部應用程式負載平衡器。
後端服務的後端可以是下列任一項目:
- 執行個體群組
- 負載平衡器支援的所有網路端點群組 (NEG) 類型
使用 Google Cloud Armor 保護混合式部署或多雲架構時,後端必須是網際網路 NEG 或混合式 NEG。如果流量是透過負載平衡器傳送,Google Cloud Armor 也會保護無伺服器 NEG。如要瞭解如何在流量到達無伺服器 NEG 前,先透過負載平衡器傳送流量,請參閱輸入控制項。
透過 Google Cloud Armor 安全性政策保護部署項目 Trusted Cloud
在進階級中,導向至外部負載平衡器的使用者流量會進入離使用者最近的 PoP。接著透過 Google 的全球網路進行負載平衡,再傳至有足夠容量且距離最近的後端。Google Cloud Armor 安全性政策可讓您允許、拒絕、限制頻率,或是將要求重新導向至 Trusted Cloud 邊緣的後端服務,盡可能靠近傳入流量的來源位置。這有助於防止不當流量消耗資源,或進入虛擬私有雲 (VPC) 網路。
需求條件
使用 Google Cloud Armor 安全性政策的規定如下:- 後端服務的負載平衡架構必須為
EXTERNAL_MANAGED
。 - 後端服務的通訊協定必須是
HTTP
、HTTPS
、HTTP/2
、UDP
、TCP
、SSL
或UNSPECIFIED
。
關於 Google Cloud Armor 安全性政策
Google Cloud Armor 安全性政策是一組規則,可比對第 3 層到第 7 層網路的屬性,保護對外應用程式或服務。系統會針對傳入流量評估每項規則。
Google Cloud Armor 安全性政策規則包含比對條件,以及符合條件時要採取的動作。條件可以很簡單,例如連入流量的來源 IP 位址是否符合特定 IP 位址或 CIDR 範圍 (也稱為 IP 位址允許清單和拒絕清單規則)。或者,您也可以使用自訂規則語言屬性,建立自訂條件來比對傳入流量的各種屬性,例如網址路徑、要求方法或要求標頭值。
當傳入要求符合安全性政策規則中的條件時,Google Cloud Armor 會根據規則是允許、拒絕或重新導向規則,允許、拒絕或重新導向要求。
您可以將 Google Cloud Armor 安全性政策與一或多項後端服務建立關聯。後端服務只能關聯一項安全性政策,但後端服務不一定要關聯相同的安全性政策。如要從支援的後端服務和功能附加及移除安全性政策,請參閱「附加及移除安全性政策」。
如果 Google Cloud Armor 安全性政策與任何後端服務相關聯,就無法刪除。無論後端服務是否設有相關聯的安全性政策,都可以刪除。
如果多個轉送規則指向的後端服務已連結安全性政策,系統會對傳入各個轉送規則 IP 位址的所有流量強制執行政策規則。
在下圖中,Google Cloud Armor 安全性政策 internal-users-policy
與後端服務 test-network
相關聯。
您也可以選擇搭配使用
QUIC
通訊協定,以及使用 Google Cloud Armor 的負載平衡器。您可以搭配 GKE 和預設 Ingress 控制器使用後端安全政策。
設定區域外部應用程式負載平衡器時,可以使用預設安全性政策,在流量超過使用者指定的門檻時進行節流。
此外,您也可以設定 Google Cloud Armor 預先設定的 WAF 規則,這些規則是複雜的網路應用程式防火牆 (WAF) 規則,包含依開放原始碼業界標準編譯的數十個簽名。每個簽章都對應規則集中的攻擊偵測規則。Google 會照原樣提供這些規則。這些規則可讓 Google Cloud Armor 參照方便命名的規則,評估數十種不同的流量簽章,而不必手動定義每個簽章。如要進一步瞭解預先設定的 WAF 規則,請參閱預先設定的 WAF 規則總覽。
安全性政策類型
下表列出各種安全性政策類型,以及可執行的操作。勾號 () 表示安全性政策類型支援這項功能。
後端安全性政策
後端安全政策會與區域外部應用程式負載平衡器公開的後端服務搭配使用。後端安全性政策具有選用的 type
旗標值 CLOUD_ARMOR
。
如未設定 type
標記,預設值為 CLOUD_ARMOR
。
規則評估順序
規則評估順序取決於規則優先順序 (編號最低到最高)。獲派最低數字值的規則有最高的邏輯優先順序,會在邏輯優先順序低的規則前先評估。數字優先順序下限為 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 只會處理 POST
和 PATCH
要求。檢查範圍僅限於設定的檢查限制,最多為要求主體的前 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 的 IP
和 HTTP
標頭欄位。不過,如果 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
欄位。指紋是政策中儲存內容的雜湊值。建立政策時,請勿提供這個欄位的值。如果您提供值,系統會忽略。不過,更新安全性政策時,您必須指定目前的指紋,這是在匯出或說明政策時取得的 (分別使用 EXPORT
或 DESCRIBE
)。
指紋可防止您覆寫其他使用者的更新。如果您提供的指紋已過時,表示自您上次擷取指紋後,安全性政策已更新。如要檢查是否有任何差異並擷取最新指紋,請執行 DESCRIBE
指令。
規則語言和違規處置引擎
規則語言和強制執行引擎提供下列功能:
- 可編寫自訂規則運算式,比對連入要求的第 3 層到第 7 層屬性。Google Cloud Armor 提供自訂規則語言屬性,可編寫自訂比對條件。
單一規則最多可合併 5 個子運算式。
根據傳入要求的區域代碼,拒絕或允許要求。區域代碼採用 ISO 3166-1 alpha 2 代碼。區域代碼有時會對應至特定國家/地區,但有些代碼涵蓋的範圍包括國家/地區及其相關區域。舉例來說,
US
代碼包含美國所有州、一個行政區和六個邊遠地區。
規則類型
Google Cloud Armor 提供下列類型的規則。
IP 位址許可清單和拒絕清單規則
您可以在安全政策中建立 IP 位址許可清單和拒絕清單規則。以下提供幾個範例:
使用 IP 位址/CIDR 拒絕清單,可禁止來源 IP 位址或 CIDR 範圍存取支援的負載平衡器。
使用 IP 位址/CIDR 的允許清單,可允許來源 IP 位址或 CIDR 範圍存取支援的負載平衡器。
允許清單和拒絕清單規則支援 IPv4 和 IPv6 位址。
封鎖清單規則可以傳回 HTTP
403 Unauthorized
、404 Access Denied
或502 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 規則總覽」。
頻率限制規則
您可以使用速率限制規則執行下列動作:
- 根據您設定的門檻,限制每個用戶端的請求數。
- 暫時禁止在設定的時間內,超出要求門檻的用戶端。
使用全域外部 Proxy 網路負載平衡器或傳統 Proxy 網路負載平衡器時,適用下列限制:
- Google Cloud Armor 只會對用戶端的新連線要求強制執行速率限制動作,例如節流或禁止。
- 僅支援
ALL
和IP
金鑰類型。 - 如果您嘗試搭配 TCP/SSL 負載平衡器使用
HTTP-HEADER
或HTTP-COOKIE
金鑰類型,系統會將金鑰類型解讀為ALL
,同樣地,XFF-IP
會解讀為IP
。
如要進一步瞭解速率限制和運作方式,請參閱「速率限制總覽」。
預覽模式
您可以預覽規則的效果,而不必強制執行。在預覽模式中,系統會在 Cloud Monitoring 中記錄動作。您可以選擇預覽安全性政策中的個別規則,也可以預覽政策中的所有規則。預覽模式中的規則會照常收取每項要求的費用。
如要為規則啟用預覽模式,請使用 Google Cloud CLI 和 gcloud compute security-policies rules update
指令的 --preview
旗標。
如要停用預覽模式,請使用 --no-preview
標記。您也可以使用Trusted Cloud 控制台。
如有要求觸發預覽模式,Google Cloud Armor 會繼續評估其他規則,直到找到相符規則為止。相符規則和已啟用預覽模式的規則都會列入記錄。
自訂錯誤回應
使用全域外部應用程式負載平衡器時,您可以為負載平衡器或後端執行個體產生的錯誤,設定 HTTP 狀態碼的自訂錯誤回應。此外,您也可以為 Google Cloud Armor 拒絕的流量設定自訂錯誤代碼,方法是為現有安全性政策規則使用的相同 4xx
系列或 5xx
系列狀態碼設定自訂回應網頁。
如要進一步瞭解自訂錯誤回應,請參閱自訂錯誤回應總覽。如需設定步驟,請參閱「設定自訂錯誤回應」。
記錄
Google Cloud Armor 提供詳盡的記錄功能,可讓您定義記錄的詳細程度。無論安全性政策是否處於預先發布模式,Google Cloud Armor 都會根據與傳入要求相符的第一條 (優先順序最高) 規則產生記錄。也就是說,系統不會為不相符的規則產生記錄,也不會為優先順序較低的相符規則產生記錄。
如需記錄的完整資訊,請參閱「使用要求記錄」。如要進一步瞭解詳細記錄,請參閱「詳細記錄」。如要查看 Google Cloud Armor 記錄,請參閱檢視記錄。
限制
以下各節將詳細說明安全政策的限制。
POST 和 PATCH 主體檢查限制
預先設定規則的 evaluatePreconfiguredWaf()
運算式是 Google Cloud Armor 針對要求主體評估的唯一運算式。在具有要求主體的 HTTP 要求類型中,Google Cloud Armor 只會處理 POST
和 PATCH
要求。
檢查範圍僅限於設定的檢查限制,最多為 POST
或 PATCH
內文的前 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 格式的 POST
和 PATCH
主體 (Content-Type = "application/json"
),在這種情況下,系統會對資料中解碼的名稱和值分別套用規則。如果是其他內容類型和編碼類型,Google Cloud Armor 不會解碼資料,但會對原始資料套用預先設定的規則。
如何處理 WebSocket 連線
全域外部應用程式負載平衡器內建 WebSocket 通訊協定支援。 WebSocket 管道是從 HTTP(S) 要求啟動的。舉例來說,如果 IP 位址拒絕清單封鎖了來源 IP 位址,Google Cloud Armor 就會禁止建立 WebSocket 管道。不過,管道中的後續交易不符合 HTTP 通訊協定,且 Google Cloud Armor 不會評估第一個要求之後的任何訊息。