收集 Gmail 記錄

支援的國家/地區:

本文說明如何使用 Google Cloud Storage V2,將 Gmail 記錄擷取至 Google Security Operations。

Gmail 是 Google Workspace 的電子郵件服務,提供安全智慧的電子郵件功能,內建垃圾郵件和網路釣魚防護機制。Gmail 記錄會擷取電子郵件傳送、安全性事件,以及透過 Gmail 基礎架構傳送郵件的詳細資訊。

事前準備

請確認您已完成下列事前準備事項:

  • Google SecOps 執行個體
  • 已啟用 Cloud Storage API 和 BigQuery API 的 GCP 專案
  • Google Workspace 帳戶 (Enterprise Standard、Enterprise Plus、Education Standard 或 Education Plus)
  • Google Workspace 管理控制台的超級管理員存取權
  • 建立及管理 GCS 值區的權限
  • 管理 Google Cloud Storage 值區 IAM 政策的權限
  • 建立 BigQuery 排定查詢的權限
  • 服務帳戶 gapps-reports@system.gserviceaccount.com 必須具備 BigQuery 專案的編輯者角色

建立 Google Cloud Storage 值區

使用 Google Cloud 控制台

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

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

使用 gcloud 指令列工具

  • 或者,您也可以使用 gcloud 指令建立值區:

    gcloud storage buckets create gs://gmail-logs-export \
        --location=us-central1 \
        --default-storage-class=STANDARD
    
    • 取代:
      • gmail-logs-export:您要使用的 bucket 名稱 (全域不重複)。
      • us-central1:偏好的區域 (例如 us-central1europe-west1)。

設定 Google Workspace,將記錄匯出至 BigQuery

透過整合式 Workspace 記錄與報告功能,將 Google Workspace 記錄 (包括 Gmail 記錄) 匯出至 BigQuery。

啟用 Workspace 記錄的 BigQuery 匯出功能

  1. 使用超級管理員帳戶登入 Google 管理控制台
  2. 依序點選「選單」「報告」「資料整合」
  3. 將滑鼠游標移至「BigQuery Export」資訊卡上,然後按一下「編輯」
  4. 勾選「啟用匯出功能,將 Google Workspace 資料匯出至 Google BigQuery」方塊。
  5. 在「BigQuery 專案 ID」下方,選取要儲存記錄的專案。
  6. 在「專案中的新資料集」下方,根據要用來儲存記錄的資料集,輸入資料集名稱 (例如 workspace_logs)。
  7. 選用:勾選「限制資料集只能放在特定地理位置」方塊,然後從選單中選取位置。
  8. 按一下 [儲存]

啟用匯出功能後,通常會在 10 分鐘內顯示活動記錄事件。資料會匯出至指定資料集中名為 activity_YYYYMMDD 的資料表。

建立定期查詢,將資料從 BigQuery 匯出至 GCS

如要定期將 BigQuery 中的 Gmail 記錄自動匯出至 Cloud Storage,請使用 EXPORT DATA 陳述式建立排程查詢。

使用 BigQuery 控制台

  1. 前往 Google Cloud 控制台中的「BigQuery」BigQuery
  2. 在左側導覽列中,按一下「已排定時間的查詢」
  3. 按一下「建立排程查詢」
  4. 在「Query editor」(查詢編輯器) 中輸入下列 SQL:

    EXPORT DATA OPTIONS(
        uri='gs://gmail-logs-export/gmail-logs/*.json',
        format='JSON',
        overwrite=false
    ) AS
    SELECT 
        *
    FROM 
        `PROJECT_ID.workspace_logs.activity_*`
    WHERE 
        record_type = 'gmail'
        AND _TABLE_SUFFIX = FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))
    
    • 取代:
      • gmail-logs-export:您的 GCS bucket 名稱
      • PROJECT_ID:您的 GCP 專案 ID
      • workspace_logs:BigQuery 資料集名稱
  5. 在「Schedule options」(排程選項) 專區:

    • 重複:選取「小時」
    • 每次:輸入 1
    • 「開始日期和執行時間」:選取目前的日期和時間。
  6. 在「查詢結果目的地」部分:

    • 資料集:選取查詢中繼資料的資料集 (而非匯出的資料)。
  7. 按一下 [儲存]

