איסוף יומנים של Workday HCM

נתמך ב:

במאמר הזה מוסבר איך להטמיע יומני רישום של Workday HCM ב-Google Security Operations באמצעות הגדרת פיד דרך Third Party API.

הכלי לניתוח מחלץ נתוני משתמשים מ-Workday HCM מיומנים בפורמט JSON. הכלי מטפל בהמרות שונות של נתונים, כולל שינוי שמות של שדות, מיזוג של אובייקטים מוטמעים, ניתוח תאריכים ואכלוס של שדות UDM במאפייני משתמש, בפרטי העסקה ובמבנה הארגוני.

לפני שמתחילים

חשוב לוודא שמתקיימות דרישות הסף הבאות:

  • מופע של Google SecOps.
  • גישה עם הרשאות מיוחדות ל-Workday עם Security Administrator או הרשאות שוות ערך.

הגדרת אימות של Workday API

יצירת משתמש מערכת שילוב (ISU)

  1. נכנסים ל-Workday עם הרשאות אדמין.
  2. בסרגל החיפוש, כותבים Create Integration System User ובוחרים את המשימה.
  3. מזינים שם משתמש (לדוגמה, ISU_SecOps_HCM).
  4. מגדירים סיסמה.
  5. מגדירים את Session Timeout Minutes (הזמן הקצוב לתפוגה של סשן בדקות) לערך 0 כדי למנוע את התפוגה של ISU.
  6. מפעילים את האפשרות Do Not Allow UI Sessions כדי לשפר את האבטחה על ידי הגבלת הכניסות לממשק המשתמש.
  7. עוברים למשימה Maintain Password Rules (תחזוקה של כללי סיסמאות).
  8. מוסיפים את משתמש המערכת של השילוב לשדה משתמשי מערכת שפטורים מתפוגת סיסמה.

יצירת קבוצת אבטחה לשילוב

  1. בסרגל החיפוש, כותבים Create Security Group ובוחרים את המשימה.
  2. מאתרים את השדה Type of Tenanted Security Group (סוג קבוצת אבטחה בדייר) ובוחרים באפשרות Integration System Security Group (Unconstrained) (קבוצת אבטחה של מערכת שילוב (ללא הגבלות)).
  3. נותנים שם לקבוצת האבטחה (לדוגמה, ISG_SecOps_HCM).
  4. לוחצים על OK.
  5. לוחצים על עריכה ליד קבוצת האבטחה החדשה.
  6. מקצים את משתמש המערכת לשילוב מהשלב הקודם לקבוצת האבטחה.
  7. לוחצים על סיום.

הענקת גישה לדומיין לקבוצת האבטחה

הפיד של Google SecOps מאחזר נתונים מארבע נקודות קצה ל-API בארכיטקטורת REST של Workday. לכל נקודת קצה צריך להעניק הרשאות ספציפיות של מדיניות אבטחת דומיין לקבוצת האבטחה של השילוב.

  1. בסרגל החיפוש, מקלידים Maintain Permissions for Security Group ובוחרים את המשימה.
  2. ברשימה Source Security Group (קבוצת אבטחה של מקור), בוחרים את קבוצת האבטחה שיצרתם (לדוגמה, ISG_SecOps_HCM).
  3. לוחצים על OK.
  4. עוברים אל הרשאות במדיניות האבטחה של הדומיין.
  5. מוסיפים גישת 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
  6. לוחצים על OK.

  7. לוחצים על סיום כדי לשמור את השינויים.

הפעלת שינויים במדיניות האבטחה

  1. בסרגל החיפוש, כותבים Activate Pending Security Policy Changes ובוחרים את המשימה.
  2. בשדה ההערה, כותבים את הסיבה לשינוי (לדוגמה, Granting API access for Google SecOps HCM integration).
  3. לוחצים על OK.
  4. לוחצים על אישור ואז על אישור.

רישום לקוח API לשילובים

  1. בסרגל החיפוש, מקלידים Register API Client for Integrations ובוחרים באפשרות הזו.
  2. לוחצים על יצירה.
  3. מזינים את פרטי ההגדרה הבאים:

    • שם הלקוח: מזינים שם (לדוגמה, Google SecOps HCM Client).
    • System User: בוחרים את משתמש מערכת השילוב שיצרתם (לדוגמה, ISU_SecOps_HCM).
    • היקף: בוחרים את ההיקפים הבאים:

      היקף חובה עבור
      Staffing נקודות הקצה /workers ו-/workers/{id}/history
      פרטים ליצירת קשר שדות של כתובת אימייל ומספר טלפון בעבודה שמוחזרים על ידי /workers (משמשים להתאמה של UDM)
      חופשה /workers/{id}/timeOffEntries נקודת קצה
      ארגונים ותפקידים /supervisoryOrganizations נקודת קצה
      Tenant Non-Configurable כל לקוח API של OAuth 2.0 (שילוב ברמת המערכת ורוטציה של אסימונים)
  4. לוחצים על Save.

  5. לוחצים על OK.

  6. מעתיקים ושומרים מיד את מזהה הלקוח ואת הסוד של הלקוח.

