Workday HCM-Logs erfassen

Unterstützt in:

In diesem Dokument wird beschrieben, wie Sie Workday HCM-Logs in Google Security Operations aufnehmen, indem Sie einen Feed über die Drittanbieter-API einrichten.

Der Parser extrahiert Workday HCM-Nutzerdaten aus JSON-formatierten Logs. Es werden verschiedene Datentransformationen vorgenommen, darunter das Umbenennen von Feldern, das Zusammenführen verschachtelter Objekte, das Parsen von Datumsangaben und das Einfügen von UDM-Feldern für Nutzerattribute, Beschäftigungsdetails und die Organisationsstruktur.

Hinweis

Prüfen Sie, ob die folgenden Voraussetzungen erfüllt sind:

  • Eine Google SecOps-Instanz.
  • Privilegierter Zugriff auf Workday mit der Rolle Security Administrator oder entsprechenden Berechtigungen.

Workday-API-Authentifizierung konfigurieren

Integrationssystemnutzer erstellen

  1. Melden Sie sich mit Administratorberechtigungen in Workday an.
  2. Geben Sie in der Suchleiste Create Integration System User (Integrationssystemnutzer erstellen) ein und wählen Sie die Aufgabe aus.
  3. Geben Sie einen Nutzernamen ein, z. B. ISU_SecOps_HCM.
  4. Legen Sie ein Passwort fest.
  5. Legen Sie Session Timeout Minutes (Zeitüberschreitung für Sitzungen in Minuten) auf 0 fest, um zu verhindern, dass die ISU eine Zeitüberschreitung auslöst.
  6. Aktivieren Sie UI-Sitzungen nicht zulassen, um die Sicherheit zu erhöhen, indem Sie UI-Anmeldungen einschränken.
  7. Rufen Sie die Aufgabe Passwortregeln verwalten auf.
  8. Fügen Sie den Integrationssystemnutzer dem Feld Systemnutzer, die von der Passwortablaufrichtlinie ausgenommen sind hinzu.

Sicherheitsgruppe für die Integration erstellen

  1. Geben Sie in der Suchleiste Sicherheitsgruppe erstellen ein und wählen Sie die Aufgabe aus.
  2. Suchen Sie das Feld Type of Tenanted Security Group (Typ der Mandantensicherheitsgruppe) und wählen Sie Integration System Security Group (Unconstrained) (Sicherheitsgruppe für Integrationssystem (uneingeschränkt)) aus.
  3. Geben Sie einen Namen für die Sicherheitsgruppe an, z. B. ISG_SecOps_HCM.
  4. Klicken Sie auf OK.
  5. Klicken Sie bei der neu erstellten Sicherheitsgruppe auf Bearbeiten.
  6. Weisen Sie der Sicherheitsgruppe den Integrationssystemnutzer aus dem vorherigen Schritt zu.
  7. Klicken Sie auf Fertig.

Der Sicherheitsgruppe Zugriff auf die Domain gewähren

Der Google SecOps-Feed ruft Daten von vier Workday REST API-Endpunkten ab. Für jeden Endpunkt müssen der Sicherheitsgruppe der Integration bestimmte Berechtigungen für die Domain-Sicherheitsrichtlinie gewährt werden.

  1. Geben Sie in der Suchleiste Maintain Permissions for Security Group (Berechtigungen für Sicherheitsgruppe verwalten) ein und wählen Sie die Aufgabe aus.
  2. Wählen Sie die von Ihnen erstellte Sicherheitsgruppe (z. B. ISG_SecOps_HCM) aus der Liste Source Security Group (Quellsicherheitsgruppe) aus.
  3. Klicken Sie auf OK.
  4. Rufen Sie Berechtigungen für die Domain-Sicherheitsrichtlinie auf.
  5. Fügen Sie für jede der folgenden Domains GET-Zugriff hinzu:

    API-Endpunkt Erforderliche Domainsicherheitsrichtlinien
    /workers – Worker-Liste, Profile und aktuelle Besetzung Worker Data: Public Worker Reports, Worker Data: Current Staffing Information, Person Data: Work Contact Information
    /workers/{id}/timeOffEntries – Urlaubs- und Freizeitausgleich Worker Data: Time Off (Time Off Balances), Worker Data: Time Off (Time Off Balances Manager View)
    /workers/{id}/history – Personalverlauf Worker Data: Current Staffing Information
    /supervisoryOrganizations – Organisationsstruktur Worker Data: Organization Information
  6. Klicken Sie auf OK.

  7. Klicken Sie auf Fertig, um die Änderungen zu speichern.

