收集 Workday HCM 記錄
本文說明如何使用第三方 API 設定資訊提供,將 Workday HCM 記錄擷取至 Google Security Operations。
這個剖析器會從 JSON 格式的記錄檔中擷取 Workday HCM 使用者資料。可處理各種資料轉換,包括重新命名欄位、合併巢狀物件、剖析日期,以及填入使用者屬性、雇用詳細資料和組織結構的 UDM 欄位。
事前準備
請確認您已完成下列事前準備事項:
- Google SecOps 執行個體。
- 具備 Workday 的特殊權限,且擁有安全管理員或同等權限。
設定 Workday API 驗證
建立整合系統使用者 (ISU)
- 登入 Workday,並具備管理權限。
- 在搜尋列中輸入「Create Integration System User」,然後選取這項工作。
- 輸入「使用者名稱」 (例如
ISU_SecOps_HCM)。 - 設定「密碼」。
- 將「工作階段逾時分鐘數」設為
0,避免 ISU 超時。 - 啟用「Do Not Allow UI Sessions」(不允許 UI 工作階段),限制 UI 登入,提升安全性。
- 前往「維護密碼規則」工作。
- 將整合系統使用者新增至「System Users exempt from password expiration」(免除密碼到期限制的系統使用者) 欄位。
建立整合安全性群組
- 在搜尋列中輸入「Create Security Group」,然後選取這項工作。
- 找到「Type of Tenanted Security Group」(租戶安全群組類型) 欄位,然後選取「Integration System Security Group (Unconstrained)」(整合系統安全群組 (無限制))。
- 提供安全性群組的名稱 (例如
ISG_SecOps_HCM)。 - 按一下 [確定]。
- 按一下新建立安全性群組的「編輯」。
- 將上一步的整合系統使用者指派給安全群組。
- 按一下 [完成]。
授予安全性群組網域存取權
Google SecOps 資訊動態會從四個 Workday REST API 端點擷取資料。每個端點都需要授予整合安全性群組特定的網域安全政策權限。
- 在搜尋列中輸入「Maintain Permissions for Security Group」,然後選取這項工作。
- 從「來源安全群組」清單中,選擇您建立的安全群組 (例如
ISG_SecOps_HCM)。 - 按一下 [確定]。
- 前往「網域安全政策權限」。
為下列每個網域新增 GET 存取權:
API 端點 必要網域安全性政策 /workers- 員工名單、個人資料和目前員工配置Worker Data: Public Worker Reports、Worker Data: Current Staffing Information、Person Data: Work Contact Information/workers/{id}/timeOffEntries- 休假餘額Worker Data: Time Off (Time Off Balances)、Worker Data: Time Off (Time Off Balances Manager View)/workers/{id}/history- 工作人員配置記錄Worker Data: Current Staffing Information/supervisoryOrganizations- 組織結構Worker Data: Organization Information按一下 [確定]。
按一下「完成」儲存變更。
啟用安全性政策變更
- 在搜尋列中輸入「Activate Pending Security Policy Changes」(啟用待處理的安全性政策變更),然後選取這項工作。
- 在註解欄位中輸入變更原因 (例如
Granting API access for Google SecOps HCM integration)。 - 按一下 [確定]。
- 選取「確認」,然後按一下「確定」。
註冊 API 用戶端以進行整合
- 在搜尋列中輸入「Register API Client for Integrations」,然後選取該項目。
- 點選「建立」。
請提供下列設定詳細資料:
- 用戶端名稱:輸入名稱 (例如
Google SecOps HCM Client)。 - 系統使用者:選取您建立的整合系統使用者 (例如
ISU_SecOps_HCM)。 範圍:選取下列範圍:
範圍 適用於 人事 /workers和/workers/{id}/history端點聯絡資訊 /workers傳回的公司電子郵件地址和電話號碼欄位 (用於 UDM 關聯)休假和請假 /workers/{id}/timeOffEntries個端點機構和角色 /supervisoryOrganizations個端點無法設定租戶 任何 OAuth 2.0 API 用戶端 (系統層級整合和權杖輪替)
- 用戶端名稱:輸入名稱 (例如
按一下 [儲存]。
按一下 [確定]。
立即複製並儲存「用戶端 ID」和「用戶端密鑰」。
產生 OAuth 2.0 更新權杖
- 在搜尋列中輸入「Manage Refresh Tokens for Integrations」,然後選取該選項。
- 按一下「產生新的重新整理權杖」。
- 在「Workday Account」(Workday 帳戶) 欄位中,搜尋並選取整合系統使用者 (例如
ISU_SecOps_HCM)。 - 選取您建立的 API 用戶端,然後按一下「確定」。
- 複製並儲存「Refresh Token」。
取得 API 端點網址
- 在搜尋列中輸入「View API Clients」,然後選取該項目。
- 在「整合的 API 用戶端」下方,找出您建立的用戶端 (例如
Google SecOps HCM Client)。 複製並儲存下列詳細資料:
- 權杖端點:取得存取權杖的網址 (例如
https://wd2-impl-services1.workday.com/ccx/oauth2/YOUR_TENANT/token)。 - Workday REST API 端點:API 呼叫的基準網址 (例如
https://wd2-impl-services1.workday.com/ccx/api/v1/YOUR_TENANT)。
- 權杖端點:取得存取權杖的網址 (例如
產生 OAuth 存取權杖
使用 curl 或類似的 HTTP 用戶端,將 POST 要求傳送至權杖端點:
curl -X POST "https://HOSTNAME/ccx/oauth2/TENANT/token" \
-d "grant_type=refresh_token" \
-d "client_id=YOUR_CLIENT_ID" \
-d "client_secret=YOUR_CLIENT_SECRET" \
-d "refresh_token=YOUR_REFRESH_TOKEN"
這會傳回存取權杖 (例如 "access_token": "abcd1234")。請複製並儲存存取權杖。
驗證 API 存取權
設定動態饋給前,請先確認 ISU 具有主要端點的必要權限。將變數替換為實際值:
TOKEN="your-access-token"
HOST="your-workday-host"
TENANT="your-tenant"
# Test 1: Workers (should return worker list)
curl -s -o /dev/null -w "%{http_code}" \
-H "Authorization: Bearer $TOKEN" \
"https://$HOST/ccx/api/v1/$TENANT/workers?limit=1"
# Test 2: Time off entries (replace WORKER_ID with an ID from Test 1)
curl -s -o /dev/null -w "%{http_code}" \
-H "Authorization: Bearer $TOKEN" \
"https://$HOST/ccx/api/v1/$TENANT/workers/WORKER_ID/timeOffEntries"
# Test 3: Worker history (replace WORKER_ID with an ID from Test 1)
curl -s -o /dev/null -w "%{http_code}" \
-H "Authorization: Bearer $TOKEN" \
"https://$HOST/ccx/api/v1/$TENANT/workers/WORKER_ID/history"
# Test 4: Supervisory organizations
curl -s -o /dev/null -w "%{http_code}" \
-H "Authorization: Bearer $TOKEN" \
"https://$HOST/ccx/api/v1/$TENANT/supervisoryOrganizations"
每項測試都應傳回 HTTP 狀態 200。如果任何端點傳回 403,請參閱下方的「疑難排解」一節。
在 Google SecOps 中設定資訊提供,擷取 Workday HCM 資料
設定動態饋給
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「新增動態消息」。
- 在下一個頁面中,按一下「設定單一動態饋給」。
- 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如
Workday HCM)。 - 選取「第三方 API」做為「來源類型」。
- 選取「Workday」做為「記錄類型」。
- 點選「下一步」。
設定動態饋給參數
指定下列輸入參數的值:
API 主機名稱:Workday REST API 端點的完整網域名稱 (例如
wd2-impl-services1.workday.com)。租戶:Workday REST API 端點的最後一個路徑元素,用於識別 Workday 執行個體。
存取權杖:上一節產生的 OAuth 存取權杖。
進階選項:
- 資產命名空間:資產命名空間。
- 擷取標籤:要套用至這個動態饋給事件的標籤。
- 點選「下一步」。
- 在「Finalize」(完成) 畫面中檢查新的動態饋給設定,然後按一下「Submit」(提交)。
疑難排解
特定端點出現 403 Forbidden 錯誤
如果資訊提供回報錯誤,或驗證 curl 指令針對特定端點傳回 403,表示整合系統使用者缺少權限。
| 失敗的端點 | 修正 |
|---|---|
/workers/{id}/timeOffEntries |
為 Worker Data: Time Off (Time Off Balances) 和 Worker Data: Time Off (Time Off Balances Manager View) 網域新增 GET 存取權。將「Time Off and Leave」(休假和請假) 範圍新增至 API 用戶端。 |
/workers/{id}/history |
為 Worker Data: Historical Staffing Information 網域新增 GET 存取權。確認「Staffing」範圍已指派給 API 用戶端。 |
/supervisoryOrganizations |
為 Manage: Supervisory Organization 或 View: Supervisory Organization 網域新增 GET 存取權。將「Organizations and Roles」(機構和角色) 範圍新增至 API 用戶端。 |
變更權限後:
- 在 Workday 中執行「Activate Pending Security Policy Changes」。
- 如果您在 API 用戶端中新增了範圍,請透過「Manage Refresh Tokens for Integrations」產生新的更新權杖,然後產生新的存取權杖。
- 如果存取權杖有變更,請更新動態饋給設定。
驗證錯誤
- 未授權 401:存取權杖已過期。使用更新權杖產生新權杖,並更新動態饋給。
- 無效的用戶端:請確認用戶端 ID 和用戶端密鑰正確無誤。
- 更新權杖無效:更新權杖可能已遭撤銷。透過「Manage Refresh Tokens for Integrations」(管理整合的重新整理權杖) 產生新的權杖。
UDM 對應表
| 記錄欄位 | UDM 對應 | 邏輯 |
|---|---|---|
entity_host_name |
entity.asset.hostname |
直接對應 |
location.descriptor |
entity.location.city |
直接對應 |
AU_EFFECTIVE_DATE |
entity.resource.attribute.labels.value |
直接對應 |
COMPANY_EFFECTIVE_DATE |
entity.resource.attribute.labels.value |
直接對應 |
ORIG_HIRE_DT |
entity.resource.attribute.labels.value |
直接對應 |
STATUS_EFFECTIVE_DATE |
entity.resource.attribute.labels.value |
直接對應 |
href |
entity.url |
直接對應 |
CONT_START_DTE |
entity.user.attribute.labels.value |
直接對應 |
EMPL_TYPE |
entity.user.attribute.labels.value |
直接對應 |
EXEC_CD |
entity.user.attribute.labels.value |
直接對應 |
EXEC_DESCR |
entity.user.attribute.labels.value |
直接對應 |
HR_Status |
entity.user.attribute.labels.value |
直接對應 |
Is_Active |
entity.user.attribute.labels.value |
直接對應 |
Is_Manager |
entity.user.attribute.labels.value |
直接對應 |
JOB_CODE |
entity.user.attribute.labels.value |
直接對應 |
ORG_CD |
entity.user.attribute.labels.value |
直接對應 |
ORG_Container |
entity.user.attribute.labels.value |
直接對應 |
ORG_Container_Name |
entity.user.attribute.labels.value |
直接對應 |
PER_Status |
entity.user.attribute.labels.value |
直接對應 |
POSITION_NBR |
entity.user.attribute.labels.value |
直接對應 |
PS_ELID |
entity.user.attribute.labels.value |
直接對應 |
REG_TEMP |
entity.user.attribute.labels.value |
直接對應 |
WB_LOGON_ID |
entity.user.attribute.labels.value |
直接對應 |
ORG_DESCR |
entity.user.department |
已合併 |
primarySupervisoryOrganization.descriptor |
entity.user.department |
已合併 |
Email |
entity.user.email_addresses |
已合併 |
Work_Email |
entity.user.email_addresses |
已合併 |
primaryWorkEmail |
entity.user.email_addresses |
已合併 |
EMPLID |
entity.user.employee_id |
直接對應 |
Employee_ID |
entity.user.employee_id |
直接對應 |
First_Name |
entity.user.first_name |
直接對應 |
Legal_Name_First_Name |
entity.user.first_name |
直接對應 |
HIRE_DATE |
entity.user.hire_date |
已剖析為 RFC 3339 |
Hire_Date |
entity.user.hire_date |
已剖析為 RFC 3339 |
Last_Name |
entity.user.last_name |
直接對應 |
Legal_Name_Last_Name |
entity.user.last_name |
直接對應 |
gopher-supervisor.primaryWorkEmail |
entity.user.managers.email_addresses |
已合併 |
Reports_To_EMPLID |
entity.user.managers.employee_id |
直接對應 |
gopher-supervisor.id |
entity.user.managers.product_object_id |
已重新命名/對應 |
Reports_To_Name |
entity.user.managers.user_display_name |
直接對應 |
gopher-supervisor.descriptor |
entity.user.managers.user_display_name |
已重新命名/對應 |
primaryWorkPhone |
entity.user.phone_numbers |
已合併 |
Termination_Date |
entity.user.termination_date |
已剖析為 RFC 3339 |
timeoff.descriptor |
entity.user.time_off.description |
直接對應 |
timeoff.date |
entity.user.time_off.interval.start_time |
已剖析為 RFC 3339 |
HR_JOB_TITLE |
entity.user.title |
直接對應 |
Job_Profile |
entity.user.title |
直接對應 |
businessTitle |
entity.user.title |
直接對應 |
Full_Name |
entity.user.user_display_name |
直接對應 |
descriptor |
entity.user.user_display_name |
直接對應 |
udm_metadata |
metadata |
已重新命名/對應 |
metadata_entity_type |
metadata.entity_type |
直接對應 |
actual_completed_date_and_time |
metadata.event_timestamp |
已剖析為 MM/dd/yyyy HH:mm:ss a |
body.time |
metadata.event_timestamp |
已剖析為 UNIX_MS |
requestTime |
metadata.event_timestamp |
已剖析為 RFC 3339 |
timestamp |
metadata.event_timestamp |
已剖析為 RFC 3339 |
EMPLID |
metadata.product_entity_id |
直接對應 |
Employee_ID |
metadata.product_entity_id |
直接對應 |
id |
metadata.product_entity_id |
直接對應 |
Source_Name |
metadata.product_name |
直接對應 |
userAgent |
network.http.parsed_user_agent |
已重新命名/對應 |
userAgent |
network.http.user_agent |
直接對應 |
sessionId |
network.session_id |
直接對應 |
ipAddress |
principal.ip |
已合併 |
taskId |
principal.process.pid |
直接對應 |
activityAction_label |
principal.resource.attribute.labels |
已合併 |
body.event.Submitted_By |
principal.user.userid |
直接對應 |
body.event.Response_Message |
security_result.action_details |
直接對應 |
body.event.Messages |
security_result.description |
直接對應 |
actual_start_date_and_time_label |
security_result.detection_fields |
已合併 |
background_process_is_running_label |
security_result.detection_fields |
已合併 |
by_person_label |
security_result.detection_fields |
已合併 |
created_from_trigger_label |
security_result.detection_fields |
已合併 |
items_processed_label |
security_result.detection_fields |
已合併 |
percent_complete_label |
security_result.detection_fields |
已合併 |
processing_time_label |
security_result.detection_fields |
已合併 |
scheduled_start_date_and_time_label |
security_result.detection_fields |
已合併 |
sent_on_label |
security_result.detection_fields |
已合併 |
total_duration_label |
security_result.detection_fields |
已合併 |
body.event.Integration_Event_Status |
security_result.summary |
直接對應 |
body.event.Integration_System |
target.application |
直接對應 |
target_data.id |
target.resource.product_object_id |
直接對應 |
deviceType |
target.resource.resource_subtype |
直接對應 |
deviceType |
target.resource.type |
已對應:(?i)(Desktop/Laptop/Mobile) → DEVICE |
user_display_name |
target.user.user_display_name |
直接對應 |
systemAccount |
target.user.userid |
直接對應 |
| 不適用 | entity.resource.attribute.labels.key |
常數:COMPANY_EFFECTIVE_DATE |
| 不適用 | entity.user.attribute.labels.key |
常數:ORG_Container |
| 不適用 | metadata.product_name |
常數:HCM |
| 不適用 | metadata.vendor_name |
常數:Workday |
| 不適用 | target.resource.type |
常數:DEVICE |
變更記錄
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。