examlab .net 用最有效率的方法,考取最有價值的證照
本篇導覽 約 18 分鐘

VPC Service Controls (VPC SC): 服務周界

3,500 字 · 約 18 分鐘閱讀 ·

深入了解 Google Cloud 中的 VPC Service Controls (VPC SC) 服務周界。學習如何定義保護邊界、防止資料外洩,以及使用測試模式(Dry-run mode)進行安全的服務管理。

立即做 20 題練習 → 免費 · 不用註冊 · PSE

VPC Service Controls (VPC SC) 簡介

雖然 IAM 控管「誰」有權存取資源,但 VPC Service Controls (VPC SC) 控管「從何處」允許存取以及資料可以「流向何處」。它在 Google Cloud 資源周圍建立一個邏輯周界,以降低資料外洩 (Data Exfiltration) 的風險。

對於 專業雲端安全工程師 (PSE) 而言,VPC SC 是「最後一道防線」。即使服務帳戶金鑰被盜,如果攻擊者位於周界之外,他們也無法使用該金鑰存取受保護的資料。

白話文解釋(Plain English Explanation)

類比 1:大使館院區

把服務周界 (Service Perimeter) 想像成設在外國境內的大使館院區。大使館決定哪些專案(房間)位於圍牆之內,以及哪些 API(如 storage.googleapis.combigquery.googleapis.com)屬於「外交財產」。即使竊賊偷走了警衛的鑰匙(服務帳戶憑證),只要他不是從許可的位址前來,就無法在大門口使用——許可的位址由 Access Level 定義,比對來源 IP、裝置狀態或身分。警衛不在乎鑰匙是不是真的;只要請求來自不對的街道,就會在周界處被擋下,並回傳 RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER 違規。

類比 2:飯店保險箱與後門通道

沒有 VPC SC 的 GCS 和 BigQuery 就像飯店保險箱——IAM 是密碼鎖。但如果客人抄走密碼後直接從大廳把現金搬走,保險箱本身沒失職,飯店還是賠錢。VPC SC 就是大廳金屬偵測門加上保全攝影機:就算密碼正確,你也不能把現金透過大廳走向未經授權的出口。restricted VIP 199.36.153.4/30(對應 restricted.googleapis.com)就是專用的服務電梯——只有透過 Private Google Access 路由到這個 VIP 的地端流量,才被允許抵達受限 API。

類比 3:消防演習 vs 真正火災(Dry-run vs Enforced)

測試模式 (Dry-run mode) 就像消防演習——警報會把「會被擋下的人」全部記錄起來(spec 設定),但門其實沒鎖,業務照常運作。強制執行模式 (Enforced mode)status 設定)才是真正的火災——門會真的鎖住,請求會以 ACCESS_DENIED 失敗。你永遠要先演習 7 到 14 天,掃描 Policy Denied 記錄中的 vpcServiceControlsUniqueId,辨識合法流量,撰寫對應的 Ingress/Egress 規則,最後才把 spec 升級為 status

定義服務周界與保護邊界

服務周界 (Service Perimeter) 是一個可以在組織或資料夾層級套用的邏輯邊界。您可以將專案加入周界,並指定要限制哪些 Google Cloud 服務 (API)。

關鍵組件:

  1. 受保護的專案 (Protected Projects): 周界內的專案。預設情況下,這些專案之間的通訊是被允許的。
  2. 受限服務 (Restricted Services): 被周界「鎖定」的特定 API(例如 storage.googleapis.combigquery.googleapis.com)。
  3. 存取層級 (Access Levels): 在 Access Context Manager 中定義的條件,規定何時允許從周界外部進行存取。

VPC Service Controls (VPC SC) 是一項安全功能,允許您在 Google Cloud 資源周圍定義安全周界,以減輕資料外洩風險。

受限服務 (Storage, BigQuery, KMS)

當您限制某項服務時,VPC SC 會攔截對該服務 API 的呼叫。如果呼叫源自周界外部且不符合允許的入站規則 (Ingress Rule),該呼叫將被封鎖。

常見的受限服務包括:

  • Cloud Storage (GCS): 防止將資料複製到周界外部的儲存桶。
  • BigQuery: 防止將資料匯出到未授權的資料集。
  • Cloud KMS: 確保金鑰僅由邊界內獲授權的實體使用。
  • Cloud SQL、Vertex AI 和 Pub/Sub。

VPC SC 保護的是 API,而不僅僅是網路流量。即使是擁有合法 IAM 權限的使用者,如果試圖將資料移至未授權的地點,VPC SC 依然有效。

防止資料外洩

VPC SC 的主要設計目的是防止兩種類型的資料外洩:

  1. 來自未授權地點的存取: 攻擊者從公共網際網路使用被盜的憑證。
  2. 將資料複製到未授權的資源: 惡意的內部人員試圖將受保護 GCS 儲存桶中的資料複製到其在另一個組織中擁有的儲存桶。

測試模式 (Dry-run mode)

如果不夠小心,設定 VPC SC 往往會「搞壞」應用程式。測試模式 (Dry-run mode) 允許您在不實際執行限制的情況下測試周界的變更。

  • 強制執行模式 (Enforced Mode,status 設定): 違規會導致 ACCESS_DENIED 錯誤,請求會被封鎖。
  • 測試模式 (Dry-run Mode,spec 設定): 違規會記錄在 Cloud Logging 中並標記 dryRun: true,但請求仍會被允許。

一個 perimeter 資源同時擁有 status 區塊(正式生效的政策)和 spec 區塊(提案中的政策)。您不斷在 spec 上反覆調整,直到記錄乾淨,再呼叫 accesscontextmanager.servicePerimeters.commitspec 升級為 status

