收集 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)

  1. Google Cloud 控制台中,依序前往「VPC network」(虛擬私有雲網路) >「VPC networks」(虛擬私有雲網路)
  2. 按一下「目前專案中的子網路」分頁標籤。
  3. 選取要啟用流量記錄檔的子網路。
  4. 按一下「管理流量記錄」
  5. 按一下「新增設定」
  6. 輸入設定名稱。
  7. 設定下列選用設定:
    • 匯總時間間隔:選取匯總時間間隔 (預設為 5 秒)。間隔越短,資料越精細,但記錄檔量會增加。
    • 納入中繼資料:選取「納入所有中繼資料」,納入 VM 執行個體和 VPC 詳細資料。
    • 次級取樣率:設定取樣率 (預設值:Network Management API 為 100%)。取樣率越高,擷取的流程就越多,但記錄檔量也會增加。
    • 篩選運算式:選用的 CEL 篩選運算式,用於納入或排除特定流程 (最多 2,048 個字元)。
  8. 按一下 [儲存]

使用 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

  1. 前往 Google Cloud 控制台
  2. 選取專案。
  3. 在導覽選單中,依序前往「Cloud Storage」>「Bucket」
  4. 按一下「建立值區」
  5. 請提供下列設定詳細資料:

    設定
    為 bucket 命名 輸入全域不重複的名稱 (例如 vpc-flow-logs-bucket)
    位置類型 根據需求選擇 (區域、雙區域、多區域)
    位置 選取位置 (例如 us-central1)
    儲存空間級別 標準 (建議用於經常存取的記錄)
    存取控管 統一 (建議)
    保護工具 選用:啟用物件版本管理或保留政策
  6. 點選「建立」

建立 Logging 接收器,將虛擬私有雲流量記錄匯出至 GCS

記錄接收器會將記錄檔中的虛擬私有雲流量記錄轉送至 Cloud Storage 值區。Google SecOps 接著會從 bucket 擷取匯出的物件。

建立記錄檔接收器

  1. Google Cloud 控制台中,依序前往「Logging」>「Log Router」
  2. 按一下「Create Sink」(建立接收器)
  3. 請提供下列設定詳細資料:
    • 接收器名稱:輸入描述性名稱 (例如 vpc-flow-to-gcs)。
    • 接收器說明:輸入 Route VPC Flow Logs to Cloud Storage for Google SecOps ingestion
  4. 點選「下一步」
  5. 在「選取接收器服務」部分:
    • 接收器服務:選取「Cloud Storage bucket」(Cloud Storage 值區)
    • 選取 Cloud Storage bucket:選取 bucket vpc-flow-logs-bucket
  6. 點選「下一步」
  7. 在「選擇要納入接收器的記錄檔」部分,輸入下列篩選器來擷取虛擬私有雲流量記錄:

    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> 替換為目標子網路名稱。
  8. 點選「下一步」

  9. 檢查設定,然後按一下「建立接收器」

授予接收器寫入值區的權限

建立接收器後,Logging 會為接收器指派寫入者服務帳戶 (寫入者身分)。授予這個身分將物件寫入值區的權限。

  1. 依序前往「Logging」>「Log Router」
  2. 找到接收器 vpc-flow-to-gcs,按一下三點選單,然後選取「查看接收器詳細資料」
  3. 複製「Writer 身分」值 (格式為 serviceAccount:p<PROJECT_NUMBER>-<ID>@gcp-sa-logging.iam.gserviceaccount.com)。
  4. 依序前往「Cloud Storage」>「Buckets」
  5. 點選 vpc-flow-logs-bucket 值區。
  6. 前往「權限」分頁標籤。
  7. 按一下「授予存取權」
  8. 請提供下列設定詳細資料:
    • 新增主體:貼上接收器寫入者身分 (不含 serviceAccount: 前置字元)。
    • 指派角色:選取「Storage 物件建立者」 (roles/storage.objectCreator)。
  9. 按一下 [儲存]

確認記錄是否正在匯出

  1. 依序前往「Cloud Storage」>「Buckets」
  2. 點選 vpc-flow-logs-bucket 值區。
  3. 請稍候幾分鐘,等待接收器寫入第一個物件。
  4. 確認系統已建立名為 compute.googleapis.com/vpc_flows/ 的資料夾 (或含日期的路徑),且其中包含匯出的記錄檔。

在 Google SecOps 中設定資訊提供,以便擷取虛擬私有雲流量記錄

  1. 依序前往「SIEM 設定」>「動態饋給」
  2. 按一下「新增動態消息」
  3. 按一下「設定單一動態饋給」
  4. 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如 GCP VPC Flow Logs)。
  5. 選取「Google Cloud Storage V2」做為「來源類型」
  6. 選取「GCP VPC Flow」(GCP VPC 流量) 做為「Log type」(記錄類型)。
  7. 按一下「取得服務帳戶」。系統會顯示專屬服務帳戶電子郵件地址,例如:

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  8. 複製這個電子郵件地址,後續步驟會用到。

  9. 點選「下一步」

  10. 指定下列輸入參數的值:

    • 儲存空間 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 天。

    • 資產命名空間資產命名空間

    • 擷取標籤:要套用至這個動態饋給事件的標籤。

  11. 點選「下一步」

  12. 在「Finalize」(完成) 畫面中檢查新的動態饋給設定,然後按一下「Submit」(提交)

將 IAM 權限授予 Google SecOps 服務帳戶

Google SecOps 服務帳戶必須具備 Cloud Storage bucket 的「Storage 物件檢視者」角色。

  1. 依序前往「Cloud Storage」>「Buckets」
  2. 點選 vpc-flow-logs-bucket 值區。
  3. 前往「權限」分頁標籤。
  4. 按一下「授予存取權」
  5. 請提供下列設定詳細資料:
    • 新增主體:貼上 Google SecOps 服務帳戶電子郵件地址。
    • 指派角色:選取「Storage 物件檢視者」 (roles/storage.objectViewer)。
  6. 按一下 [儲存]

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 已對應:DEBUGLOW
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 專業人員尋求答案。