Raccogliere i log di Workday HCM
Questo documento spiega come importare i log di Workday HCM in Google Security Operations configurando un feed utilizzando l'API di terze parti.
Il parser estrae i dati utente di Workday HCM dai log in formato JSON. Gestisce varie trasformazioni dei dati, tra cui la ridenominazione dei campi, l'unione di oggetti nidificati, l'analisi delle date e il popolamento dei campi UDM per gli attributi utente, i dettagli sull'impiego e la struttura organizzativa.
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Un'istanza Google SecOps
- Accesso con privilegi a Workday con autorizzazioni Amministratore della sicurezza o equivalenti
Configurare l'autenticazione API Workday
Crea un utente di sistema di integrazione (ISU)
- Accedi a Workday con privilegi amministrativi.
- Nella barra di ricerca, digita Create Integration System User (Crea utente di sistema di integrazione) e seleziona l'attività.
- Inserisci un Nome utente (ad esempio,
ISU_SecOps_HCM). - Imposta una password.
- Imposta Session Timeout Minutes (Minuti di timeout della sessione) su
0per evitare che l'ISU vada in timeout. - Abilita Do Not Allow UI Sessions (Non consentire sessioni UI) per migliorare la sicurezza limitando gli accessi alla UI.
- Vai all'attività Mantieni regole password.
- Aggiungi l'utente di sistema di integrazione al campo Utenti di sistema esenti dalla scadenza della password.
Crea un gruppo di sicurezza per l'integrazione
- Nella barra di ricerca, digita Crea gruppo di sicurezza e seleziona l'attività.
- Individua il campo Tipo di gruppo di sicurezza multi-tenant e seleziona Integration System Security Group (Unconstrained).
- Fornisci un nome per il gruppo di sicurezza (ad esempio,
ISG_SecOps_HCM). - Fai clic su OK.
- Fai clic su Modifica per il gruppo di sicurezza appena creato.
- Assegna l'utente di sistema di integrazione del passaggio precedente al gruppo di sicurezza.
- Fai clic su Fine.
Concedere l'accesso al dominio al gruppo di sicurezza
Il feed Google SecOps recupera i dati da quattro endpoint dell'API REST di Workday. A ogni endpoint devono essere concesse autorizzazioni specifiche per le policy di sicurezza del dominio al gruppo di sicurezza dell'integrazione.
- Nella barra di ricerca, digita Maintain Permissions for Security Group (Mantieni autorizzazioni per il gruppo di sicurezza) e seleziona l'attività.
- Scegli il gruppo di sicurezza che hai creato (ad esempio
ISG_SecOps_HCM) dall'elenco Gruppo di sicurezza di origine. - Fai clic su OK.
- Vai ad Autorizzazioni per le norme di sicurezza del dominio.
Aggiungi l'accesso GET per ciascuno dei seguenti domini:
Endpoint API Policy di sicurezza del dominio richieste /workers- Elenco e profili dei lavoratoriWorker Data: Public Worker Reports/workers/{id}/timeOffEntries- Saldi ferieWorker Data: Time Off (Time Off Balances),Worker Data: Time Off (Time Off Balances Manager View)/workers/{id}/history- Cronologia dell'assegnazione dei lavoratoriWorker Data: Historical Staffing Information/supervisoryOrganizations- Struttura organizzativaManage: Supervisory OrganizationoView: Supervisory OrganizationFai clic su OK.
Fai clic su Fine per salvare le modifiche.
Attiva le modifiche al criterio di sicurezza
- Nella barra di ricerca, digita Activate Pending Security Policy Changes (Attiva modifiche alle norme di sicurezza in attesa) e seleziona l'attività.
- Inserisci un motivo per la modifica nel campo del commento (ad esempio,
Granting API access for Google SecOps HCM integration). - Fai clic su OK.
- Seleziona Conferma e poi fai clic su Ok.
Registra il client API per le integrazioni
- Nella barra di ricerca, digita Register API Client for Integrations (Registra client API per le integrazioni) e selezionalo.
- Fai clic su Crea.
Fornisci i seguenti dettagli di configurazione:
- Nome client: inserisci un nome (ad esempio,
Google SecOps HCM Client). - Utente di sistema: seleziona l'utente di sistema di integrazione che hai creato (ad esempio,
ISU_SecOps_HCM). Ambito: seleziona i seguenti ambiti:
Ambito Obbligatorio per Personale Endpoint /workerse/workers/{id}/historyTempo libero e congedo /workers/{id}/timeOffEntriesendpointOrganizzazioni e ruoli /supervisoryOrganizationsendpoint
- Nome client: inserisci un nome (ad esempio,
Fai clic su Salva.
Fai clic su OK.
Copia e salva immediatamente l'ID client e il client secret.
Genera token di aggiornamento OAuth 2.0
- Nella barra di ricerca, digita Gestisci token di aggiornamento per le integrazioni e selezionalo.
- Fai clic su Genera nuovo token di aggiornamento.
- Nel campo Account Workday, cerca e seleziona l'utente del sistema di integrazione (ad esempio,
ISU_SecOps_HCM). - Seleziona il client API che hai creato e fai clic su Ok.
- Copia e salva il token di aggiornamento.
Recuperare gli URL degli endpoint API
- Nella barra di ricerca, digita Visualizza client API e selezionalo.
- In Client API per le integrazioni, individua il client che hai creato (ad esempio,
Google SecOps HCM Client). Copia e salva i seguenti dettagli:
- Endpoint token: l'URL per ottenere un token di accesso (ad esempio,
https://wd2-impl-services1.workday.com/ccx/oauth2/YOUR_TENANT/token). - Endpoint API REST Workday: l'URL di base per le chiamate API (ad esempio,
https://wd2-impl-services1.workday.com/ccx/api/v1/YOUR_TENANT).
- Endpoint token: l'URL per ottenere un token di accesso (ad esempio,
Generare il token di accesso OAuth
Utilizza
curlo un client HTTP simile per inviare una richiesta POST all'endpoint token: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"
Viene restituito un token di accesso (ad esempio, "access_token": "abcd1234"). Copia e salva il token di accesso.
Verificare l'accesso API
Prima di configurare il feed, verifica che l'ISU disponga delle autorizzazioni richieste per gli endpoint chiave. Sostituisci le variabili con i tuoi valori effettivi:
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"
Ogni test deve restituire lo stato HTTP 200. Se un endpoint restituisce 403, consulta la sezione Risoluzione dei problemi.
Configura un feed in Google SecOps per importare i dati di Workday HCM
Configurare il feed
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo feed.
- Nella pagina successiva, fai clic su Configura un singolo feed.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio,
Workday HCM). - Seleziona API di terze parti come Tipo di origine.
- Seleziona Workday come Tipo di log.
- Fai clic su Avanti.
Configurare i parametri del feed
Specifica i valori per i seguenti parametri di input:
Nome host API: il nome di dominio completo dell'endpoint API REST di Workday (ad esempio,
wd2-impl-services1.workday.com).Tenant: l'ultimo elemento del percorso dell'endpoint API REST Workday che identifica la tua istanza Workday.
Token di accesso: il token di accesso OAuth generato nella sezione precedente.
Opzioni avanzate:
- Spazio dei nomi dell'asset: lo spazio dei nomi dell'asset.
- Etichette di importazione: l'etichetta da applicare agli eventi di questo feed.
Fai clic su Avanti.
Controlla la nuova configurazione del feed nella schermata Finalizza e poi fai clic su Invia.
Risoluzione dei problemi
403 - Vietato su endpoint specifici
Se il feed segnala errori o i comandi curl di verifica restituiscono 403 per endpoint specifici, l'utente del sistema di integrazione non dispone delle autorizzazioni.
| Endpoint non riuscito | Correggi |
|---|---|
/workers/{id}/timeOffEntries |
Aggiungi l'accesso GET per i domini Worker Data: Time Off (Time Off Balances) e Worker Data: Time Off (Time Off Balances Manager View). Aggiungi l'ambito Time Off and Leave al client API. |
/workers/{id}/history |
Aggiungi l'accesso GET per il dominio Worker Data: Historical Staffing Information. Verifica che l'ambito Staffing sia assegnato al client API. |
/supervisoryOrganizations |
Aggiungi l'accesso GET per il dominio Manage: Supervisory Organization o View: Supervisory Organization. Aggiungi l'ambito Organizzazioni e ruoli al client API. |
Dopo aver apportato modifiche alle autorizzazioni:
- Esegui Attiva modifiche ai criteri di sicurezza in attesa in Workday.
- Se hai aggiunto nuovi ambiti al client API, genera un nuovo token di aggiornamento tramite Gestisci token di aggiornamento per le integrazioni e poi genera un nuovo token di accesso.
- Aggiorna la configurazione del feed con il nuovo token di accesso, se modificato.
Errori di autenticazione
- 401 - Non autorizzato: il token di accesso è scaduto. Genera un nuovo token utilizzando il token di aggiornamento e aggiorna il feed.
- Client non valido: verifica che l'ID client e il client secret siano corretti.
- Token di aggiornamento non valido: il token di aggiornamento potrebbe essere stato revocato. Generane uno nuovo tramite Gestisci token di aggiornamento per le integrazioni.
Tabella di mappatura UDM
| Campo log | Mappatura UDM | Logic |
|---|---|---|
@timestamp |
metadata.event_timestamp.seconds |
Analizzato come timestamp in secondi dall'epoca |
businessTitle |
entity.entity.user.title |
Mappato direttamente |
descriptor |
entity.entity.user.user_display_name |
Mappato direttamente |
Employee_ID |
entity.entity.user.employee_id |
Mappato direttamente |
Employee_ID |
entity.metadata.product_entity_id |
Mappato quando id non è presente |
gopher-supervisor.descriptor |
entity.entity.user.managers.user_display_name |
Mappato direttamente |
gopher-supervisor.id |
entity.entity.user.managers.product_object_id |
Mappato direttamente |
gopher-supervisor.primaryWorkEmail |
entity.entity.user.managers.email_addresses |
Mappato direttamente |
gopher-time-off.date |
entity.entity.user.time_off.interval.start_time |
Analizzato come data |
gopher-time-off.descriptor |
entity.entity.user.time_off.description |
Mappato direttamente |
Hire_Date |
entity.entity.user.hire_date |
Analizzato come data |
id |
entity.metadata.product_entity_id |
Mappato direttamente, se presente |
Job_Profile |
entity.entity.user.title |
Mappato quando businessTitle non è presente |
Legal_Name_First_Name |
entity.entity.user.first_name |
Mappato direttamente |
Legal_Name_Last_Name |
entity.entity.user.last_name |
Mappato direttamente |
location.descriptor |
entity.entity.location.city |
Mappato direttamente |
primarySupervisoryOrganization.descriptor |
entity.entity.user.department |
Mappato direttamente |
primaryWorkEmail |
entity.entity.user.email_addresses |
Mappato direttamente |
primaryWorkPhone |
entity.entity.user.phone_numbers |
Mappato direttamente |
Termination_Date |
entity.entity.user.termination_date |
Analizzato come data |
Work_Email |
entity.entity.user.email_addresses |
Mappato quando primaryWorkEmail non è presente |
collection_time |
metadata.event_timestamp.collected_timestamp |
Mappato direttamente |
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.