Restricted VIP 199.36.153.4/30(由 restricted.googleapis.com 解析)是友善於地端流量的端點,連混合流量也會強制套用 VPC SC。請在地端透過 Cloud DNS 轉送區與 Cloud Router,把 Private Google Access*.googleapis.com DNS 指向這個 VIP;標準的 private.googleapis.com199.36.153.8/30)VIP 不會 對受限服務套用周界限制。

強烈建議至少使用測試模式 7 到 14 天。分析記錄以識別會被封鎖的合法流量,並在切換到強制執行模式之前建立必要的入站/出站規則。

VPC SC 故障排除:Troubleshooter

Google Cloud 控制台中的 VPC Service Controls Troubleshooter 是一項必不可少的工具。

  1. 在 Cloud Logging 中找到拒絕存取的唯一 ID (尋找 vpcServiceControlsUniqueIdentifier)。
  2. 將 ID 貼到 Troubleshooter 中。
  3. 該工具會識別是哪個周界封鎖了請求,以及是哪個具體規則(或缺乏規則)導致了拒絕。

處理來自周界外部的存取

有時,合法的實體(使用者、外部服務或 CI/CD 流水線)需要存取周界內的資源。

1. 入站規則 (Ingress Rules)

入站規則允許進入周界的存取。可以根據以下內容定義範圍:

  • 身分 (Identity): 特定的使用者帳戶或服務帳戶。
  • 來源 (Source): 存取層級 (IP 範圍、裝置狀態) 或特定專案。
  • 資源 (Resource): 特定的儲存桶或資料集。

2. Access Context Manager 整合

如前所述,ACM 存取層級可用作進入周界的「鑰匙」。例如,您可以設定僅當開發人員使用受管理的裝置時,才允許其存取 BigQuery。

周界類型:標準 vs. 代管

  • 標準周界 (Standard Perimeter): 您手動加入專案並設定服務。最常用於自定義的組織需求。
  • 代管周界 (Managed Perimeter): 通常用於多租戶環境,其中周界是透過程式編寫產生的。

跨專案與資料夾管理周界

VPC SC 周界是透過存取政策 (Access Policies)組織層級進行管理的。

  • 一個專案只能屬於一個服務周界。
  • 您可以使用周界橋接 (Perimeter Bridges)(參見主題 13)來允許不同周界之間的通訊。

記錄與診斷資訊

VPC SC 會為每次拒絕產生稽核記錄。

  • 記錄名稱: cloudaudit.googleapis.com/policy(Policy Denied 稽核記錄)或 data_access
  • 過濾器: protoPayload.metadata.@type="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata" AND protoPayload.status.code=7
  • 負載: 查看 protoPayload.metadata.vpcServiceControlsUniqueId(要貼進 Troubleshooter 的唯一 ID)以及 protoPayload.metadata.violationReason

常見的 violationReason 數值

  • RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER:跨周界的呼叫(例如周界 A 的 Dataflow 工作要讀取周界 B 的 GCS 儲存桶)。請以 Perimeter BridgeIngress/Egress 規則 修復。
  • NO_MATCHING_ACCESS_LEVEL:呼叫者位於周界外,且沒有 Ingress 規則的 Access Level 命中其 IP、裝置或身分。請以 ACM Access Level + Ingress 規則修復。
  • SERVICE_NOT_ALLOWED_FROM_VPC:周界內的 VPC 嘗試呼叫某個受限 API,但該 API 沒有列在 restrictedServices(或 VPC Accessible Services)清單中。請新增該服務或透過 VPCAccessibleServices 修復。

VPC SC 拒絕記錄分流口訣:

  1. RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER → 跨周界;加 Bridge 或 Ingress/Egress 規則。
  2. NO_MATCHING_ACCESS_LEVEL → 周界外呼叫者;建 ACM Access Level + Ingress 規則。
  3. SERVICE_NOT_ALLOWED_FROM_VPC → 服務不在 restrictedServices / VPCAccessibleServices 內。

永遠先從 Policy Denied 記錄抓 vpcServiceControlsUniqueId,再把它丟進 Troubleshooter——不要靠猜。

除非服務受到限制,否則 VPC SC 不會套用於專案「內部」的流量。它主要守衛的是「API 邊界」。

PSE 考試情境

情境 1:防止跨組織資料傳輸

「安全工程師需要防止員工使用 gsutil cp 指令將資料從敏感專案移至個人的 GCS 儲存桶。應該如何設定?」 解答: 在敏感專案周圍建立服務周界。限制 Cloud Storage API。確保沒有出站規則允許流量流向「個人」組織。

情境 2:排除中斷的流水線

「在強制執行周界後,位於地端的 Jenkins 伺服器無法再將建置構件上傳到 GCS。工程師應該檢查什麼?」 解答: 檢查 Cloud Audit Logs 中的 VPC SC 拒絕記錄。找到 vpcServiceControlsUniqueIdentifier。使用 VPC SC Troubleshooter。如果來源是 Jenkins 的 IP,請為該 IP 建立 ACM 存取層級,並將其加入周界的入站規則中。

總結檢查表

  • 區分 IAM 和 VPC SC 之間的差異。
  • 列出三項通常受 VPC SC 保護的服務。
  • 解釋測試模式 (Dry-run mode) 的好處。
  • 識別用於分析 VPC SC 拒絕原因的工具。
  • 描述入站規則如何允許外部存取。

官方資料來源

更多 PSE 主題