本文說明在 Google Cloud 機構中設定及強制執行 VPC Service Controls 保護機制的建議程序。
如果未謹慎啟用 VPC Service Controls,可能會導致現有應用程式發生問題,甚至可能造成服務中斷。建議您仔細規劃啟用作業,並預留充足時間收集資料、進行測試及分析違規記錄。請確保 VPC Service Controls 作業團隊和應用程式團隊的利害關係人都能參與這項工作。
針對您加入 VPC Service Controls 的每個工作負載或應用程式,都應重複啟用程序。
協調通訊
通常,網路安全或雲端啟用團隊會主導 VPC Service Controls 啟用作業。建議您安排專人建立及追蹤跨職能會議,並記錄行動項目。團隊協作處理下列事項:
- Google Cloud API 存取模式
- 識別服務範圍違規事項
- 允許存取範圍
與傳統網路防火牆類似,這項功能的目的是識別並允許合法業務工作負載有效運作所需的流程。
文件存取模式和用途
如要開始啟用程序,請找出並清楚記錄所有有效的存取模式。存取模式是指範圍內和範圍外元素之間可重複的互動類型。以下是一些常見的存取模式:
- 資料存取模式:範圍外的服務會儲存或擷取範圍內的資料。
- 資源存取模式:
- 使用者可透過Google Cloud 控制台存取範圍內的專案。
- 第三方工具或服務會管理及存取範圍內的資源。
- 範圍內的服務或資源存取 Google API。
- 端點存取模式:
- 使用者透過貴機構管理的裝置,存取範圍內的資源。
- 內部部署資源會與安全範圍內的資源通訊。
找出工作負載的存取模式後,請找出您的用途,並將其歸類於上述清單中的其中一種存取模式。以下是一些常見用途:
- 雲端管理員負責管理屬於安全防護範圍的專案。
- 範圍外的自動化服務 (例如 Terraform、Jenkins 和 Microsoft Azure DevOps) 會管理範圍內的資源部署作業。
- 控管範圍外的設定管理服務 (例如 Ansible、Chef 或 Puppet) 會管理控管範圍內資源的軟體部署和設定。
- 位於範圍外的安全監控和強制執行服務 (例如 Forseti 或 SIEM) 會耗用資料,或對範圍內的資源強制執行安全政策。
針對每個應用實例,請記錄下列事項:
- 存取模式
- 可觸發用途的行為人
- 觸發用途的條件
- 用途是否為有效的存取模式,且應允許存取
- 與用途相關的任何假設
如需存取模式和應用實例追蹤器的範例,請參閱 VPC Service Controls 上線範本 - 應用實例 (PDF)。
進行面試
與工作負載團隊進行訪談,討論您從先前通訊範本收集的存取模式和用途。以下列舉幾個您可能會在這些訪談中提出的問題:
您是否優先考慮啟用 VPC Service Controls 的用途?建議您在啟用初期只考慮優先順序最高的工作負載,並在保護重要業務資源後,再加入其他重要性較低的工作負載。
你能全面執行所有用途嗎?這麼做是為了觸發所有可能的範圍情境,以便全面分析及確認應用程式在強制執行範圍後是否能正常運作。
執行用途需要多久時間?
您是否打算對這項工作負載進行任何重大變更,而這些變更可能會與啟用 VPC Service Controls 發生衝突?啟用 VPC Service Controls 前,工作負載功能必須處於穩定狀態。
準備模擬測試
模擬測試模式可識別違規事項,且不會中斷應用程式運作,因此能簡化 VPC Service Controls 強制執行的測試程序。您可以將模擬測試設定為獨立的周邊,記錄所有違規事項,但不會執行任何封鎖動作。您可以在模擬測試範圍內執行工作負載,並產生違規記錄以供分析。
如要準備試營運環境,請按照下列步驟操作:
- 找出所有符合資格的專案,並完成這些專案的應用實例和訪談程序。
- 建立試營運範圍,並加入所有專案。
- 在 VPC Service Controls 服務範圍中,依序點選「受限制的服務」>「要保護的服務」,然後新增所有支援的服務。
建立匯總記錄接收器,將所有記錄傳送至 BigQuery,或為每個專案建立記錄接收器,將試營運記錄傳送至共用的 BigQuery 資料集。如要查詢這些記錄訊息並找出 VPC Service Controls 違規事項,可以使用 SQL 查詢。
如要建立記錄接收器,納入所有相關的 VPC Service Controls 記錄訊息,請使用下列篩選器:
logName="projects/$PROJECT/logs/cloudaudit.googleapis.com%2Fpolicy"
為盡可能提高安全性,請禁止存取不支援的服務。設定範圍,確保只有受限服務能在範圍內運作。如要這麼做,請將可存取的服務清單設定為
RESTRICTED-SERVICES
。如果您已有允許的公開 IP、身分、信任裝置、專案或虛擬私有雲網路清單,請視情況將這些項目新增至試營運範圍的連入規則或存取層級。允許已知的合法流程有助於減少違規記錄,讓審查人員專注於可採取行動的事件。
確認專案中的任何虛擬私有雲都沒有網際網路或私人 VIP 的輸出路徑。
確認所有 VPC 的
*.googleapis.com
DNS 都指向restricted.googleapis.com
。
執行用途
在雙方同意的時間,請應用程式團隊在模擬執行週邊的專案中執行工作負載。請確保所有可能呼叫 Google API 的程式碼都已完整涵蓋。模擬測試完成後,指定審查團隊即可執行違規記錄分析。
分析違規事項
模擬違規記錄包含大部分的必要資訊,可協助您判斷應用程式違規事項是否需要採取任何行動,例如將身分或 IP 位址新增至周邊允許清單。違規資料會儲存在 BigQuery 資料表 cloudaudit_googleapis_com_policy
中。以下是分析違規事項的主要元素:
- 受保護的服務和呼叫的 API 方法。
- 範圍內的專案,會封鎖要求。
- 呼叫受保護 API 的身分電子郵件地址。
- 來電者的 IP 位址。
- 違規類型。
以下是 BigQuery 查詢範例,可傳回所有違規詳細資料:
SELECT
receiveTimestamp, #time of violation
Resource.labels.service, #protected Google Cloud service being blocked
protopayload_auditlog.methodName, #method name being called
resource.labels.project_id as PROJECT, #protected project blocking the call
protopayload_auditlog.authenticationInfo.principalEmail, #caller identity
protopayload_auditlog.requestMetadata.callerIp, #caller IP
JSON_EXTRACT(protopayload_auditlog.metadataJson, '$.dryRun') as DRYRUN, #dry-run indicator
JSON_EXTRACT(protopayload_auditlog.metadataJson, '$.violationReason') as REASON, #reason for violation
protopayload_auditlog.metadataJson, #raw violation entry
FROM `BQ_DATASOURCE_NAME.cloudaudit_googleapis_com_policy_*`
where JSON_EXTRACT(protopayload_auditlog.metadataJson, '$.dryRun') = "true" #ensure these are dry-run logs
查詢相關違規事項
下列策略有助於找出相關違規事項:
為每個執行用途的專屬應用程式新增時間戳記限定條件,指出該應用程式執行用途的時間範圍:
WHERE receiveTimestamp >'2020-07-23 19:53:48.241317 UTC'
為工作負載身分或專案的命名慣例新增篩選條件:
WHERE where resource.labels.project_id like '%APPLICATION_NAME%'
查看違規記錄
查看違規記錄時,請確認下列事項:
- 身分 (電子郵件) 是否應叫用受保護的 API?
- 是否允許呼叫端從服務範圍外叫用 API?
根據上述條件,判斷是否需要允許身分、裝置、IP 位址、CIDR 範圍、專案或網路從外部存取範圍。
部分項目可能會有 private
的 IP 位址。這表示呼叫來自 Google 網路,可能是 Google 自己的服務,也可能是來自 perimeter 外部專案的虛擬私有雲。如果是 Google 服務 (例如記錄檔接收器寫入者),您需要將 Google 服務帳戶新增至允許清單。
如果項目沒有電子郵件地址,表示系統已遮蓋 Cloud 稽核記錄,因為唯讀作業因缺乏 IAM 權限而遭拒。在這種情況下,您可以使用 IP 位址和資源名稱,瞭解存取嘗試的來源。這類存取嘗試可能是機構外部使用者不小心所為。舉例來說,使用者輸入的 bucket 名稱與實際名稱相似,但有誤。
如果看到 SERVICE_NOT_ALLOWED_FROM_VPC
違規類型,工作負載可能正在使用 VPC Service Controls 支援的服務,但該服務未新增至受保護的 API 清單。舉例來說,如果 IAM 導致這類違規行為,管理員應執行下列 Google Cloud CLI 指令,將 IAM 新增至可存取服務清單:
gcloud access-context-manager perimeters update perimeter_test \
--add-vpc-allowed-services=RESTRICTED-SERVICES,IAM.googleapis.com \
--policy=1234567890
你可以建立 Looker Studio 資訊主頁,查看違規事項。詳情請參閱「使用 Looker Studio 監控機構的 VPC Service Controls 違規情形」。 Google Cloud Looker Studio 的舊名為「數據分析」。