VPC 防火牆規則與策略簡介
在 Google Cloud 中,網路是由軟體定義的,安全性是在每個 VM 層級強制執行的,而不僅僅是在邊界。VPC 防火牆規則是分佈式虛擬防火牆,用於控制進出 Compute Engine 執行個體的流量。
對於 專業雲端安全工程師 (PSE) 而言,掌握防火牆不僅僅是處理簡單的基於 IP 的規則。它涉及理解用於全組織治理的階層式防火牆策略 (Hierarchical Firewall Policies)、使用服務帳戶 (Service Accounts) 進行動態微隔離 (Micro-segmentation),以及利用 Firewall Insights 優化安全狀況。
白話文解釋
1. 房間級別的安保 (VPC 防火牆)
傳統防火牆就像是大樓的大門,一旦進入內部,就可以隨意走動。Google Cloud 防火牆則像是為每個房間 (VM) 都配備了一名保安。即使有人闖入了專用網路 (VPC),他們仍必須通過每個特定房間的保安才能進行橫向移動。
2. 通用建築法規 (階層式策略)
想像一個城市,每個建築業主都設定自己的消防規則,這就像是專案層級的防火牆。現在想像市政府 (組織/資料夾層級) 規定「任何建築都不准攜帶噴火器」,這就是階層式防火牆策略。它適用於城市中的每個人,個別業主不能覆蓋此規則使其變得「更不安全」。
3. 識別證制度 (服務帳戶 vs. 標記)
網路標記 (Network Tags) 就像是在衣服上貼一個「開發人員」標籤,任何人都可以貼上。服務帳戶則像是官方的公司識別證,要獲得識別證必須經過審核 (IAM)。防火牆檢查的是您的識別證而不是標籤,這使得偽造身分和繞過安全檢查變得更加困難。
傳入 (Ingress) 與 傳出 (Egress) 規則邏輯
VPC 防火牆具有狀態檢測 (Stateful) 特性。如果允許了傳入 (Ingress) 請求,則無論傳出規則如何,系統都會自動允許對應的傳出 (Egress) 回應。
- 傳入規則 (Ingress Rules): 控制進入 VM 的流量。(預設:全部拒絕)。
- 傳出規則 (Egress Rules): 控制離開 VM 的流量。(預設:全部允許)。
防火牆規則 (Firewall Rules) 套用於網路和 VPC,但在每個執行個體上執行。它們是「分佈式」的,這意味著它們可以隨網路擴展而不會成為效能瓶頸。
目標:網路標記 vs. 服務帳戶
這是 PSE 考試中的關鍵概念。
網路標記 (Network Tags)
- 簡單的字串 (例如:
web-server,db-server)。 - 任何擁有
compute.instanceAdmin權限的使用者都可以更改 VM 上的標記。 - 風險: 開發人員可以將資料庫伺服器標記為 "web-server",從而獲得未經授權的網路存取。
服務帳戶 (Service Accounts)
- 使用 VM 的身分 (例如:
[email protected])。 - 指派時需要
iam.serviceAccountUser權限。 - 安全性: 提供更強大的「基於身分」的微隔離。如果 VM 的身分經過驗證,則防火牆規則更值得信賴。
PSE 建議: 在生產環境中,防火牆目標應始終優先選擇服務帳戶而非網路標記,以防止透過標記進行權限提升。
階層式防火牆策略 (Hierarchical Firewall Policies)
階層式策略允許您在組織 (Organization) 或資料夾 (Folder) 層級強制執行規則。
- 評估順序: 組織層級規則 → 資料夾層級規則 → 專案層級 (VPC) 規則。
- 動作:
ALLOW(允許)、DENY(拒絕) 以及GOTO_NEXT(前往下一個)。 - GOTO_NEXT: 這是階層式策略特有的,它允許封包通過組織層級,由資料夾或專案層級進一步評估。
使用階層式策略來執行「全域拒絕」規則,例如在全公司範圍內封鎖來自公開網際網路的 22 埠 (SSH)。
防火牆規則日誌與稽核
日誌對於故障排除和合規性至關重要。
- 防火牆日誌: 可以針對每條規則啟用。它會擷取來源 IP、目的地 IP、通訊埠和通訊協定。
- 取樣: 您可以設定取樣率 (例如:僅記錄 10% 的流量) 以節省儲存成本。
- 元數據: 日誌包含 VM 名稱和專案 ID,方便識別可疑流量的來源。
優先順序與規則評估順序
防火牆規則具有優先順序 (Priority) (從 0 到 65535)。
- 數值越小 = 優先權越高 (例如:優先順序 1000 優於優先順序 2000)。
- 如果多條規則相符,則套用優先順序最高的規則。
- 如果優先順序相等,在階層式策略中通常以「拒絕」規則為先,但在 VPC 規則中則以第一條相符的為準。
新 VPC 中預設的 allow-ssh 規則優先順序為 65534。如果您想封鎖所有 SSH,您的「拒絕」規則優先順序必須低於 65534 (例如:1000)。
PSE 評估順序重點: Hierarchical Firewall Policies 的評估順序為 Org → Folder → Project (VPC),且優先順序範圍為 0–65535、數值越小越優先。若要覆寫預設的 allow-ssh 規則 (優先順序 65534),您的 DENY 規則必須使用更小的數值 (例如 1000);而 Org 層級的 DENY 除非父層使用 GOTO_NEXT,否則無法被專案層級規則覆寫。
全域網路防火牆策略 (Global Network Firewall Policies)
與標準 VPC 規則不同,全域網路防火牆策略允許您定義一組規則,並將其與多個 VPC 關聯,即使這些 VPC 位於不同的區域甚至不同的專案中 (在共用 VPC 環境中)。
共用 VPC (Shared VPC) 防火牆管理
在共用 VPC 設定中:
- 宿主專案 (Host Project) 管理員負責管理防火牆規則。
- 服務專案 (Service Project) 管理員無法建立套用於共用子網路的防火牆規則。
- 這確保了中央安全性團隊能保持對網路邊界的控制。
識別遺留或冗餘規則
隨著時間推移,防火牆規則會變得雜亂。
- Firewall Insights: 該工具會分析您的防火牆規則並識別:
- 被遮蔽的規則 (Shadowed Rules): 由於存在更高優先順序的規則涵蓋了相同的流量,導致這些規則永遠不會被觸發。
- 過於寬鬆的規則 (Overly Permissive Rules): 例如對
0.0.0.0/0開放所有埠的規則。 - 未使用的規則 (Unused Rules): 過去 30 天內沒有流量產生的規則。
從標記遷移到服務帳戶目標
為了提高安全性,您應該遷移現有的基於標記的規則。
- 識別目前使用該標記的 VM 所使用的服務帳戶。
- 建立一條使用服務帳戶作為目標的新防火牆規則。
- 將新規則設定為更高的優先順序 (較小的數值)。
- 監控日誌以確保流量命中新規則。
- 刪除舊的基於標記的規則。
防火牆的 CLI 指令
建立傳入規則 (使用服務帳戶)
gcloud compute firewall-rules create allow-app-to-db \
--network=my-vpc \
--action=ALLOW \
--direction=INGRESS \
--priority=1000 \
--source-service-accounts=app-srv@my-project.iam.gserviceaccount.com \
--target-service-accounts=db-srv@my-project.iam.gserviceaccount.com \
--rules=tcp:5432
列出階層式策略
gcloud compute firewall-policies list --organization=123456789
服務帳戶目標比標記提供更好的安全性,因為更改服務帳戶需要比更改標記更高的 IAM 權限。
PSE 安全性最佳實踐
- 隱式全部拒絕: 在高安全性環境中,始終從預設的「傳出全部拒絕」規則開始。
- 最小權限: 僅開啟特定的通訊埠 (例如
tcp:443) 而不是「所有通訊協定」。 - 使用服務帳戶: 在生產環境中避免使用網路標記。
- 稽核日誌: 為所有「拒絕」規則啟用日誌,以偵測通訊埠掃描和偵察活動。
- 階層式護欄: 使用組織層級策略封鎖來自網際網路的高風險通訊埠 (RDP, SSH, Telnet)。
故障排除情境
情境:VM 即使有「允許」規則也無法連接到資料庫
診斷: 檢查來源 VM 的傳出 (Egress) 規則。即使資料庫端允許傳入,來源 VM 也必須被允許在該通訊埠發送流量。同時,檢查是否有優先順序更高的「拒絕」規則。 修正: 為來源 VM 加入傳出規則,或提高允許規則的優先順序。
情境:階層式策略阻擋了開發專案中的流量
診斷: 組織層級策略中有一條相符的 DENY 規則。專案層級規則無法覆蓋組織層級的 DENY。
修正: 將組織層級規則針對特定的 IP 範圍或通訊埠更改為 GOTO_NEXT,允許開發專案自行管理該流量的規則。
PSE 考試情境
情境 1:防止橫向移動
「如何確保受損的 Web 伺服器無法存取資料庫伺服器的管理埠,即使它們位於同一個子網路中?」
答案: 使用以服務帳戶作為目標的防火牆規則。將 Web 伺服器指派給 sa-web,資料庫伺服器指派給 sa-db。建立一條僅允許從 sa-web 到 sa-db 指定通訊埠 (例如 3306) 的規則,並依賴預設的「拒絕」規則處理所有其他埠。
情境 2:集中化合規性
「您的 CISO 要求在任何專案中,任何開發人員都不得向網際網路開放 21 埠 (FTP)。強制執行此要求最穩健的方法是什麼?」
答案: 在組織層級建立一個階層式防火牆策略,其中包含一條拒絕來自 0.0.0.0/0 的 21 埠傳入流量規則。
總結清單
- 解釋傳入與傳出規則的區別。
- 比較網路標記與服務帳戶作為防火牆目標的優劣。
- 描述階層式防火牆策略的評估順序。
- 識別階層式策略中
GOTO_NEXT的功能。 - 了解如何使用 Firewall Insights 優化規則。