Änderungen an der Sicherheitsrichtlinie aktivieren

  1. Geben Sie in der Suchleiste Ausstehende Änderungen an der Sicherheitsrichtlinie aktivieren ein und wählen Sie die Aufgabe aus.
  2. Geben Sie im Kommentarfeld einen Grund für die Änderung ein, z. B. Granting API access for Google SecOps HCM integration.
  3. Klicken Sie auf OK.
  4. Wählen Sie Bestätigen und dann OK aus.

API-Client für Integrationen registrieren

  1. Geben Sie in der Suchleiste Register API Client for Integrations ein und wählen Sie das Ergebnis aus.
  2. Klicken Sie auf Erstellen.
  3. Geben Sie die folgenden Konfigurationsdetails an:

    • Client Name (Clientname): Geben Sie einen Namen ein (z. B. Google SecOps HCM Client).
    • System User (Systemnutzer): Wählen Sie den von Ihnen erstellten Integrationssystemnutzer aus (z. B. ISU_SecOps_HCM).
    • Bereich: Wählen Sie die folgenden Bereiche aus:

      Umfang Erforderlich für
      Personal /workers- und /workers/{id}/history-Endpunkte
      Kontaktdaten Geschäftliche E‑Mail- und Telefonfelder, die von /workers zurückgegeben werden (für UDM-Abstimmung verwendet)
      Freizeit und Urlaub /workers/{id}/timeOffEntries Endpunkt
      Organisationen und Rollen /supervisoryOrganizations Endpunkt
      Mandant nicht konfigurierbar Beliebiger OAuth 2.0-API-Client (Integration auf Systemebene und Tokenrotation)
  4. Klicken Sie auf Speichern.

  5. Klicken Sie auf OK.

  6. Kopieren und speichern Sie die Client-ID und den Clientschlüssel sofort.

OAuth 2.0-Aktualisierungstoken generieren

  1. Geben Sie in die Suchleiste Aktualisierungstokens für Integrationen verwalten ein und wählen Sie die Option aus.
  2. Klicken Sie auf Generate New Refresh Token (Neues Aktualisierungstoken generieren).
  3. Suchen Sie im Feld Workday Account (Workday-Konto) nach dem Integrationssystemnutzer und wählen Sie ihn aus (z. B. ISU_SecOps_HCM).
  4. Wählen Sie den von Ihnen erstellten API-Client aus und klicken Sie auf OK.
  5. Kopieren und speichern Sie das Aktualisierungstoken.

