Workday HCM-Logs erfassen
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
- Melden Sie sich mit Administratorberechtigungen in Workday an.
- Geben Sie in der Suchleiste Create Integration System User (Integrationssystemnutzer erstellen) ein und wählen Sie die Aufgabe aus.
- Geben Sie einen Nutzernamen ein, z. B.
ISU_SecOps_HCM. - Legen Sie ein Passwort fest.
- Legen Sie Session Timeout Minutes (Zeitüberschreitung für Sitzungen in Minuten) auf
0fest, um zu verhindern, dass die ISU eine Zeitüberschreitung auslöst. - Aktivieren Sie UI-Sitzungen nicht zulassen, um die Sicherheit zu erhöhen, indem Sie UI-Anmeldungen einschränken.
- Rufen Sie die Aufgabe Passwortregeln verwalten auf.
- Fügen Sie den Integrationssystemnutzer dem Feld Systemnutzer, die von der Passwortablaufrichtlinie ausgenommen sind hinzu.
Sicherheitsgruppe für die Integration erstellen
- Geben Sie in der Suchleiste Sicherheitsgruppe erstellen ein und wählen Sie die Aufgabe aus.
- 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.
- Geben Sie einen Namen für die Sicherheitsgruppe an, z. B.
ISG_SecOps_HCM. - Klicken Sie auf OK.
- Klicken Sie bei der neu erstellten Sicherheitsgruppe auf Bearbeiten.
- Weisen Sie der Sicherheitsgruppe den Integrationssystemnutzer aus dem vorherigen Schritt zu.
- 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.
- Geben Sie in der Suchleiste Maintain Permissions for Security Group (Berechtigungen für Sicherheitsgruppe verwalten) ein und wählen Sie die Aufgabe aus.
- Wählen Sie die von Ihnen erstellte Sicherheitsgruppe (z. B.
ISG_SecOps_HCM) aus der Liste Source Security Group (Quellsicherheitsgruppe) aus. - Klicken Sie auf OK.
- Rufen Sie Berechtigungen für die Domain-Sicherheitsrichtlinie auf.
Fügen Sie für jede der folgenden Domains GET-Zugriff hinzu:
API-Endpunkt Erforderliche Domainsicherheitsrichtlinien /workers– Worker-Liste, Profile und aktuelle BesetzungWorker Data: Public Worker Reports,Worker Data: Current Staffing Information,Person Data: Work Contact Information/workers/{id}/timeOffEntries– Urlaubs- und FreizeitausgleichWorker Data: Time Off (Time Off Balances),Worker Data: Time Off (Time Off Balances Manager View)/workers/{id}/history– PersonalverlaufWorker Data: Current Staffing Information/supervisoryOrganizations– OrganisationsstrukturWorker Data: Organization InformationKlicken Sie auf OK.
Klicken Sie auf Fertig, um die Änderungen zu speichern.
Änderungen an der Sicherheitsrichtlinie aktivieren
- Geben Sie in der Suchleiste Ausstehende Änderungen an der Sicherheitsrichtlinie aktivieren ein und wählen Sie die Aufgabe aus.
- Geben Sie im Kommentarfeld einen Grund für die Änderung ein, z. B.
Granting API access for Google SecOps HCM integration. - Klicken Sie auf OK.
- Wählen Sie Bestätigen und dann OK aus.
API-Client für Integrationen registrieren
- Geben Sie in der Suchleiste Register API Client for Integrations ein und wählen Sie das Ergebnis aus.
- Klicken Sie auf Erstellen.
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-EndpunkteKontaktdaten Geschäftliche E‑Mail- und Telefonfelder, die von /workerszurückgegeben werden (für UDM-Abstimmung verwendet)Freizeit und Urlaub /workers/{id}/timeOffEntriesEndpunktOrganisationen und Rollen /supervisoryOrganizationsEndpunktMandant nicht konfigurierbar Beliebiger OAuth 2.0-API-Client (Integration auf Systemebene und Tokenrotation)
- Client Name (Clientname): Geben Sie einen Namen ein (z. B.
Klicken Sie auf Speichern.
Klicken Sie auf OK.
Kopieren und speichern Sie die Client-ID und den Clientschlüssel sofort.
OAuth 2.0-Aktualisierungstoken generieren
- Geben Sie in die Suchleiste Aktualisierungstokens für Integrationen verwalten ein und wählen Sie die Option aus.
- Klicken Sie auf Generate New Refresh Token (Neues Aktualisierungstoken generieren).
- Suchen Sie im Feld Workday Account (Workday-Konto) nach dem Integrationssystemnutzer und wählen Sie ihn aus (z. B.
ISU_SecOps_HCM). - Wählen Sie den von Ihnen erstellten API-Client aus und klicken Sie auf OK.
- Kopieren und speichern Sie das Aktualisierungstoken.
API-Endpunkt-URLs abrufen
- Geben Sie in der Suchleiste View API Clients ein und wählen Sie die Option aus.
- Suchen Sie unter API-Clients für Integrationen nach dem von Ihnen erstellten Client (z. B.
Google SecOps HCM Client). 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).
- Token-Endpunkt: Die URL zum Abrufen eines Zugriffstokens (z. B.
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
- Rufen Sie die SIEM-Einstellungen > Feeds auf.
- Klicken Sie auf Neuen Feed hinzufügen.
- Klicken Sie auf der nächsten Seite auf Einen einzelnen Feed konfigurieren.
- Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B.
Workday HCM. - Wählen Sie Drittanbieter-API als Quelltyp aus.
- Wählen Sie Workday als Log type (Logtyp) aus.
- 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.
- Klicken Sie auf Weiter.
- 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:
- Führen Sie Activate Pending Security Policy Changes in Workday aus.
- 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.
- 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