收集 ManageEngine ADManager Plus 記錄
本文說明如何使用 Bindplane 代理程式,將 ManageEngine ADManager Plus 記錄檔擷取至 Google Security Operations。
ManageEngine ADManager Plus 提供網頁版解決方案,可簡化 AD 管理作業,包括建立及修改使用者、以角色為準的安全性,以及詳細報表。ADManager Plus 與 Splunk 和系統記錄檔伺服器整合後,機構就能轉送在 ADManager Plus 中執行的所有 Active Directory、Microsoft 365 和 Google Workspace 管理動作記錄。
事前準備
請確認您已完成下列事前準備事項:
- Google SecOps 執行個體
- Windows Server 2016 以上版本,或搭載
systemd的 Linux 主機 - Bindplane 代理程式與 ManageEngine ADManager Plus 之間的網路連線
- 如果透過 Proxy 執行,請確保防火牆通訊埠已根據 Bindplane 代理程式需求開啟
- ManageEngine ADManager Plus 管理控制台的特殊存取權
取得 Google SecOps 擷取驗證檔案
- 登入 Google SecOps 控制台。
- 依序前往「SIEM 設定」>「收集代理程式」。
- 按一下「下載」即可下載「擷取驗證檔案」。
將檔案安全地儲存在要安裝 Bindplane 代理程式的系統中。
取得 Google SecOps 客戶 ID
- 登入 Google SecOps 控制台。
- 依序前往「SIEM 設定」>「設定檔」。
複製並儲存「機構詳細資料」專區中的客戶 ID。
安裝 Bindplane 代理程式
請按照下列操作說明,在 Windows 或 Linux 作業系統上安裝 Bindplane 代理程式。
Windows 安裝
- 以管理員身分開啟「命令提示字元」或「PowerShell」。
執行下列指令:
msiexec /i "https://github.com/observIQ/bindplane-otel-collector/releases/latest/download/observiq-otel-collector.msi" /quiet等待安裝完成。
執行下列指令來驗證安裝:
sc query observiq-otel-collector
服務應顯示為「RUNNING」(執行中)。
安裝 Linux
- 開啟具備根層級或 sudo 權限的終端機。
執行下列指令:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-otel-collector/releases/latest/download/install_unix.sh)" install_unix.sh等待安裝完成。
執行下列指令來驗證安裝:
sudo systemctl status observiq-otel-collector
服務應顯示為啟用 (執行中)。
其他安裝資源
如需其他安裝選項和疑難排解資訊,請參閱 Bindplane 代理程式安裝指南。
設定 Bindplane 代理程式,擷取系統記錄檔並傳送至 Google SecOps
找出設定檔
Linux:
sudo nano /opt/observiq-otel-collector/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
編輯設定檔
將
config.yaml的所有內容替換為下列設定:receivers: tcplog: listen_address: "0.0.0.0:514" exporters: chronicle/admanager_plus: compression: gzip creds_file_path: '<CREDS_FILE_PATH>' customer_id: '<CUSTOMER_ID>' endpoint: malachiteingestion-pa.googleapis.com log_type: ADMANAGER_PLUS raw_log_field: body ingestion_labels: log_source: admanager_plus service: pipelines: logs/admanager_to_chronicle: receivers: - tcplog exporters: - chronicle/admanager_plus請替換下列預留位置:
接收器設定:
- 接收器會使用
tcplog在 TCP 通訊埠 514 上接收系統記錄檔資料。 listen_address:設為0.0.0.0:514,即可在通訊埠 514 上監聽所有介面。
- 接收器會使用
匯出工具設定:
<CREDS_FILE_PATH>:擷取驗證檔案的完整路徑:- Linux:
/opt/observiq-otel-collector/ingestion-auth.json - Windows:
C:\\Program Files\\observIQ OpenTelemetry Collector\\ingestion-auth.json
- Linux:
<CUSTOMER_ID>:上一個步驟中的客戶 ID。endpoint:區域端點網址:- 美國:
malachiteingestion-pa.googleapis.com - 歐洲:
europe-malachiteingestion-pa.googleapis.com - 亞洲:
asia-southeast1-malachiteingestion-pa.googleapis.com - 如需完整清單,請參閱「區域端點」。
- 美國:
log_type:設為 Chronicle 中顯示的確切ADMANAGER_PLUS。ingestion_labels:YAML 格式的選用標籤。
儲存設定檔
編輯完成後,請儲存檔案:
- Linux:依序按下
Ctrl+O、Enter和Ctrl+X - Windows:依序點選「檔案」>「儲存」
重新啟動 Bindplane 代理程式,以套用變更
Linux
如要在 Linux 中重新啟動 Bindplane 代理程式,請執行下列指令:
sudo systemctl restart observiq-otel-collector確認服務正在執行:
sudo systemctl status observiq-otel-collector檢查記錄中是否有錯誤:
sudo journalctl -u observiq-otel-collector -f
Windows
如要在 Windows 中重新啟動 Bindplane 代理程式,請選擇下列任一做法:
以管理員身分使用命令提示字元或 PowerShell:
net stop observiq-otel-collector && net start observiq-otel-collector使用服務控制台:
- 按下
Win+R鍵,輸入services.msc,然後按下 Enter 鍵。 - 找出 observIQ Distro for OpenTelemetry Collector。
- 按一下滑鼠右鍵,然後選取「重新啟動」。
- 按下
確認服務正在執行:
sc query observiq-otel-collector檢查記錄中是否有錯誤:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
設定 ManageEngine ADManager Plus 系統記錄轉送
- 登入 ADManager Plus。
- 前往「管理」分頁。
- 在「系統設定」下方,按一下「整合」。
在「記錄轉送」下方,按一下「系統記錄」。
設定下列欄位:
- Syslog 伺服器:輸入 Syslog 伺服器名稱。輸入 Bindplane 代理程式主機的 IP 位址或主機名稱。
- 「Port」(通訊埠):輸入通訊埠編號。輸入
514。 - 通訊協定:選擇適合轉送記錄的通訊協定,例如 TCP 或 UDP。選取「TCP」TCP。
- 系統記錄標準:選取所需的系統記錄訊息格式,包括 RFC 3164、RFC 5424 或 RawLog。選取「RFC 5424」 (建議選項)。
- 資料格式:輸入資料格式。視環境需求設定資料格式。
按一下「儲存」,儲存設定。
設定完成後,ADManager Plus 會開始將管理動作的記錄轉送至 Bindplane 代理程式,然後由該代理程式將記錄傳送至 Google SecOps。
UDM 對應表
| 記錄欄位 | UDM 對應 | 邏輯 |
|---|---|---|
| ipPhone | event.idm.read_only_udm.additional.fields | 如果 ipPhone != "",則會合併為標籤,並使用「ipPhone」鍵和 ipPhone 中的值 |
| l | event.idm.read_only_udm.additional.fields | 如果 l != "",則合併為索引鍵為「l」的標籤,並從 l 取值 |
| lockoutTime | event.idm.read_only_udm.additional.fields | 如果 lockoutTime != "",則合併為索引鍵為「lockoutTime」的標籤,並從 lockoutTime 取得值 |
| 從以下位置移動 | event.idm.read_only_udm.additional.fields | 如果 Move_From != "",則合併為標籤,並以「Move From」為鍵,以 Move_From 為值 |
| 移至 | event.idm.read_only_udm.additional.fields | 如果 Move_To !=「」,則合併為標籤,並以「移至」為鍵,以 Move_To 為值 |
| msg | event.idm.read_only_udm.additional.fields | 如果 msg != "",則合併為鍵為「member」且值來自 msg 的標籤 |
| sn | event.idm.read_only_udm.additional.fields | 如果 sn != "",則合併為鍵為「sn」且值來自 sn 的標籤 |
| st | event.idm.read_only_udm.additional.fields | 如果 st != "",則合併為索引鍵為「st」且值來自 st 的標籤 |
| 範本名稱: | event.idm.read_only_udm.additional.fields | 如果 Template_Name != "",則合併為標籤,索引鍵為「範本名稱」,值來自 Template_Name |
| 狀態 | event.idm.read_only_udm.metadata.description | 如果狀態 != "",則取自狀態的值 |
| 時間 | event.idm.read_only_udm.metadata.event_timestamp | 如果時間 != "",則從時間轉換為時間戳記格式 |
| event.idm.read_only_udm.metadata.event_type | 衍生:if has_principal_user == "true" then "USER_UNCATEGORIZED"; else if has_principal == "true" then "STATUS_UPDATE"; else "GENERIC_EVENT" | |
| TechnicianName | event.idm.read_only_udm.metadata.product_event_type | 如果 TechnicianName != "",則取自 TechnicianName 的值 |
| event.idm.read_only_udm.metadata.product_name | 設為「ADMANAGER_PLUS」 | |
| event.idm.read_only_udm.metadata.vendor_name | 設為「ADMANAGER_PLUS」 | |
| 網域名稱 | event.idm.read_only_udm.principal.administrative_domain | 如果 Domain_Name != "",則取自 Domain_Name 的值 |
| 主機名稱 | event.idm.read_only_udm.principal.asset.hostname | 如果主機名稱 != "",則取自主機名稱的值 |
| 郵件 | event.idm.read_only_udm.principal.email | 如果郵件 !=「」,則取自郵件的值 |
| 主機名稱 | event.idm.read_only_udm.principal.hostname | 如果主機名稱 != "",則取自主機名稱的值 |
| co | event.idm.read_only_udm.principal.location.city | 如果 co != "",則取自 co 的值 |
| 工作 | event.idm.read_only_udm.principal.resource.name | 如果 Task != "",則取自 Task 的值 |
| wWWHomePage | event.idm.read_only_udm.principal.url | 如果 wWWHomePage != "",則取自 wWWHomePage 的值 |
| 密碼類型 | event.idm.read_only_udm.principal.user.attribute.labels | 如果 Password_Type !=「」,則會合併為標籤,並以「Password Type」做為鍵,以 Password_Type 做為值 |
| 國家/地區代碼 | event.idm.read_only_udm.principal.user.attribute.labels | 如果 countryCode != "",則合併為標籤,索引鍵為「countryCode」,值來自 countryCode |
| 密碼 | event.idm.read_only_udm.principal.user.attribute.labels | 如果密碼 !=「」,則合併為標籤,索引鍵為「password」,值來自密碼 |
| postalCode | event.idm.read_only_udm.principal.user.attribute.labels | 如果 postalCode != "",則會合併為標籤,並使用「postalCode」鍵和來自 postalCode 的值 |
| primaryGroupID | event.idm.read_only_udm.principal.user.attribute.labels | 如果 primaryGroupID != "",則會合併為標籤,並以「primaryGroupID」做為鍵,以 primaryGroupID 做為值 |
| userAccountControl | event.idm.read_only_udm.principal.user.attribute.labels | 如果 userAccountControl != "",則合併為標籤,並以「userAccountControl」做為鍵,以 userAccountControl 做為值 |
| userPrincipalName | event.idm.read_only_udm.principal.user.attribute.labels | 如果 userPrincipalName != "",則會合併為索引鍵為「userPrincipalName」的標籤,並以 userPrincipalName 做為值 |
| company | event.idm.read_only_udm.principal.user.company_name | 如果公司 !=「」,則取自公司的值 |
| 部門 | event.idm.read_only_udm.principal.user.department | 如果部門 != "",則與部門合併 |
| givenName | event.idm.read_only_udm.principal.user.first_name | 如果 givenName != "",則取自 givenName 的值 |
| physicalDeliveryOfficeName | event.idm.read_only_udm.principal.user.office_address.name | 如果 physicalDeliveryOfficeName != "",則取自 physicalDeliveryOfficeName 的值 |
| streetAddress | event.idm.read_only_udm.principal.user.personal_address.name | 如果 streetAddress != "",則取自 streetAddress 的值 |
| homePhone | event.idm.read_only_udm.principal.user.phone_numbers | 如果 homePhone != "",則與 homePhone 合併 |
| 使用者名稱 | event.idm.read_only_udm.principal.user.user_display_name | 如果 User_Name != "",則取自 User_Name;否則取自 Object_Name (如果 Object_Name != "") |
| sAMAccountName | event.idm.read_only_udm.principal.user.userid | 如果 sAMAccountName !=「」,則取自 sAMAccountName 的值 |
| 行動 | event.idm.read_only_udm.security_result.action_details | 如果 ACTION !=「」,則取自 ACTION 的值 |
| 說明 | event.idm.read_only_udm.security_result.description | 如果說明 !=「」,則取自說明的值 |
| 容器名稱 | event.idm.read_only_udm.security_result.detection_fields | 衍生自 container_Name grok:合併為標籤,鍵為「Container_Name_DC_value1」,值來自 dc_label_1 (如果 dc_label_1 != "") |
| 容器名稱 | event.idm.read_only_udm.security_result.detection_fields | 衍生自 container_Name grok:合併為標籤,鍵為「Container_Name_DC_value2」,值來自 dc_label_2 (如果 dc_label_2 != "") |
| 容器名稱 | event.idm.read_only_udm.security_result.detection_fields | 衍生自 container_Name grok:合併為標籤,鍵為「Container_Name_OU_value1」,值來自 ou_label_1 (如果 ou_label_1 != "") |
| 容器名稱 | event.idm.read_only_udm.security_result.detection_fields | 衍生自 container_Name grok:合併為標籤,鍵為「Container_Name_OU_value2」,值來自 ou_label_2 (如果 ou_label_2 != "") |
| 容器名稱 | event.idm.read_only_udm.security_result.detection_fields | 衍生自 container_Name grok:合併為標籤,鍵為「Container_Name_OU_value3」,值來自 ou_label_3 (如果 ou_label_3 != "") |
| 主要群組 | event.idm.read_only_udm.security_result.detection_fields | 衍生自 Primary_Group grok:合併為標籤,鍵為「Primary_Group_CN_value1」,值來自 cn_label_1 (如果 cn_label_1 != "") |
| 主要群組 | event.idm.read_only_udm.security_result.detection_fields | 衍生自 Primary_Group grok:合併為標籤,鍵為「Primary_Group_CN_value2」,值來自 cn_label_2 (如果 cn_label_2 != "") |
| 主要群組 | event.idm.read_only_udm.security_result.detection_fields | 衍生自 Primary_Group grok:合併為標籤,鍵為「Primary_Group_DC_value1」,值來自 primary_dc_label_1 (如果 primary_dc_label_1 != "") |
| 主要群組 | event.idm.read_only_udm.security_result.detection_fields | 衍生自 Primary_Group grok:合併為標籤,鍵為「Primary_Group_DC_value2」,值來自 primary_dc_label_2 (如果 primary_dc_label_2 != "") |
| accountExpires | event.idm.read_only_udm.security_result.detection_fields | 如果 accountExpires !=「」,則會合併為標籤,並以「accountExpires」做為鍵,以 accountExpires 做為值 |
| 管理員 | event.idm.read_only_udm.security_result.detection_fields | 衍生自管理員 grok:如果 manager_cn_value1 != "",則合併為標籤,鍵為「manager_cn_value1」,值來自 manager_cn_value1 |
| 管理員 | event.idm.read_only_udm.security_result.detection_fields | 衍生自管理員 grok:合併為標籤,鍵為「manager_dc_value1」,值來自 manager_dc_value1 (如果 manager_dc_value1 != "") |
| 管理員 | event.idm.read_only_udm.security_result.detection_fields | 衍生自管理員 grok:合併為標籤,鍵為「manager_dc_value2」,值來自 manager_dc_value2 (如果 manager_dc_value2 != "") |
| 管理員 | event.idm.read_only_udm.security_result.detection_fields | 衍生自管理員 grok:合併為標籤,鍵為「manager_ou_value1」,值來自 manager_ou_value1 (如果 manager_ou_value1 != "") |
| 管理員 | event.idm.read_only_udm.security_result.detection_fields | 衍生自管理員 grok:合併為標籤,鍵為「manager_ou_value2」,值來自 manager_ou_value2 (如果 manager_ou_value2 != "") |
| 管理員 | event.idm.read_only_udm.security_result.detection_fields | 衍生自管理員 grok:合併為標籤,鍵為「manager_ou_value3」,值來自 manager_ou_value3 (如果 manager_ou_value3 != "") |
| pwdLastSet | event.idm.read_only_udm.security_result.detection_fields | 如果 pwdLastSet != "",則會合併為標籤,並使用鍵「pwdLastSet」和來自 pwdLastSet 的值 |
| ModuleName | event.idm.read_only_udm.target.resource.name | 如果 ModuleName != "",則取自 ModuleName 的值 |
需要其他協助嗎?向社群成員和 Google SecOps 專業人員尋求答案。