使用 bq 指令列工具

  • 或者,您也可以使用 bq 指令建立排程查詢:

    bq mk \
        --transfer_config \
        --project_id=PROJECT_ID \
        --data_source=scheduled_query \
        --display_name='Gmail Logs Export to GCS' \
        --schedule='every 1 hours' \
        --params='{
            "query":"EXPORT DATA OPTIONS(uri=\"gs://gmail-logs-export/gmail-logs/*.json\", format=\"JSON\", overwrite=false) AS SELECT * FROM `PROJECT_ID.workspace_logs.activity_*` WHERE record_type = \"gmail\" AND _TABLE_SUFFIX = FORMAT_DATE(\"%Y%m%d\", DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))",
            "destination_table_name_template":"gmail_export_metadata",
            "write_disposition":"WRITE_TRUNCATE"
        }'
    
    • 取代:
      • PROJECT_ID:您的 GCP 專案 ID
      • gmail-logs-export:您的 GCS bucket 名稱
      • workspace_logs:BigQuery 資料集名稱

擷取 Google SecOps 服務帳戶

Google SecOps 會使用專屬服務帳戶,從 GCS bucket 讀取資料。您必須授予這個服務帳戶值區存取權。

在 Google SecOps 中設定動態饋給,擷取 Gmail 記錄

  1. 依序前往「SIEM 設定」>「動態饋給」
  2. 按一下「新增動態消息」
  3. 按一下「設定單一動態饋給」
  4. 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如 Gmail Logs)。
  5. 選取「Google Cloud Storage V2」做為「來源類型」
  6. 選取「GMAIL Logs」做為「Log type」

  7. 按一下「取得服務帳戶」。系統會顯示專屬的服務帳戶電子郵件地址,例如:

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  8. 複製這個電子郵件地址,以便在下一步中使用。

  9. 點選「下一步」

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

    • 儲存空間 bucket URL:輸入 GCS bucket URI,並加上前置路徑:

       gs://gmail-logs-export/gmail-logs/
      
      • 取代:
        • gmail-logs-export:您的 GCS bucket 名稱
        • gmail-logs:儲存記錄的前置字元/資料夾路徑
    • 來源刪除選項:根據偏好設定選取刪除選項:

      • 永不:移轉後一律不刪除任何檔案 (建議用於測試)。
      • 刪除已轉移的檔案:成功轉移檔案後刪除檔案。
      • 刪除已轉移的檔案和空白目錄:成功轉移後刪除檔案和空白目錄。

    • 檔案存在時間上限:包含在過去天數內修改的檔案。預設值為 180 天。

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

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

  11. 點選「下一步」

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

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

Google SecOps 服務帳戶需要 GCS bucket 的「Storage 物件檢視者」角色。

使用 Google Cloud 控制台

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

使用 gcloud 指令列工具

  • 或者,使用 gcloud 指令授予權限:

    gcloud storage buckets add-iam-policy-binding gs://gmail-logs-export \
        --member="serviceAccount:SECOPS_SERVICE_ACCOUNT_EMAIL" \
        --role="roles/storage.objectViewer"
    
    • 取代:
      • gmail-logs-export:bucket 名稱。
      • SECOPS_SERVICE_ACCOUNT_EMAIL:Google SecOps 服務帳戶電子郵件地址。

使用 gsutil 指令列工具 (舊版)

  • 授予 SecOps 服務帳戶「物件檢視者」存取權,存取 Gmail 記錄匯出 bucket。

    gsutil iam ch serviceAccount:SECOPS_SERVICE_ACCOUNT_EMAIL:objectViewer \
        gs://gmail-logs-export
    

驗證權限

  • 如要確認權限是否已正確授予,請按照下列步驟操作:

    gcloud storage buckets get-iam-policy gs://gmail-logs-export \
        --flatten="bindings[].members" \
        --filter="bindings.role:roles/storage.objectViewer"
    

輸出內容應會顯示 Google SecOps 服務帳戶電子郵件地址。

UDM 對應表

記錄欄位 UDM 對應 邏輯
attachment.file_extension_type、attachment.sha256、attachment.file_name、domains 關於 與附件詳細資料和連結網域合併
message_info.post_delivery_info.action_type、gmail.message_info.post_delivery_info.action_type、event_info.mail_event_type、gmail.event_info.mail_event_type、tok.product_bucket、tok.scope_name、record_type、token.client_type、message_info.num_message_attachments、gmail.message_info.num_message_attachments additional.fields 與各種額外中繼資料欄位合併
action_type、description、rule_id metadata.description 根據 action_type 值或說明設定特定說明,或在 rule_id == 7 時設為「Objectionable content」
metadata.event_type 設為「EMAIL_TRANSACTION」
event_name metadata.product_event_type 直接複製值
metadata.product_name 設為「GMAIL」
metadata.vendor_name 設為「Google」
__incoming_message、__outcoming_message network.direction 如果偵測到來電,請設為「INBOUND」;如果偵測到撥出電話,請設為「OUTBOUND」
destination.address network.email.cc 從索引 > 0 的目的地地址合併
message_info.source.from_header_address、message_info.source.address network.email.from 如果 from_header_address 不為空,則為該值;否則為 source.address
message_info.rfc2822_message_id、gmail.message_info.rfc2822_message_id network.email.mail_id 從 rfc2822_message_id 擷取,移除 < >,使用 grok
message_info.subject, gmail.message_info.subject network.email.subject 如果 message_info.subject 不為空值,則為該值,否則為 gmail.message_info.subject
destination.address network.email.to 從第一個目的地地址合併
network.ip_protocol 設為「TCP」
_payload_size network.received_bytes 如果是傳入訊息,請設為 _payload_size
_payload_size network.sent_bytes 如果是外寄郵件,請設為 _payload_size
token.app_name、message_info.source.service、message_info.source.selector、gmail.message_info.source.service、gmail.message_info.source.selector principal.application 如果 token.app_name 不為空白,則為該值;否則會從 source.service 和 source.selector 串連而來
message_info.connection_info.client_host_zone、gmail.message_info.connection_info.client_host_zone principal.asset.hostname client_host_zone 的值
client_ip principal.asset.ip 直接複製值
message_info.connection_info.client_host_zone、gmail.message_info.connection_info.client_host_zone principal.hostname client_host_zone 的值
client_ip principal.ip 直接複製值
message_info.connection_info.ip_geo_country、gmail.message_info.connection_info.ip_geo_country principal.location.country_or_region ip_geo_country 的值
電子郵件地址、來源地址 principal.user.email_addresses 從 email_address 和 source_address 合併
token.client_id principal.user.group_identifiers 直接複製值
message_info.source.from_header_displayname、gmail.message_info.source.from_header_displayname principal.user.user_display_name from_header_displayname 的值
source_address principal.user.userid 直接複製值
動作 security_result.action 直接複製值
category security_result.category 直接複製值
category_details security_result.category_details 直接複製值
message_info.connection_info.smtp_response_reason、gmail.message_info.connection_info.smtp_response_reason、rule_description、reason security_result.description 設為 SMTP 回應原因、規則說明或分類原因
stringMatch.predefined_detector_name、stringMatch.matched_string、stringMatch.match_expression、stringMatch.source、stringMatch.type security_result.detection_fields 與偵測欄位物件合併
rule_id security_result.rule_id 直接複製值
rule_name security_result.rule_name 直接複製值
__err_summary、rule_id、description security_result.summary 設為錯誤摘要、規則專屬摘要或說明
_target_host target.administrative_domain 直接複製值
message_info.destination.0.service、message_info.destination.0.selector、gmail.message_info.destination.0.service、gmail.message_info.destination.0.selector target.application 由服務和選取器串連而成

還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。