Workday HCM-Logs erfassen
In diesem Dokument wird erläutert, wie Sie Workday HCM-Logs in Google Security Operations aufnehmen. Dazu richten Sie einen Feed mit der Drittanbieter-API ein.
Der Parser extrahiert Workday HCM-Nutzerdaten aus JSON-formatierten Logs. Er führt verschiedene Datentransformationen durch, darunter das Umbenennen von Feldern, das Zusammenführen verschachtelter Objekte, das Parsen von Datumsangaben und das Ausfüllen von UDM-Feldern für Nutzerattribute, Beschäftigungsdetails und die Organisationsstruktur.
Hinweis
Prüfen Sie, ob folgende Voraussetzungen erfüllt sind:
- Eine Google SecOps-Instanz
- Privilegierter Zugriff auf Workday mit der Berechtigung Security Administrator oder einer entsprechenden Berechtigung
Workday API-Authentifizierung konfigurieren
Integrationssystemnutzer (Integration System User, ISU) erstellen
- Melden Sie sich mit Administratorberechtigungen in Workday an.
- Geben Sie in der Suchleiste Create Integration System User ein und wählen Sie die Aufgabe aus.
- Geben Sie einen Nutzernamen ein, z. B.
ISU_SecOps_HCM. - Legen Sie ein Passwort fest.
- Setzen Sie Session Timeout Minutes auf
0, um zu verhindern, dass die Sitzung des ISU abläuft. - Aktivieren Sie Do Not Allow UI Sessions , um die Sicherheit zu erhöhen, indem Sie UI-Anmeldungen einschränken.
- Rufen Sie die Aufgabe Maintain Password Rules auf.
- Fügen Sie den Integrationssystemnutzer dem Feld System Users exempt from password expiration hinzu.
Sicherheitsgruppe für die Integration erstellen
- Geben Sie in der Suchleiste Create Security Group ein und wählen Sie die Aufgabe aus.
- Suchen Sie das Feld Type of Tenanted Security Group und wählen Sie Integration System Security Group (Unconstrained) aus.
- Geben Sie einen Namen für die Sicherheitsgruppe ein, z. B.
ISG_SecOps_HCM. - Klicken Sie auf OK.
- Klicken Sie für die neu erstellte Sicherheitsgruppe auf Edit (Bearbeiten).
- Weisen Sie der Sicherheitsgruppe den Integrationssystemnutzer aus dem vorherigen Schritt zu.
- Klicken Sie auf Fertig.
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 für die Integration bestimmte Berechtigungen für die Domain-Sicherheitsrichtlinie gewährt werden.
- Geben Sie in der Suchleiste Maintain Permissions for Security Group ein und wählen Sie die Aufgabe aus.
- Wählen Sie die von Ihnen erstellte Sicherheitsgruppe aus der Liste Source Security Group aus, z. B.
ISG_SecOps_HCM. - Klicken Sie auf OK.
- Rufen Sie Domain Security Policy Permissions auf.
Fügen Sie für jede der folgenden Domains den GET -Zugriff hinzu:
API-Endpunkt Erforderliche Domain-Sicherheitsrichtlinien /workers– Liste und Profile der MitarbeiterWorker Data: Public Worker Reports/workers/{id}/timeOffEntries– UrlaubsguthabenWorker Data: Time Off (Time Off Balances),Worker Data: Time Off (Time Off Balances Manager View)/workers/{id}/history– Personalverlauf der MitarbeiterWorker Data: Historical Staffing Information/supervisoryOrganizations– OrganisationsstrukturManage: Supervisory OrganizationoderView: Supervisory OrganizationKlicken Sie auf OK.
Klicken Sie auf Fertig , um die Änderungen zu speichern.
Änderungen an der Sicherheitsrichtlinie aktivieren
- Geben Sie in der Suchleiste Activate Pending Security Policy Changes 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 Confirm aus und klicken Sie dann auf OK.
API-Client für Integrationen registrieren
- Geben Sie in der Suchleiste Register API Client for Integrations ein und wählen Sie die Aufgabe aus.
- Klicken Sie auf Erstellen.
Geben Sie die folgenden Konfigurationsdetails an:
- Client Name: Geben Sie einen Namen ein, z. B.
Google SecOps HCM Client. - System User: Wählen Sie den von Ihnen erstellten Integrationssystemnutzer aus, z. B.
ISU_SecOps_HCM. Scope: Wählen Sie die folgenden Bereiche aus:
Umfang Erforderlich für Staffing Endpunkte /workersund/workers/{id}/historyTime Off and Leave Endpunkt /workers/{id}/timeOffEntriesOrganizations and Roles Endpunkt /supervisoryOrganizations
- Client Name: Geben Sie einen Namen ein, z. B.
Klicken Sie auf Speichern.
Klicken Sie auf OK.
Kopieren und speichern Sie sofort die Client-ID und den Clientschlüssel.
OAuth 2.0-Aktualisierungstoken generieren
- Geben Sie in der Suchleiste Manage Refresh Tokens for Integrations ein und wählen Sie die Aufgabe aus.
- Klicken Sie auf Generate New Refresh Token.
- Suchen Sie im Feld Workday Account nach dem Integrationssystemnutzer (z. B.
ISU_SecOps_HCM) und wählen Sie ihn aus. - 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 Aufgabe aus.
- Suchen Sie unter API Clients for Integrations nach dem von Ihnen erstellten Client, z. B.
Google SecOps HCM Client. Kopieren und speichern Sie die folgenden Details:
- Token Endpoint: Die URL zum Abrufen eines Zugriffstokens, z. B.
https://wd2-impl-services1.workday.com/ccx/oauth2/YOUR_TENANT/token. - Workday REST API Endpoint: Die Basis-URL für API-Aufrufe, z. B.
https://wd2-impl-services1.workday.com/ccx/api/v1/YOUR_TENANT.
- Token Endpoint: Die URL zum Abrufen eines Zugriffstokens, z. B.
OAuth-Zugriffstoken generieren
Verwenden Sie
curloder 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
Bevor Sie den Feed konfigurieren, prüfen Sie, ob der 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 zur Fehlerbehebung.
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 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 Logtyp aus.
- Klicken Sie auf Weiter.
Feedparameter konfigurieren
Geben Sie Werte für die folgenden Eingabeparameter an:
API-Hostname: Der voll qualifizierte 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 – Verboten für bestimmte Endpunkte
Wenn der Feed Fehler meldet oder die curl-Befehle zur Überprüfung für bestimmte Endpunkte 403 zurückgeben, fehlen dem Integrationssystemnutzer Berechtigungen.
| Fehlerhafter Endpunkt | Korrektur |
|---|---|
/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 hinzu. |
/workers/{id}/history |
Fügen Sie den 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 Berechtigungsänderungen vorgenommen haben:
- Führen Sie in Workday Activate Pending Security Policy Changes aus.
- Wenn Sie dem API-Client neue Bereiche hinzugefügt haben, generieren Sie über Manage Refresh Tokens for Integrations ein neues Aktualisierungstoken und dann ein neues Zugriffstoken.
- Aktualisieren Sie die Feedkonfiguration mit dem neuen Zugriffstoken, falls es geändert wurde.
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 über Manage Refresh Tokens for Integrations ein neues.
UDM-Zuordnungstabelle
| Logfeld | UDM-Zuordnung | Logik |
|---|---|---|
@timestamp |
metadata.event_timestamp.seconds |
Als Zeitstempel in Sekunden seit der Epoche geparst |
businessTitle |
entity.entity.user.title |
Direkt zugeordnet |
descriptor |
entity.entity.user.user_display_name |
Direkt zugeordnet |
Employee_ID |
entity.entity.user.employee_id |
Direkt zugeordnet |
Employee_ID |
entity.metadata.product_entity_id |
Zuordnung, wenn id nicht vorhanden ist |
gopher-supervisor.descriptor |
entity.entity.user.managers.user_display_name |
Direkt zugeordnet |
gopher-supervisor.id |
entity.entity.user.managers.product_object_id |
Direkt zugeordnet |
gopher-supervisor.primaryWorkEmail |
entity.entity.user.managers.email_addresses |
Direkt zugeordnet |
gopher-time-off.date |
entity.entity.user.time_off.interval.start_time |
Als Datum geparst |
gopher-time-off.descriptor |
entity.entity.user.time_off.description |
Direkt zugeordnet |
Hire_Date |
entity.entity.user.hire_date |
Als Datum geparst |
id |
entity.metadata.product_entity_id |
Direkt zugeordnet, wenn vorhanden |
Job_Profile |
entity.entity.user.title |
Zuordnung, wenn businessTitle nicht vorhanden ist |
Legal_Name_First_Name |
entity.entity.user.first_name |
Direkt zugeordnet |
Legal_Name_Last_Name |
entity.entity.user.last_name |
Direkt zugeordnet |
location.descriptor |
entity.entity.location.city |
Direkt zugeordnet |
primarySupervisoryOrganization.descriptor |
entity.entity.user.department |
Direkt zugeordnet |
primaryWorkEmail |
entity.entity.user.email_addresses |
Direkt zugeordnet |
primaryWorkPhone |
entity.entity.user.phone_numbers |
Direkt zugeordnet |
Termination_Date |
entity.entity.user.termination_date |
Als Datum geparst |
Work_Email |
entity.entity.user.email_addresses |
Zuordnung, wenn primaryWorkEmail nicht vorhanden ist |
collection_time |
metadata.event_timestamp.collected_timestamp |
Direkt zugeordnet |
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten