收集 JumpCloud Directory Insights 記錄
本文說明如何使用 Google Cloud Storage V2,將 JumpCloud Directory Insights 記錄檔擷取至 Google Security Operations。
JumpCloud 是雲端目錄平台,提供身分管理、單一登入和裝置管理功能。Directory Insights 提供使用者驗證、管理員動作和系統事件的稽核記錄和活動記錄。剖析器會將記錄欄位對應至統合式資料模型 (UDM),並處理使用者登入、資源變更和安全性動作等事件類型。
事前準備
請確認您已完成下列事前準備事項:
- Google SecOps 執行個體
- 已啟用 Cloud Storage API 的 GCP 專案
- 有權建立及管理 GCS bucket 和 IAM 政策
- 具備「管理員」或「管理員」角色的 JumpCloud 帳戶,以及有效的 API 金鑰
建立 Google Cloud Storage bucket
- 前往 Google Cloud 控制台。
- 選取專案或建立新專案。
- 在導覽選單中,依序前往「Cloud Storage」>「Bucket」。
- 按一下「建立值區」。
請提供下列設定詳細資料:
設定 值 為 bucket 命名 輸入全域不重複的名稱 (例如 jumpcloud-directory-insights-logs)位置類型 根據需求選擇 (區域、雙區域、多區域) 位置 選取位置 (例如 us-central1)儲存空間級別 標準 (建議用於經常存取的記錄) 存取控管 統一 (建議) 保護工具 選用:啟用物件版本管理或資料保留政策 點選「建立」。
將 JumpCloud Directory Insights 記錄檔匯出至 Google Cloud Storage
JumpCloud Directory Insights 會透過 Directory Insights API 公開事件。使用排定的指令碼或 Cloud Run 函式,擷取事件並寫入 GCS。
產生 JumpCloud API 金鑰:
- 登入 JumpCloud 管理入口網站。
- 前往個人資料圖示,然後選取「我的 API 金鑰」。
- 複製 API 金鑰。
建立 Cloud Run 函式,查詢 JumpCloud Directory Insights API、擷取事件,並將事件寫入 GCS。
使用 Cloud Scheduler 和 Pub/Sub 依排程觸發函式。
- 確認匯出的檔案保留原始 JSON 格式。
- 每個檔案應包含一或多個事件記錄。
擷取 Google SecOps 服務帳戶
- 登入 Google SecOps 控制台。
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「新增動態消息」。
- 按一下「設定單一動態饋給」。
- 選取「Google Cloud Storage V2」做為「來源類型」。
- 選取「JumpCloud Directory Insights」做為「記錄類型」。
按一下「取得服務帳戶」。系統會顯示專屬服務帳戶電子郵件地址,例如:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com複製這個電子郵件地址,後續步驟會用到。
將 IAM 權限授予 Google SecOps 服務帳戶
- 依序前往「Cloud Storage」>「Buckets」。
- 按一下 bucket 名稱。
- 前往「權限」分頁標籤。
- 按一下「授予存取權」。
- 請提供下列設定詳細資料:
- 新增主體:貼上 Google SecOps 服務帳戶電子郵件地址。
- 指派角色:選取「Storage 物件檢視者」。
- 按一下 [儲存]。
在 Google SecOps 中設定動態饋給,擷取 JumpCloud Directory Insights 記錄
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「新增動態消息」。
- 按一下「設定單一動態饋給」。
- 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如
JumpCloud Directory Insights Logs)。 - 選取「Google Cloud Storage V2」做為「來源類型」。
- 選取「JumpCloud Directory Insights」做為「記錄類型」。
- 點選「下一步」。
指定下列輸入參數的值:
欄位 值 儲存空間 bucket URI gs://jumpcloud-directory-insights-logs/jumpcloud/刪除來源的選項 根據偏好選取刪除選項 檔案存在時間上限 (天) 預設值為 180 天 資產命名空間 資產命名空間 擷取標籤 要套用至這個動態饋給事件的標籤 - 請將
jumpcloud-directory-insights-logs替換成實際的 GCS 值區名稱。 - 請務必在 URI 結尾加上尾端斜線 (
/)。
- 請將
點選「下一步」。
在「Finalize」(完成) 畫面中檢查新的動態饋給設定,然後按一下「Submit」(提交)。
UDM 對應表
| 記錄欄位 | UDM 對應 | 邏輯 |
|---|---|---|
| data.profile_list.payload_content.payload_type、data.profile_list.payload_content.payload_identifier、data.profile_list.payload_content.payload_uuid、data.profile_list.payload_content.payload_organization、data.profile_list.payload_content.payload_display_name、data.profile_list.payload_content.payload_description | 關於 | 與 payloadContent 中的屬性標籤合併 |
| data.association.op、data.association.action_source、data.geoip.region_code、data.service、data.event_type、data.@version、data.application.version、data.application.publisher、data.application.uninstall_string、data.changes.0.field、data.changes.0.from、data.changes.0.to、data.available_os_updates.allows_install_later | additional.fields | 與對應標籤合併 |
| extensions.auth.type | 當 event_type 為 USER_LOGIN 時,請設為「MACHINE」 | |
| data.timestamp | metadata.event_timestamp | 使用日期比對 ISO8601、RFC 3339、yyyy-MM-ddTHH:mm:ss.SSSSSSZ 轉換 |
| data.message、data.client_ip、data.initiated_by.username、data.system.hostname | metadata.event_type | 如果訊息符合「已登入」且目標不為空白,則設為 USER_LOGIN;如果存在 IP 和使用者 ID,則設為 USER_UNCATEGORIZED;如果存在主機名稱或 IP,則設為 STATUS_UPDATE;如果存在使用者 ID,則設為 USER_UNCATEGORIZED;否則設為 GENERIC_EVENT |
| data.id | metadata.product_log_id | 直接複製值 |
| data.@version、data.application.version | metadata.product_version | 設為 data.@version,然後替換為 data.application.version |
| data.application.name | principal.application | 直接複製值 |
| data.mdm_type | principal.asset.hardware | 已與製造商合併,並設為 data.mdm_type |
| data.command_uuid | principal.asset_id | 串連為「commandUuid:」+ data.command_uuid |
| data.system.hostname | principal.hostname | 直接複製值 |
| data.client_ip | principal.ip | 從 data.client_ip 合併 |
| data.geoip.country_code | principal.location.country_or_region | 直接複製值 |
| data.geoip.region_code | principal.location.name | 直接複製值 |
| data.geoip.latitude | principal.location.region_latitude | 先轉換為字串,再轉換為浮點數 |
| data.geoip.longitude | principal.location.region_longitude | 先轉換為字串,再轉換為浮點數 |
| data.geoip.region_name | principal.location.state | 直接複製值 |
| data.application.path、data.process_name | principal.process.file.full_path | 設為 data.application.path,然後替換為 data.process_name |
| data.association.connection.from.name、data.mdm_device_manager_id、data.request_type | principal.resource.attribute.labels | 已與 connection_from_name、mdm_device_manager_id、request_type 的標籤合併 |
| data.system.id、data.resource.id、data.mdm_device_id | principal.resource.id | 設為 data.system.id,然後替換為 data.resource.id,接著替換為 data.mdm_device_id |
| data.resource.username | principal.resource.name | 直接複製值 |
| data.association.connection.from.object_id | principal.resource.product_object_id | 直接複製值 |
| data.association.connection.from.type | principal.resource.type | 直接複製值 |
| data.initiated_by.email | principal.user.email_addresses | 如果電子郵件地址符合 ^.+@.+$,則會合併 |
| data.system.displayName | principal.user.user_display_name | 直接複製值 |
| data.initiated_by.username、data.admin_info.name | principal.user.userid | 設為 data.initiated_by.username,然後替換為 data.admin_info.name,接著替換為 data.initiated_by.username |
| data.success、data.status | sec_result.action | 如果 success 為 true 或狀態為「已確認」,請設為 ALLOW;如果 success 為 false,請設為 BLOCK |
| data.status、data.success | sec_result.action_details | 如果不是空白,則設為狀態,否則設為成功 |
| data.success、data.status、data.security_info.management_status.is_activation_lock_manageable、data.security_info.management_status.is_user_enrollment、data.security_info.management_status.enrolled_via_dep、data.organization、data.windows_meta.logon_type、data.security_info.management_status.user_approved_enrollment | sec_result.detection_fields | 與 is_activation_lock_manageable、is_user_enrollment、enrolled_via_dep、organization、logon_type、user_approved_enrollment 的標籤合併 |
| data.query_responses.device_name | target.hostname | 直接複製值 |
| data.query_responses.wifi_mac | target.mac | 從 data.query_responses.wifi_mac 合併 |
| data.query_responses.model_name | target.platform | 如果符合 (?i)mac,請設為「MAC」 |
| data.query_responses.os_version | target.platform_version | 直接複製值 |
| data.query_responses.available_device_capacity、data.query_responses.device_capacity | target.resource.attribute.labels | 已與 available_device_capacity 和 device_capacity 的標籤合併 |
| data.association.connection.to.name | target.resource.name | 直接複製值 |
| data.association.connection.to.object_id | target.resource.product_object_id | 直接複製值 |
| data.association.connection.to.type | target.resource.type | 直接複製值 |
| data.profile_list.payload_organization | target.user.department | 從 profile_payload_organization 合併 |
| metadata.vendor_name | 設為「JUMPCLOUD_DIRECTORY_INSIGHTS」 | |
| metadata.product_name | 設為「JUMPCLOUD_DIRECTORY_INSIGHTS」 | |
data.alert_id |
event.idm.read_only_udm.metadata.product_log_id |
從變更記錄對應 |
data.alert_title |
event.idm.read_only_udm.security_result.summary |
從變更記錄對應 |
data.category |
event.idm.read_only_udm.security_result.category_details |
從變更記錄對應 |
data.description |
event.idm.read_only_udm.security_result.description |
從變更記錄對應 |
data.priority |
event.idm.read_only_udm.security_result.priority |
從變更記錄對應 |
data.rule_id |
event.idm.read_only_udm.security_result.rule_id |
從變更記錄對應 |
data.event_description |
event.idm.read_only_udm.metadata.description |
從變更記錄對應 |
data.di_event.event_type |
event.idm.read_only_udm.metadata.product_event_type |
從變更記錄對應 |
data.di_event.initiated_by.email |
event.idm.read_only_udm.principal.user.email_addresses |
從變更記錄對應 |
data.di_event.initiated_by.id |
event.idm.read_only_udm.principal.user.product_object_id |
從變更記錄對應 |
data.di_event.client_ip |
event.idm.read_only_udm.principal.ip |
從變更記錄對應 |
data.di_event.association.connection.from.name |
event.idm.read_only_udm.target.group.group_display_name |
從變更記錄對應 |
data.di_event.association.connection.to.name |
event.idm.read_only_udm.about.user.userid |
從變更記錄對應 |
data.di_event.association.connection.to.object_id |
event.idm.read_only_udm.about.user.product_object_id |
從變更記錄對應 |
data.di_event.success |
event.idm.read_only_udm.security_result.action |
從變更記錄對應 |
data.di_event.service |
event.idm.read_only_udm.target.application |
從變更記錄對應 |
data.di_event.geoip.country_code |
event.idm.read_only_udm.principal.location.country_or_region |
從變更記錄對應 |
data.organization_name |
event.idm.read_only_udm.principal.user.company_name |
從變更記錄對應 |
data.di_event.@version |
event.idm.read_only_udm.metadata.product_version |
從變更記錄對應 |
data.source_url |
event.idm.read_only_udm.principal.url |
從變更記錄對應 |
data.di_event.initiated_by.source |
event.idm.read_only_udm.principal.hostname |
從變更記錄對應 |
data.source_name |
event.idm.read_only_udm.principal.user.userid |
從變更記錄對應 |
data.di_event.geoip.latitude |
event.idm.read_only_udm.principal.location.region_latitude |
從變更記錄對應 |
data.di_event.geoip.longitude |
event.idm.read_only_udm.principal.location.region_longitude |
從變更記錄對應 |
data.di_event.geoip.region_name |
event.idm.read_only_udm.principal.location.state |
從變更記錄對應 |
data.di_event.organization |
event.idm.read_only_udm.security_result.detection_fields |
從變更記錄對應 |
association_op", "action_source", and "sso_token_success |
additional.fields |
從變更記錄對應 |
connection_from_type |
principal.resource.resource_type |
從變更記錄對應 |
connection_from_object_id |
principal.resource.product_object_id |
從變更記錄對應 |
connection_to_name |
target.resource.name |
從變更記錄對應 |
connection_to_type |
target.resource.resource_type |
從變更記錄對應 |
connection_to_object_id |
target.resource.product_object_id |
從變更記錄對應 |
變更記錄
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。