יצירת טוקן רענון של OAuth 2.0

  1. בסרגל החיפוש, מקלידים Manage Refresh Tokens for Integrations (ניהול טוקנים לרענון שילובים) ובוחרים את האפשרות.
  2. לוחצים על יצירת טוקן רענון חדש.
  3. בשדה Workday Account (חשבון Workday), מחפשים את חשבון ה-ISU ובוחרים אותו (לדוגמה, ISU_SecOps_HCM).
  4. בוחרים את לקוח ה-API שיצרתם ולוחצים על OK.
  5. מעתיקים את טוקן הרענון ושומרים אותו.

קבלת כתובות URL של נקודות קצה ל-API

  1. בסרגל החיפוש, מקלידים View API Clients (הצגת לקוחות API) ובוחרים באפשרות הזו.
  2. בקטע API Clients for Integrations (לקוחות API לשילובים), מאתרים את הלקוח שיצרתם (לדוגמה, Google SecOps HCM Client).
  3. מעתיקים ושומרים את הפרטים הבאים:

    • נקודת הקצה של הטוקן: כתובת ה-URL לקבלת טוקן גישה (לדוגמה, https://wd2-impl-services1.workday.com/ccx/oauth2/YOUR_TENANT/token).
    • Workday REST API Endpoint: כתובת ה-URL הבסיסית לקריאות API בארכיטקטורת REST (לדוגמה, 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

הגדרת הפיד

  1. עוברים אל SIEM Settings > Feeds (הגדרות SIEM > פידים).
  2. לוחצים על הוספת פיד חדש.
  3. בדף הבא, לוחצים על הגדרת פיד יחיד.
  4. בשדה שם הפיד, מזינים שם לפיד (לדוגמה, Workday HCM).
  5. בוחרים באפשרות Third Party API (API של צד שלישי) בתור Source type (סוג המקור).
  6. בוחרים באפשרות Workday בתור סוג היומן.
  7. לוחצים על הבא.

הגדרת פרמטרים של פיד

מציינים ערכים לפרמטרים הבאים של הקלט:

  • API Hostname (שם המארח של ה-API): שם דומיין שמוגדר במלואו של נקודת קצה ל-API בארכיטקטורת REST של Workday (לדוגמה, wd2-impl-services1.workday.com).

  • Tenant: רכיב הנתיב האחרון של נקודת קצה ל-API בארכיטקטורת REST של Workday שמזהה את מופע Workday שלכם.

  • אסימון גישה: אסימון הגישה ל-OAuth שנוצר בקטע הקודם.

אפשרויות מתקדמות:

  1. לוחצים על הבא.
  2. בודקים את ההגדרות של הפיד החדש במסך סיום ולוחצים על שליחה.

פתרון בעיות

‫403 Forbidden (הגישה נחסמה) בנקודות קצה ספציפיות

אם הפיד מדווח על שגיאות או שפקודות ה-curl לאימות מחזירות 403 לנקודות קצה ספציפיות, סימן שלמשתמש של מערכת השילוב חסרות הרשאות.

נקודת קצה שנכשלה תיקון
/workers/{id}/timeOffEntries מוסיפים גישת GET לדומיינים Worker Data: Time Off (Time Off Balances) ו-Worker Data: Time Off (Time Off Balances Manager View). מוסיפים את היקף הגישה Time Off and Leave ללקוח ה-API.
/workers/{id}/history הוספת גישת GET לדומיין Worker Data: Historical Staffing Information. מוודאים שההיקף Staffing מוקצה ללקוח ה-API.
/supervisoryOrganizations מוסיפים גישת GET לדומיין Manage: Supervisory Organization או View: Supervisory Organization. מוסיפים את היקף ההרשאות Organizations and Roles ללקוח ה-API.

אחרי שמבצעים שינויים בהרשאות:

  1. מריצים את האפשרות Activate Pending Security Policy Changes (הפעלת שינויים במדיניות האבטחה) ב-Workday.
  2. אם הוספתם היקפי גישה חדשים ללקוח ה-API, צריך ליצור אסימון רענון חדש באמצעות ניהול אסימוני רענון לשילובים ואז ליצור אסימון גישה חדש.
  3. אם אסימון הגישה השתנה, צריך לעדכן את הגדרות הפיד.

שגיאות אימות

  • 401 Unauthorized: תוקף אסימון הגישה פג. יוצרים טוקן חדש באמצעות טוקן הרענון ומעדכנים את הפיד.
  • לקוח לא תקין: צריך לוודא שמזהה הלקוח והסוד של הלקוח נכונים.
  • Invalid refresh token: יכול להיות שאסימון הרענון בוטל. אפשר ליצור טוקן חדש באמצעות ניהול טוקנים לרענון שילובים.

טבלת מיפוי 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.