Recopila registros de Workday HCM

Compatible con:

En este documento, se explica cómo transferir registros de Workday HCM a Google Security Operations configurando un feed con la API de terceros.

El analizador extrae los datos del usuario de Workday HCM de los registros con formato JSON. Controla varias transformaciones de datos, como cambiar el nombre de los campos, combinar objetos anidados, analizar fechas y completar campos de UDM para los atributos del usuario, los detalles de empleo y la estructura organizativa.

Antes de comenzar

Asegúrate de cumplir con los siguientes requisitos previos:

  • Una instancia de Google SecOps
  • Acceso con privilegios a Workday con permisos de administrador de seguridad o equivalentes.

Configura la autenticación de la API de Workday

Crea un usuario del sistema de integración (ISU)

  1. Accede a Workday con privilegios de administrador.
  2. En la barra de búsqueda, escribe Create Integration System User y selecciona la tarea.
  3. Ingresa un Nombre de usuario (por ejemplo, ISU_SecOps_HCM).
  4. Establece una Contraseña.
  5. Establece Minutos de tiempo de espera de la sesión en 0 para evitar que se agote el tiempo de espera de la ISU.
  6. Habilita Do Not Allow UI Sessions para mejorar la seguridad restringiendo los accesos a la IU.
  7. Ve a la tarea Maintain Password Rules.
  8. Agrega el usuario del sistema de integración al campo System Users exempt from password expiration.

Crea un grupo de seguridad de integración

  1. En la barra de búsqueda, escribe Create Security Group y selecciona la tarea.
  2. Busca el campo Type of Tenanted Security Group y selecciona Integration System Security Group (Unconstrained).
  3. Proporciona un Nombre para el grupo de seguridad (por ejemplo, ISG_SecOps_HCM).
  4. Haz clic en Aceptar.
  5. Haz clic en Editar para el grupo de seguridad recién creado.
  6. Asigna el usuario del sistema de integración del paso anterior al grupo de seguridad.
  7. Haz clic en Listo.

Otorga acceso al dominio al grupo de seguridad

El feed de Google SecOps recupera datos de cuatro extremos de la API de REST de Workday. Cada extremo requiere que se otorguen permisos específicos de la política de seguridad del dominio al grupo de seguridad de la integración.

  1. En la barra de búsqueda, escribe Maintain Permissions for Security Group y selecciona la tarea.
  2. Elige el grupo de seguridad que creaste (por ejemplo, ISG_SecOps_HCM) de la lista Source Security Group.
  3. Haz clic en Aceptar.
  4. Ve a Permisos de la política de seguridad del dominio.
  5. Agrega acceso GET para cada uno de los siguientes dominios:

    Extremo de API Políticas de seguridad de dominio obligatorias
    /workers: Lista de trabajadores, perfiles y personal actual Worker Data: Public Worker Reports, Worker Data: Current Staffing Information, Person Data: Work Contact Information
    /workers/{id}/timeOffEntries: Saldos de tiempo libre Worker Data: Time Off (Time Off Balances), Worker Data: Time Off (Time Off Balances Manager View)
    /workers/{id}/history: Historial de asignación de personal de trabajadores Worker Data: Current Staffing Information
    /supervisoryOrganizations: Estructura de la organización Worker Data: Organization Information
  6. Haz clic en Aceptar.

  7. Haz clic en Listo para guardar los cambios.

Activa los cambios en la política de seguridad

  1. En la barra de búsqueda, escribe Activate Pending Security Policy Changes y selecciona la tarea.
  2. Ingresa un motivo para el cambio en el campo de comentario (por ejemplo, Granting API access for Google SecOps HCM integration).
  3. Haz clic en Aceptar.
  4. Selecciona Confirmar y, luego, haz clic en Aceptar.

Registra el cliente de API para las integraciones

  1. En la barra de búsqueda, escribe Register API Client for Integrations y selecciónala.
  2. Haz clic en Crear.
  3. Proporciona los siguientes detalles de configuración:

    • Nombre del cliente: Ingresa un nombre (por ejemplo, Google SecOps HCM Client).
    • Usuario del sistema: Selecciona el usuario del sistema de integración que creaste (por ejemplo, ISU_SecOps_HCM).
    • Permiso: Selecciona los siguientes permisos:

      Alcance Necesario para
      Dotación de personal /workers y /workers/{id}/history extremos
      Información de contacto Campos de correo electrónico y teléfono del trabajo que muestra /workers (se usan para la correlación de UDM)
      Time Off and Leave Extremo /workers/{id}/timeOffEntries
      Organizaciones y roles Extremo /supervisoryOrganizations
      No configurable por el usuario Cualquier cliente de API de OAuth 2.0 (integración a nivel del sistema y rotación de tokens)
  4. Haz clic en Guardar.

  5. Haz clic en Aceptar.

  6. Copia y guarda el ID de cliente y el secreto del cliente de inmediato.

Genera un token de actualización de OAuth 2.0

  1. En la barra de búsqueda, escribe Manage Refresh Tokens for Integrations y selecciónala.
  2. Haz clic en Generar un nuevo token de actualización.
  3. En el campo Workday Account, busca y selecciona el usuario del sistema de integración (por ejemplo, ISU_SecOps_HCM).
  4. Selecciona el cliente de API que creaste y haz clic en Aceptar.
  5. Copia y guarda el token de actualización.

Obtén las URLs de extremo de API

  1. En la barra de búsqueda, escribe View API Clients y selecciona la opción.
  2. En Clientes de API para integraciones, busca el cliente que creaste (por ejemplo, Google SecOps HCM Client).
  3. Copia y guarda los siguientes detalles:

    • Extremo del token: Es la URL para obtener un token de acceso (por ejemplo, https://wd2-impl-services1.workday.com/ccx/oauth2/YOUR_TENANT/token).
    • Endpoint de API de REST de Workday: Es la URL base para las llamadas a la API (por ejemplo, https://wd2-impl-services1.workday.com/ccx/api/v1/YOUR_TENANT).

Genera un token de acceso de OAuth

Usa curl o un cliente HTTP similar para enviar una solicitud POST al extremo de 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"

Esto devuelve un token de acceso (por ejemplo, "access_token": "abcd1234"). Copia y guarda el token de acceso.

Verifica el acceso a la API

Antes de configurar el feed, verifica que el ISU tenga los permisos necesarios para los extremos clave. Reemplaza las variables por tus valores reales:

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"

Cada prueba debería devolver el estado HTTP 200. Si algún extremo devuelve 403, consulta la sección Solución de problemas que aparece más abajo.

Configura un feed en Google SecOps para transferir datos de Workday HCM

Configura el feed

  1. Ve a Configuración > Administración de datos > Feeds. Si estás en una plataforma solo de SIEM, ve a Configuración > Feeds.
  2. Haz clic en Agregar feed nuevo.
  3. En la página siguiente, haz clic en Configurar un solo feed.
  4. En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, Workday HCM).
  5. Selecciona API de terceros como Tipo de fuente.
  6. Selecciona Workday como el Tipo de registro.
  7. Haz clic en Siguiente.

Configura los parámetros del feed

Especifica valores para los siguientes parámetros de entrada:

  • Nombre de host de la API: Es el nombre de dominio completamente calificado de tu extremo de API de REST de Workday (por ejemplo, wd2-impl-services1.workday.com).

  • Inquilino: Es el último elemento de la ruta de acceso del extremo de API de REST de Workday que identifica tu instancia de Workday.

  • Token de acceso: Es el token de acceso de OAuth que se generó en la sección anterior.

Opciones avanzadas:

  • Espacio de nombres del recurso: Es el espacio de nombres del recurso.
  • Etiquetas de transferencia: Es la etiqueta que se aplicará a los eventos de este feed.
  1. Haz clic en Siguiente.
  2. Revisa la configuración de tu feed de noticias nuevo en la pantalla Finalizar y, luego, haz clic en Enviar.

Soluciona problemas

Error 403 (prohibido) en extremos específicos

Si el feed informa errores o los comandos curl de verificación devuelven 403 para extremos específicos, significa que el usuario del sistema de integración no tiene permisos.

Extremo con errores Corregir
/workers/{id}/timeOffEntries Agrega acceso GET para los dominios Worker Data: Time Off (Time Off Balances) y Worker Data: Time Off (Time Off Balances Manager View). Agrega el permiso Tiempo libre y licencia al cliente de API.
/workers/{id}/history Agrega acceso GET para el dominio Worker Data: Historical Staffing Information. Verifica que el permiso Staffing esté asignado al cliente de API.
/supervisoryOrganizations Agrega acceso GET para el dominio Manage: Supervisory Organization o View: Supervisory Organization. Agrega el permiso Organizaciones y roles al cliente de API.

Después de realizar cambios en los permisos, haz lo siguiente:

  1. Ejecuta Activate Pending Security Policy Changes en Workday.
  2. Si agregaste permisos nuevos al cliente de API, genera un token de actualización nuevo a través de Administra tokens de actualización para integraciones y, luego, genera un token de acceso nuevo.
  3. Actualiza la configuración del feed con el nuevo token de acceso si cambió.

Errores de autenticación

  • 401 No autorizado: El token de acceso venció. Genera un token nuevo con el token de actualización y actualiza el feed.
  • Cliente no válido: Verifica que el ID de cliente y el secreto del cliente sean correctos.
  • Token de actualización no válido: Es posible que se haya revocado el token de actualización. Genera uno nuevo a través de Manage Refresh Tokens for Integrations.

Tabla de asignación de UDM

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

Registro de cambios

Consulta el registro de cambios de este analizador

¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.