API-Endpunkt-URLs abrufen

  1. Geben Sie in der Suchleiste View API Clients ein und wählen Sie die Option aus.
  2. Suchen Sie unter API-Clients für Integrationen nach dem von Ihnen erstellten Client (z. B. Google SecOps HCM Client).
  3. Kopieren und speichern Sie die folgenden Details:

    • Token-Endpunkt: Die URL zum Abrufen eines Zugriffstokens (z. B. https://wd2-impl-services1.workday.com/ccx/oauth2/YOUR_TENANT/token).
    • Workday REST API Endpoint (Workday REST API-Endpunkt): Die Basis-URL für API-Aufrufe (z. B. https://wd2-impl-services1.workday.com/ccx/api/v1/YOUR_TENANT).

OAuth-Zugriffstoken generieren

Verwenden Sie curl oder einen ähnlichen HTTP-Client, um eine POST-Anfrage an den Token-Endpunkt zu senden:

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"

Dadurch wird ein Zugriffstoken zurückgegeben (z. B. "access_token": "abcd1234"). Kopieren und speichern Sie das Zugriffstoken.

API-Zugriff prüfen

Prüfen Sie vor dem Konfigurieren des Feeds, ob die ISU die erforderlichen Berechtigungen für die wichtigsten Endpunkte hat. Ersetzen Sie die Variablen durch Ihre tatsächlichen Werte:

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"

Jeder Test sollte den HTTP-Status 200 zurückgeben. Wenn ein Endpunkt 403 zurückgibt, lesen Sie den Abschnitt Fehlerbehebung unten.

Feed in Google SecOps konfigurieren, um Workday HCM-Daten aufzunehmen

Feed einrichten

  1. Rufen Sie die SIEM-Einstellungen > Feeds auf.
  2. Klicken Sie auf Neuen Feed hinzufügen.
  3. Klicken Sie auf der nächsten Seite auf Einen einzelnen Feed konfigurieren.
  4. Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B. Workday HCM.
  5. Wählen Sie Drittanbieter-API als Quelltyp aus.
  6. Wählen Sie Workday als Log type (Logtyp) aus.
  7. Klicken Sie auf Weiter.

Feedparameter konfigurieren

Geben Sie Werte für die folgenden Eingabeparameter an:

  • API-Hostname: Der vollqualifizierte Domainname Ihres Workday REST API-Endpunkt (z. B. wd2-impl-services1.workday.com).

  • Mandant: Das letzte Pfadelement Ihres Workday REST API-Endpunkt, das Ihre Workday-Instanz identifiziert.

  • Zugriffstoken: Das OAuth-Zugriffstoken, das im vorherigen Abschnitt generiert wurde.

Erweiterte Optionen:

  • Asset-Namespace: Der Asset-Namespace.
  • Aufnahmelabels: Das Label, das auf die Ereignisse aus diesem Feed angewendet werden soll.
  1. Klicken Sie auf Weiter.
  2. Prüfen Sie die neue Feedkonfiguration auf dem Bildschirm Abschließen und klicken Sie dann auf Senden.

Fehlerbehebung

403 Forbidden für bestimmte Endpunkte

Wenn im Feed Fehler gemeldet werden oder die curl-Befehle zur Überprüfung für bestimmte Endpunkte 403 zurückgeben, fehlen dem Integrationssystemnutzer Berechtigungen.

Fehlerhafter Endpunkt Korrigieren
/workers/{id}/timeOffEntries Fügen Sie den GET-Zugriff für die Domains Worker Data: Time Off (Time Off Balances) und Worker Data: Time Off (Time Off Balances Manager View) hinzu. Fügen Sie dem API-Client den Bereich Time Off and Leave (Urlaub und Abwesenheit) hinzu.
/workers/{id}/history Fügen Sie GET-Zugriff für die Domain Worker Data: Historical Staffing Information hinzu. Prüfen Sie, ob dem API-Client der Bereich Staffing zugewiesen ist.
/supervisoryOrganizations Fügen Sie den GET-Zugriff für die Domain Manage: Supervisory Organization oder View: Supervisory Organization hinzu. Fügen Sie dem API-Client den Bereich Organizations and Roles hinzu.

Nachdem Sie Berechtigungen geändert haben:

  1. Führen Sie Activate Pending Security Policy Changes in Workday aus.
  2. Wenn Sie dem API-Client neue Bereiche hinzugefügt haben, generieren Sie ein neues Aktualisierungstoken über Aktualisierungstokens für Integrationen verwalten und dann ein neues Zugriffstoken.
  3. Aktualisieren Sie die Feedkonfiguration mit dem neuen Zugriffstoken, falls es sich geändert hat.

Authentifizierungsfehler

  • 401 Nicht autorisiert: Das Zugriffstoken ist abgelaufen. Generieren Sie mit dem Aktualisierungstoken ein neues Token und aktualisieren Sie den Feed.
  • Ungültiger Client: Prüfen Sie, ob die Client-ID und der Clientschlüssel korrekt sind.
  • Ungültiges Aktualisierungstoken: Das Aktualisierungstoken wurde möglicherweise widerrufen. Generieren Sie einen neuen über Aktualisierungstokens für Integrationen verwalten.

UDM-Zuordnungstabelle

Logfeld UDM-Zuordnung Logik
entity_host_name entity.asset.hostname Direkt zugeordnet
location.descriptor entity.location.city Direkt zugeordnet
AU_EFFECTIVE_DATE entity.resource.attribute.labels.value Direkt zugeordnet
COMPANY_EFFECTIVE_DATE entity.resource.attribute.labels.value Direkt zugeordnet
ORIG_HIRE_DT entity.resource.attribute.labels.value Direkt zugeordnet
STATUS_EFFECTIVE_DATE entity.resource.attribute.labels.value Direkt zugeordnet
href entity.url Direkt zugeordnet
CONT_START_DTE entity.user.attribute.labels.value Direkt zugeordnet
EMPL_TYPE entity.user.attribute.labels.value Direkt zugeordnet
EXEC_CD entity.user.attribute.labels.value Direkt zugeordnet
EXEC_DESCR entity.user.attribute.labels.value Direkt zugeordnet
HR_Status entity.user.attribute.labels.value Direkt zugeordnet
Is_Active entity.user.attribute.labels.value Direkt zugeordnet
Is_Manager entity.user.attribute.labels.value Direkt zugeordnet
JOB_CODE entity.user.attribute.labels.value Direkt zugeordnet
ORG_CD entity.user.attribute.labels.value Direkt zugeordnet
ORG_Container entity.user.attribute.labels.value Direkt zugeordnet
ORG_Container_Name entity.user.attribute.labels.value Direkt zugeordnet
PER_Status entity.user.attribute.labels.value Direkt zugeordnet
POSITION_NBR entity.user.attribute.labels.value Direkt zugeordnet
PS_ELID entity.user.attribute.labels.value Direkt zugeordnet
REG_TEMP entity.user.attribute.labels.value Direkt zugeordnet
WB_LOGON_ID entity.user.attribute.labels.value Direkt zugeordnet
ORG_DESCR entity.user.department Zusammengeführt
primarySupervisoryOrganization.descriptor entity.user.department Zusammengeführt
Email entity.user.email_addresses Zusammengeführt
Work_Email entity.user.email_addresses Zusammengeführt
primaryWorkEmail entity.user.email_addresses Zusammengeführt
EMPLID entity.user.employee_id Direkt zugeordnet
Employee_ID entity.user.employee_id Direkt zugeordnet
First_Name entity.user.first_name Direkt zugeordnet
Legal_Name_First_Name entity.user.first_name Direkt zugeordnet
HIRE_DATE entity.user.hire_date Geparst als RFC 3339
Hire_Date entity.user.hire_date Geparst als RFC 3339
Last_Name entity.user.last_name Direkt zugeordnet
Legal_Name_Last_Name entity.user.last_name Direkt zugeordnet
gopher-supervisor.primaryWorkEmail entity.user.managers.email_addresses Zusammengeführt
Reports_To_EMPLID entity.user.managers.employee_id Direkt zugeordnet
gopher-supervisor.id entity.user.managers.product_object_id Umbenannt/zugeordnet
Reports_To_Name entity.user.managers.user_display_name Direkt zugeordnet
gopher-supervisor.descriptor entity.user.managers.user_display_name Umbenannt/zugeordnet
primaryWorkPhone entity.user.phone_numbers Zusammengeführt
Termination_Date entity.user.termination_date Geparst als RFC 3339
timeoff.descriptor entity.user.time_off.description Direkt zugeordnet
timeoff.date entity.user.time_off.interval.start_time Geparst als RFC 3339
HR_JOB_TITLE entity.user.title Direkt zugeordnet
Job_Profile entity.user.title Direkt zugeordnet
businessTitle entity.user.title Direkt zugeordnet
Full_Name entity.user.user_display_name Direkt zugeordnet
descriptor entity.user.user_display_name Direkt zugeordnet
udm_metadata metadata Umbenannt/zugeordnet
metadata_entity_type metadata.entity_type Direkt zugeordnet
actual_completed_date_and_time metadata.event_timestamp Geparst als MM/dd/yyyy HH:mm:ss a
body.time metadata.event_timestamp Geparst als UNIX_MS
requestTime metadata.event_timestamp Geparst als RFC 3339
timestamp metadata.event_timestamp Geparst als RFC 3339
EMPLID metadata.product_entity_id Direkt zugeordnet
Employee_ID metadata.product_entity_id Direkt zugeordnet
id metadata.product_entity_id Direkt zugeordnet
Source_Name metadata.product_name Direkt zugeordnet
userAgent network.http.parsed_user_agent Umbenannt/zugeordnet
userAgent network.http.user_agent Direkt zugeordnet
sessionId network.session_id Direkt zugeordnet
ipAddress principal.ip Zusammengeführt
taskId principal.process.pid Direkt zugeordnet
activityAction_label principal.resource.attribute.labels Zusammengeführt
body.event.Submitted_By principal.user.userid Direkt zugeordnet
body.event.Response_Message security_result.action_details Direkt zugeordnet
body.event.Messages security_result.description Direkt zugeordnet
actual_start_date_and_time_label security_result.detection_fields Zusammengeführt
background_process_is_running_label security_result.detection_fields Zusammengeführt
by_person_label security_result.detection_fields Zusammengeführt
created_from_trigger_label security_result.detection_fields Zusammengeführt
items_processed_label security_result.detection_fields Zusammengeführt
percent_complete_label security_result.detection_fields Zusammengeführt
processing_time_label security_result.detection_fields Zusammengeführt
scheduled_start_date_and_time_label security_result.detection_fields Zusammengeführt
sent_on_label security_result.detection_fields Zusammengeführt
total_duration_label security_result.detection_fields Zusammengeführt
body.event.Integration_Event_Status security_result.summary Direkt zugeordnet
body.event.Integration_System target.application Direkt zugeordnet
target_data.id target.resource.product_object_id Direkt zugeordnet
deviceType target.resource.resource_subtype Direkt zugeordnet
deviceType target.resource.type Zugeordnet: (?i)(Desktop/Laptop/Mobile) → DEVICE
user_display_name target.user.user_display_name Direkt zugeordnet
systemAccount target.user.userid Direkt zugeordnet
entity.resource.attribute.labels.key Konstante: COMPANY_EFFECTIVE_DATE
entity.user.attribute.labels.key Konstante: ORG_Container
metadata.product_name Konstante: HCM
metadata.vendor_name Konstante: Workday
target.resource.type Konstante: DEVICE

Änderungsprotokoll

Änderungsprotokoll für diesen Parser ansehen

Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten