Raccogliere i log di Workday HCM

Supportato in:

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 di Amministratore della sicurezza o equivalenti.

Configurare l'autenticazione API Workday

Crea un utente di sistema di integrazione (ISU)

  1. Accedi a Workday con privilegi amministrativi.
  2. Nella barra di ricerca, digita Create Integration System User (Crea utente di sistema di integrazione) e seleziona l'attività.
  3. Inserisci un Nome utente (ad esempio, ISU_SecOps_HCM).
  4. Imposta una password.
  5. Imposta Session Timeout Minutes su 0 per evitare il timeout dell'ISU.
  6. Abilita Do Not Allow UI Sessions (Non consentire sessioni UI) per migliorare la sicurezza limitando gli accessi alla UI.
  7. Vai all'attività Mantieni regole password.
  8. 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

  1. Nella barra di ricerca, digita Crea gruppo di sicurezza e seleziona l'attività.
  2. Individua il campo Tipo di gruppo di sicurezza multi-tenant e seleziona Integration System Security Group (Unconstrained).
  3. Fornisci un nome per il gruppo di sicurezza (ad esempio, ISG_SecOps_HCM).
  4. Fai clic su OK.
  5. Fai clic su Modifica per il gruppo di sicurezza appena creato.
  6. Assegna l'utente di sistema di integrazione del passaggio precedente al gruppo di sicurezza.
  7. 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. Per ogni endpoint è necessario concedere autorizzazioni specifiche per le policy di sicurezza del dominio al gruppo di sicurezza dell'integrazione.

  1. Nella barra di ricerca, digita Maintain Permissions for Security Group (Mantieni autorizzazioni per il gruppo di sicurezza) e seleziona l'attività.
  2. Scegli il gruppo di sicurezza che hai creato (ad esempio ISG_SecOps_HCM) dall'elenco Gruppo di sicurezza di origine.
  3. Fai clic su OK.
  4. Vai ad Autorizzazioni per le norme di sicurezza del dominio.
  5. Aggiungi l'accesso GET per ciascuno dei seguenti domini:

    Endpoint API Policy di sicurezza del dominio richieste
    /workers: elenco dei lavoratori, profili e personale attuale Worker Data: Public Worker Reports, Worker Data: Current Staffing Information, Person Data: Work Contact Information
    /workers/{id}/timeOffEntries - Saldi ferie Worker Data: Time Off (Time Off Balances), Worker Data: Time Off (Time Off Balances Manager View)
    /workers/{id}/history - Cronologia dell'assegnazione dei lavoratori Worker Data: Current Staffing Information
    /supervisoryOrganizations - Struttura dell'organizzazione Worker Data: Organization Information
  6. Fai clic su OK.

  7. Fai clic su Fine per salvare le modifiche.

Attiva le modifiche al criterio di sicurezza

  1. Nella barra di ricerca, digita Activate Pending Security Policy Changes (Attiva modifiche in attesa dei criteri di sicurezza) e seleziona l'attività.
  2. Inserisci un motivo per la modifica nel campo del commento (ad esempio, Granting API access for Google SecOps HCM integration).
  3. Fai clic su OK.
  4. Seleziona Conferma e poi fai clic su Ok.

Registra il client API per le integrazioni

  1. Nella barra di ricerca, digita Register API Client for Integrations (Registra client API per le integrazioni) e selezionalo.
  2. Fai clic su Crea.
  3. 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 /workers e /workers/{id}/history
      Dati di contatto Campi email e telefono di lavoro restituiti da /workers (utilizzati per la correlazione UDM)
      Tempo libero e congedo /workers/{id}/timeOffEntries endpoint
      Organizzazioni e ruoli /supervisoryOrganizations endpoint
      Tenant non configurabile Qualsiasi client API OAuth 2.0 (integrazione a livello di sistema e rotazione dei token)
  4. Fai clic su Salva.

  5. Fai clic su OK.

  6. Copia e salva immediatamente l'ID client e il client secret.

Genera il token di aggiornamento OAuth 2.0

  1. Nella barra di ricerca, digita Gestisci token di aggiornamento per le integrazioni e selezionalo.
  2. Fai clic su Genera nuovo token di aggiornamento.
  3. Nel campo Account Workday, cerca e seleziona l'utente del sistema di integrazione (ad esempio, ISU_SecOps_HCM).
  4. Seleziona il client API che hai creato e fai clic su Ok.
  5. Copia e salva il token di aggiornamento.

Recuperare gli URL degli endpoint API

  1. Nella barra di ricerca, digita Visualizza client API e selezionalo.
  2. In Client API per le integrazioni, individua il client che hai creato (ad esempio, Google SecOps HCM Client).
  3. 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).

Generare un token di accesso OAuth

Utilizza curl o 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 di seguito.

Configura un feed in Google SecOps per importare i dati di Workday HCM

Configurare il feed

  1. Vai a Impostazioni SIEM > Feed.
  2. Fai clic su Aggiungi nuovo feed.
  3. Nella pagina successiva, fai clic su Configura un singolo feed.
  4. Nel campo Nome feed, inserisci un nome per il feed (ad esempio, Workday HCM).
  5. Seleziona API di terze parti come Tipo di origine.
  6. Seleziona Workday come Tipo di log.
  7. 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.
  1. Fai clic su Avanti.
  2. Controlla la nuova configurazione del feed nella schermata Finalizza e poi fai clic su Invia.

Risoluzione dei problemi

403 Forbidden su endpoint specifici

Se il feed segnala errori o i comandi curl di verifica restituiscono 403 per endpoint specifici, l'utente di 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:

  1. Esegui Attiva modifiche ai criteri di sicurezza in attesa in Workday.
  2. 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.
  3. 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 mapping UDM Logica
entity_host_name entity.asset.hostname Mappato direttamente
location.descriptor entity.location.city Mappato direttamente
AU_EFFECTIVE_DATE entity.resource.attribute.labels.value Mappato direttamente
COMPANY_EFFECTIVE_DATE entity.resource.attribute.labels.value Mappato direttamente
ORIG_HIRE_DT entity.resource.attribute.labels.value Mappato direttamente
STATUS_EFFECTIVE_DATE entity.resource.attribute.labels.value Mappato direttamente
href entity.url Mappato direttamente
CONT_START_DTE entity.user.attribute.labels.value Mappato direttamente
EMPL_TYPE entity.user.attribute.labels.value Mappato direttamente
EXEC_CD entity.user.attribute.labels.value Mappato direttamente
EXEC_DESCR entity.user.attribute.labels.value Mappato direttamente
HR_Status entity.user.attribute.labels.value Mappato direttamente
Is_Active entity.user.attribute.labels.value Mappato direttamente
Is_Manager entity.user.attribute.labels.value Mappato direttamente
JOB_CODE entity.user.attribute.labels.value Mappato direttamente
ORG_CD entity.user.attribute.labels.value Mappato direttamente
ORG_Container entity.user.attribute.labels.value Mappato direttamente
ORG_Container_Name entity.user.attribute.labels.value Mappato direttamente
PER_Status entity.user.attribute.labels.value Mappato direttamente
POSITION_NBR entity.user.attribute.labels.value Mappato direttamente
PS_ELID entity.user.attribute.labels.value Mappato direttamente
REG_TEMP entity.user.attribute.labels.value Mappato direttamente
WB_LOGON_ID entity.user.attribute.labels.value Mappato direttamente
ORG_DESCR entity.user.department Unita
primarySupervisoryOrganization.descriptor entity.user.department Unita
Email entity.user.email_addresses Unita
Work_Email entity.user.email_addresses Unita
primaryWorkEmail entity.user.email_addresses Unita
EMPLID entity.user.employee_id Mappato direttamente
Employee_ID entity.user.employee_id Mappato direttamente
First_Name entity.user.first_name Mappato direttamente
Legal_Name_First_Name entity.user.first_name Mappato direttamente
HIRE_DATE entity.user.hire_date Analizzato come RFC 3339
Hire_Date entity.user.hire_date Analizzato come RFC 3339
Last_Name entity.user.last_name Mappato direttamente
Legal_Name_Last_Name entity.user.last_name Mappato direttamente
gopher-supervisor.primaryWorkEmail entity.user.managers.email_addresses Unita
Reports_To_EMPLID entity.user.managers.employee_id Mappato direttamente
gopher-supervisor.id entity.user.managers.product_object_id Rinominate/mappate
Reports_To_Name entity.user.managers.user_display_name Mappato direttamente
gopher-supervisor.descriptor entity.user.managers.user_display_name Rinominate/mappate
primaryWorkPhone entity.user.phone_numbers Unita
Termination_Date entity.user.termination_date Analizzato come RFC 3339
timeoff.descriptor entity.user.time_off.description Mappato direttamente
timeoff.date entity.user.time_off.interval.start_time Analizzato come RFC 3339
HR_JOB_TITLE entity.user.title Mappato direttamente
Job_Profile entity.user.title Mappato direttamente
businessTitle entity.user.title Mappato direttamente
Full_Name entity.user.user_display_name Mappato direttamente
descriptor entity.user.user_display_name Mappato direttamente
udm_metadata metadata Rinominate/mappate
metadata_entity_type metadata.entity_type Mappato direttamente
actual_completed_date_and_time metadata.event_timestamp Analizzato come MM/dd/yyyy HH:mm:ss a
body.time metadata.event_timestamp Analizzato come UNIX_MS
requestTime metadata.event_timestamp Analizzato come RFC 3339
timestamp metadata.event_timestamp Analizzato come RFC 3339
EMPLID metadata.product_entity_id Mappato direttamente
Employee_ID metadata.product_entity_id Mappato direttamente
id metadata.product_entity_id Mappato direttamente
Source_Name metadata.product_name Mappato direttamente
userAgent network.http.parsed_user_agent Rinominate/mappate
userAgent network.http.user_agent Mappato direttamente
sessionId network.session_id Mappato direttamente
ipAddress principal.ip Unita
taskId principal.process.pid Mappato direttamente
activityAction_label principal.resource.attribute.labels Unita
body.event.Submitted_By principal.user.userid Mappato direttamente
body.event.Response_Message security_result.action_details Mappato direttamente
body.event.Messages security_result.description Mappato direttamente
actual_start_date_and_time_label security_result.detection_fields Unita
background_process_is_running_label security_result.detection_fields Unita
by_person_label security_result.detection_fields Unita
created_from_trigger_label security_result.detection_fields Unita
items_processed_label security_result.detection_fields Unita
percent_complete_label security_result.detection_fields Unita
processing_time_label security_result.detection_fields Unita
scheduled_start_date_and_time_label security_result.detection_fields Unita
sent_on_label security_result.detection_fields Unita
total_duration_label security_result.detection_fields Unita
body.event.Integration_Event_Status security_result.summary Mappato direttamente
body.event.Integration_System target.application Mappato direttamente
target_data.id target.resource.product_object_id Mappato direttamente
deviceType target.resource.resource_subtype Mappato direttamente
deviceType target.resource.type Mappato: (?i)(Desktop/Laptop/Mobile)DEVICE
user_display_name target.user.user_display_name Mappato direttamente
systemAccount target.user.userid Mappato direttamente
N/D entity.resource.attribute.labels.key Costante: COMPANY_EFFECTIVE_DATE
N/D entity.user.attribute.labels.key Costante: ORG_Container
N/D metadata.product_name Costante: HCM
N/D metadata.vendor_name Costante: Workday
N/D target.resource.type Costante: DEVICE

Log delle modifiche

Visualizza il log delle modifiche per questo parser

Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.