收集 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 控制台
- 前往 Google Cloud Console。
- 選取專案或建立新專案。
- 在導覽選單中,依序前往「Cloud Storage」>「Bucket」。
- 按一下「建立值區」。
請提供下列設定詳細資料:
設定 值 為 bucket 命名 輸入全域不重複的名稱 (例如 gmail-logs-export)位置類型 根據需求選擇 (區域、雙區域、多區域) 位置 選取位置 (例如 us-central1)儲存空間級別 標準 (建議用於經常存取的記錄) 存取控管 統一 (建議) 保護工具 選用:啟用物件版本管理或保留政策 點選「建立」。
使用 gcloud 指令列工具
或者,您也可以使用
gcloud指令建立值區:gcloud storage buckets create gs://gmail-logs-export \ --location=us-central1 \ --default-storage-class=STANDARD- 取代:
gmail-logs-export:您要使用的 bucket 名稱 (全域不重複)。us-central1:偏好的區域 (例如us-central1、europe-west1)。
- 取代:
設定 Google Workspace,將記錄匯出至 BigQuery
透過整合式 Workspace 記錄與報告功能,將 Google Workspace 記錄 (包括 Gmail 記錄) 匯出至 BigQuery。
啟用 Workspace 記錄的 BigQuery 匯出功能
- 使用超級管理員帳戶登入 Google 管理控制台。
- 依序點選「選單」「報告」「資料整合」。
- 將滑鼠游標移至「BigQuery Export」資訊卡上,然後按一下「編輯」。
- 勾選「啟用匯出功能,將 Google Workspace 資料匯出至 Google BigQuery」方塊。
- 在「BigQuery 專案 ID」下方,選取要儲存記錄的專案。
- 在「專案中的新資料集」下方,根據要用來儲存記錄的資料集,輸入資料集名稱 (例如
workspace_logs)。 - 選用:勾選「限制資料集只能放在特定地理位置」方塊,然後從選單中選取位置。
按一下 [儲存]。
啟用匯出功能後,通常會在 10 分鐘內顯示活動記錄事件。資料會匯出至指定資料集中名為 activity_YYYYMMDD 的資料表。
建立定期查詢,將資料從 BigQuery 匯出至 GCS
如要定期將 BigQuery 中的 Gmail 記錄自動匯出至 Cloud Storage,請使用 EXPORT DATA 陳述式建立排程查詢。
使用 BigQuery 控制台
- 前往 Google Cloud 控制台中的「BigQuery」BigQuery。
- 在左側導覽列中,按一下「已排定時間的查詢」。
- 按一下「建立排程查詢」。
在「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 專案 IDworkspace_logs:BigQuery 資料集名稱
- 取代:
在「Schedule options」(排程選項) 專區:
- 重複:選取「小時」。
- 每次:輸入
1。 - 「開始日期和執行時間」:選取目前的日期和時間。
在「查詢結果目的地」部分:
- 資料集:選取查詢中繼資料的資料集 (而非匯出的資料)。
按一下 [儲存]。
使用 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 專案 IDgmail-logs-export:您的 GCS bucket 名稱workspace_logs:BigQuery 資料集名稱
- 取代:
擷取 Google SecOps 服務帳戶
Google SecOps 會使用專屬服務帳戶,從 GCS bucket 讀取資料。您必須授予這個服務帳戶值區存取權。
在 Google SecOps 中設定動態饋給,擷取 Gmail 記錄
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「新增動態消息」。
- 按一下「設定單一動態饋給」。
- 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如
Gmail Logs)。 - 選取「Google Cloud Storage V2」做為「來源類型」。
選取「GMAIL Logs」做為「Log type」。
按一下「取得服務帳戶」。系統會顯示專屬的服務帳戶電子郵件地址,例如:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com複製這個電子郵件地址,以便在下一步中使用。
點選「下一步」。
指定下列輸入參數的值:
儲存空間 bucket URL:輸入 GCS bucket URI,並加上前置路徑:
gs://gmail-logs-export/gmail-logs/- 取代:
gmail-logs-export:您的 GCS bucket 名稱gmail-logs:儲存記錄的前置字元/資料夾路徑
- 取代:
來源刪除選項:根據偏好設定選取刪除選項:
- 永不:移轉後一律不刪除任何檔案 (建議用於測試)。
- 刪除已轉移的檔案:成功轉移檔案後刪除檔案。
刪除已轉移的檔案和空白目錄:成功轉移後刪除檔案和空白目錄。
檔案存在時間上限:包含在過去天數內修改的檔案。預設值為 180 天。
資產命名空間:資產命名空間。
擷取標籤:要套用至這個動態饋給事件的標籤。
點選「下一步」。
在「Finalize」(完成) 畫面中檢查新的動態饋給設定,然後按一下「Submit」(提交)。
將 IAM 權限授予 Google SecOps 服務帳戶
Google SecOps 服務帳戶需要 GCS bucket 的「Storage 物件檢視者」角色。
使用 Google Cloud 控制台
- 依序前往「Cloud Storage」>「Buckets」。
- 按一下 bucket 名稱。
- 前往「權限」分頁標籤。
- 按一下「授予存取權」。
- 請提供下列設定詳細資料:
- 新增主體:貼上 Google SecOps 服務帳戶電子郵件地址。
- 指派角色:選取「Storage 物件檢視者」。
- 按一下 [儲存]。
使用 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 專業人員尋求答案。