收集 Google Cloud 虛擬私有雲流量記錄
剖析器版本:6.0
本文說明如何使用 Google Cloud 儲存空間,將虛擬私有雲流量記錄檔 Google Cloud 擷取至 Google Security Operations。
虛擬私有雲流量記錄會從 VM 執行個體收發的網路流量中取樣,並記錄下來,包括做為 Google Kubernetes Engine 節點的執行個體。這類記錄可用於網路監控、鑑識、即時安全性分析和支出最佳化。系統會依連線匯總流量記錄,並透過 Cloud Logging 以近乎即時的速度匯出。記錄接收器會將 VPC 流程記錄傳送至 Cloud Storage bucket,Google SecOps 會從該處擷取記錄。
事前準備
請確認您已完成下列事前準備事項:
- Google SecOps 執行個體
- Google Cloud 專案,並啟用下列 API:
- Cloud Storage API
- Cloud Logging API
- Compute Engine API
- 權限:
- 在子網路上啟用虛擬私有雲流量記錄
- 建立及管理 Cloud Storage bucket
- 管理 Cloud Storage 值區的身分與存取權管理政策
- 建立及管理 Cloud Logging API 接收器
- 至少一個要啟用虛擬私有雲流量記錄的虛擬私有雲子網路
在子網路上啟用虛擬私有雲流量記錄
設定擷取管道前,請務必在目標子網路上啟用虛擬私有雲流量記錄。 Google Cloud 支援兩種 API 來管理虛擬私有雲流量記錄:Network Management API (建議使用) 和 Compute Engine API。
使用 Google Cloud 控制台 (Network Management API)
- 在 Google Cloud 控制台中,依序前往「VPC network」(虛擬私有雲網路) >「VPC networks」(虛擬私有雲網路)。
- 按一下「目前專案中的子網路」分頁標籤。
- 選取要啟用流量記錄檔的子網路。
- 按一下「管理流量記錄」。
- 按一下「新增設定」。
- 輸入設定名稱。
- 設定下列選用設定:
- 匯總時間間隔:選取匯總時間間隔 (預設為 5 秒)。間隔越短,資料越精細,但記錄檔量會增加。
- 納入中繼資料:選取「納入所有中繼資料」,納入 VM 執行個體和 VPC 詳細資料。
- 次級取樣率:設定取樣率 (預設值:Network Management API 為 100%)。取樣率越高,擷取的流程就越多,但記錄檔量也會增加。
- 篩選運算式:選用的 CEL 篩選運算式,用於納入或排除特定流程 (最多 2,048 個字元)。
- 按一下 [儲存]。
使用 gcloud 指令列工具 (Network Management API)
請使用下列語法:
gcloud network-management vpc-flow-logs-configs create <CONFIG_NAME> \ --location=global \ --subnet=projects/<PROJECT_ID>/regions/<REGION>/subnetworks/<SUBNET_NAME> \ --aggregation-interval=INTERVAL_5_SEC \ --metadata=INCLUDE_ALL_METADATA \ --flow-sampling=1.0
更改項目:
<CONFIG_NAME>:說明設定名稱 (例如vpc-flow-logs-config)<PROJECT_ID>:您的 Google Cloud 專案 ID<REGION>:子網路區域 (例如us-central1)<SUBNET_NAME>:子網路名稱
使用 gcloud 指令列工具 (Compute Engine API)
請使用下列語法:
gcloud compute networks subnets update <SUBNET_NAME> \ --region=<REGION> \ --enable-flow-logs \ --logging-aggregation-interval=interval-5-sec \ --logging-metadata=include-all \ --logging-flow-sampling=0.5 \ --project=<PROJECT_ID>
更改項目:
<SUBNET_NAME>:子網路名稱<REGION>:子網路區域 (例如us-central1)<PROJECT_ID>:您的 Google Cloud 專案 ID
建立 Google Cloud Storage bucket
- 前往 Google Cloud 控制台。
- 選取專案。
- 在導覽選單中,依序前往「Cloud Storage」>「Bucket」。
- 按一下「建立值區」。
請提供下列設定詳細資料:
設定 值 為 bucket 命名 輸入全域不重複的名稱 (例如 vpc-flow-logs-bucket)位置類型 根據需求選擇 (區域、雙區域、多區域) 位置 選取位置 (例如 us-central1)儲存空間級別 標準 (建議用於經常存取的記錄) 存取控管 統一 (建議) 保護工具 選用:啟用物件版本管理或保留政策 點選「建立」。
建立 Logging 接收器,將虛擬私有雲流量記錄匯出至 GCS
記錄接收器會將記錄檔中的虛擬私有雲流量記錄轉送至 Cloud Storage 值區。Google SecOps 接著會從 bucket 擷取匯出的物件。
建立記錄檔接收器
- 在 Google Cloud 控制台中,依序前往「Logging」>「Log Router」。
- 按一下「Create Sink」(建立接收器)。
- 請提供下列設定詳細資料:
- 接收器名稱:輸入描述性名稱 (例如
vpc-flow-to-gcs)。 - 接收器說明:輸入
Route VPC Flow Logs to Cloud Storage for Google SecOps ingestion。
- 接收器名稱:輸入描述性名稱 (例如
- 點選「下一步」。
- 在「選取接收器服務」部分:
- 接收器服務:選取「Cloud Storage bucket」(Cloud Storage 值區)。
- 選取 Cloud Storage bucket:選取 bucket
vpc-flow-logs-bucket。
- 點選「下一步」。
在「選擇要納入接收器的記錄檔」部分,輸入下列篩選器來擷取虛擬私有雲流量記錄:
resource.type="gce_subnetwork" AND log_id("compute.googleapis.com/vpc_flows")resource.type="gce_subnetwork" AND log_id("compute.googleapis.com/vpc_flows") AND resource.labels.subnetwork_name="<SUBNET_NAME>"- 將
<SUBNET_NAME>替換為目標子網路名稱。
- 將
點選「下一步」。
檢查設定,然後按一下「建立接收器」。
授予接收器寫入值區的權限
建立接收器後,Logging 會為接收器指派寫入者服務帳戶 (寫入者身分)。授予這個身分將物件寫入值區的權限。
- 依序前往「Logging」>「Log Router」。
- 找到接收器
vpc-flow-to-gcs,按一下三點選單,然後選取「查看接收器詳細資料」。 - 複製「Writer 身分」值 (格式為
serviceAccount:p<PROJECT_NUMBER>-<ID>@gcp-sa-logging.iam.gserviceaccount.com)。 - 依序前往「Cloud Storage」>「Buckets」。
- 點選
vpc-flow-logs-bucket值區。 - 前往「權限」分頁標籤。
- 按一下「授予存取權」。
- 請提供下列設定詳細資料:
- 新增主體:貼上接收器寫入者身分 (不含
serviceAccount:前置字元)。 - 指派角色:選取「Storage 物件建立者」 (
roles/storage.objectCreator)。
- 新增主體:貼上接收器寫入者身分 (不含
- 按一下 [儲存]。
確認記錄是否正在匯出
- 依序前往「Cloud Storage」>「Buckets」。
- 點選
vpc-flow-logs-bucket值區。 - 請稍候幾分鐘,等待接收器寫入第一個物件。
確認系統已建立名為
compute.googleapis.com/vpc_flows/的資料夾 (或含日期的路徑),且其中包含匯出的記錄檔。
在 Google SecOps 中設定資訊提供,以便擷取虛擬私有雲流量記錄
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「新增動態消息」。
- 按一下「設定單一動態饋給」。
- 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如
GCP VPC Flow Logs)。 - 選取「Google Cloud Storage V2」做為「來源類型」。
- 選取「GCP VPC Flow」(GCP VPC 流量) 做為「Log type」(記錄類型)。
按一下「取得服務帳戶」。系統會顯示專屬服務帳戶電子郵件地址,例如:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com複製這個電子郵件地址,後續步驟會用到。
點選「下一步」。
指定下列輸入參數的值:
儲存空間 bucket URI:輸入 GCS bucket URI,並加上前置路徑:
gs://vpc-flow-logs-bucket/compute.googleapis.com/vpc_flows/- 取代:
vpc-flow-logs-bucket:您的 GCS bucket 名稱。compute.googleapis.com/vpc_flows:選用前置字元/資料夾路徑,接收器會將記錄寫入其中 (如為根目錄,請留空)。
- 取代:
來源刪除選項:根據偏好設定選取刪除選項:
- 永不:移轉後一律不刪除任何檔案 (建議用於測試)。
- 刪除已轉移的檔案:成功轉移檔案後刪除檔案。
- 刪除已轉移的檔案和空白目錄:成功轉移後刪除檔案和空白目錄。
檔案存在時間上限 (天):包含在過去天數內修改的檔案。預設值為 180 天。
資產命名空間:資產命名空間。
擷取標籤:要套用至這個動態饋給事件的標籤。
點選「下一步」。
在「Finalize」(完成) 畫面中檢查新的動態饋給設定,然後按一下「Submit」(提交)。
將 IAM 權限授予 Google SecOps 服務帳戶
Google SecOps 服務帳戶必須具備 Cloud Storage bucket 的「Storage 物件檢視者」角色。
- 依序前往「Cloud Storage」>「Buckets」。
- 點選
vpc-flow-logs-bucket值區。 - 前往「權限」分頁標籤。
- 按一下「授予存取權」。
- 請提供下列設定詳細資料:
- 新增主體:貼上 Google SecOps 服務帳戶電子郵件地址。
- 指派角色:選取「Storage 物件檢視者」 (
roles/storage.objectViewer)。
按一下 [儲存]。
UDM 對應表
| 記錄欄位 | UDM 對應 | 邏輯 |
|---|---|---|
_field |
additional.fields |
已合併 |
textpayload_label |
additional.fields |
已合併 |
tunnel_id_label |
additional.fields |
已合併 |
description |
metadata.description |
直接對應 |
timestamp |
metadata.event_timestamp |
已剖析為 ISO8601 |
ts |
metadata.event_timestamp |
已剖析為 ISO8601 |
event_type |
metadata.event_type |
直接對應 |
product_event_type |
metadata.product_event_type |
直接對應 |
product_log_id |
metadata.product_log_id |
直接對應 |
product_name |
metadata.product_name |
直接對應 |
product_version |
metadata.product_version |
直接對應 |
vendor_name |
metadata.vendor_name |
直接對應 |
ip_protocol_out |
network.ip_protocol |
直接對應 |
jsonPayload.bytes_sent |
network.sent_bytes |
已重新命名/對應 |
jsonPayload.packets_sent |
network.sent_packets |
已重新命名/對應 |
principal.ip |
principal.asset.ip |
已合併 |
target.ip |
principal.asset.ip |
已合併 |
jsonPayload.src_instance.vm_name |
principal.hostname |
直接對應 |
target.hostname |
principal.hostname |
已重新命名/對應 |
jsonPayload.connection.src_ip |
principal.ip |
直接對應 |
target.ip |
principal.ip |
已合併 |
jsonPayload.src_location.city |
principal.location.city |
直接對應 |
target.location.city |
principal.location.city |
已重新命名/對應 |
jsonPayload.src_location.country |
principal.location.country_or_region |
直接對應 |
target.location.country_or_region |
principal.location.country_or_region |
已重新命名/對應 |
jsonPayload.src_instance.region |
principal.location.name |
直接對應 |
resource.labels.location |
principal.location.name |
直接對應 |
target.location.name |
principal.location.name |
已重新命名/對應 |
jsonPayload.src_location.region |
principal.location.state |
直接對應 |
target.location.state |
principal.location.state |
已重新命名/對應 |
jsonPayload.src_vpc.project_id |
principal.namespace |
直接對應 |
jsonPayload.src_vpc.vpc_name |
principal.namespace |
直接對應 |
target.namespace |
principal.namespace |
已重新命名/對應 |
jsonPayload.connection.src_port |
principal.port |
直接對應 |
_field |
principal.resource.attribute.labels |
已合併 |
key |
principal.resource.attribute.labels |
已對應:jsonPayload_src_google_service_type → _field |
src_gke_cluster_location |
principal.resource.attribute.labels |
已合併 |
src_gke_cluster_name |
principal.resource.attribute.labels |
已合併 |
src_gke_namespace |
principal.resource.attribute.labels |
已合併 |
src_gke_pod_name |
principal.resource.attribute.labels |
已合併 |
logName |
security_result.category_details |
已合併 |
severity |
security_result.severity |
已對應:DEBUG → LOW |
principal.ip |
target.asset.ip |
已合併 |
target.ip |
target.asset.ip |
已合併 |
jsonPayload.dest_instance.vm_name |
target.hostname |
直接對應 |
principal.hostname |
target.hostname |
已重新命名/對應 |
jsonPayload.connection.dest_ip |
target.ip |
直接對應 |
principal.ip |
target.ip |
已合併 |
jsonPayload.dest_location.city |
target.location.city |
直接對應 |
principal.location.city |
target.location.city |
已重新命名/對應 |
jsonPayload.dest_location.country |
target.location.country_or_region |
直接對應 |
principal.location.country_or_region |
target.location.country_or_region |
已重新命名/對應 |
jsonPayload.dest_instance.region |
target.location.name |
直接對應 |
principal.location.name |
target.location.name |
已重新命名/對應 |
jsonPayload.dest_location.region |
target.location.state |
直接對應 |
principal.location.state |
target.location.state |
已重新命名/對應 |
jsonPayload.dest_vpc.project_id |
target.namespace |
直接對應 |
jsonPayload.dest_vpc.vpc_name |
target.namespace |
直接對應 |
principal.namespace |
target.namespace |
已重新命名/對應 |
jsonPayload.connection.dest_port |
target.port |
已重新命名/對應 |
dest_gke_cluster_location |
target.resource.attribute.labels |
已合併 |
dest_gke_cluster_name |
target.resource.attribute.labels |
已合併 |
dest_gke_namespace |
target.resource.attribute.labels |
已合併 |
dest_gke_pod_name |
target.resource.attribute.labels |
已合併 |
service_name_label |
target.resource.attribute.labels |
已合併 |
service_namespace_label |
target.resource.attribute.labels |
已合併 |
subnetwork_id_field |
target.user.attribute.labels |
已合併 |
| 不適用 | network.direction |
常數:OUTBOUND |
| 不適用 | network.ip_protocol |
常數:network.ip_protocol |
| 不適用 | network.sent_bytes |
常數:network.sent_bytes |
| 不適用 | principal.hostname |
常數:target.hostname |
| 不適用 | principal.location.city |
常數:target.location.city |
| 不適用 | principal.location.country_or_region |
常數:target.location.country_or_region |
| 不適用 | principal.location.name |
常數:target.location.name |
| 不適用 | principal.location.state |
常數:target.location.state |
| 不適用 | principal.namespace |
常數:target.namespace |
| 不適用 | principal.port |
常數:principal.port |
| 不適用 | security_result.severity |
常數:LOW |
| 不適用 | target.hostname |
常數:principal.hostname |
| 不適用 | target.location.city |
常數:principal.location.city |
| 不適用 | target.location.country_or_region |
常數:principal.location.country_or_re... |
| 不適用 | target.location.name |
常數:principal.location.name |
| 不適用 | target.location.state |
常數:principal.location.state |
| 不適用 | target.namespace |
常數:principal.namespace |
| 不適用 | target.port |
常數:-99 |
resource.labels.subnetwork_id |
target.user.attribute.labels |
從變更記錄對應 |
變更記錄
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。