Recopila registros de Workday HCM

Se admite en los siguientes sistemas operativos:

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

El analizador extrae los datos del usuario de HCM de Workday de los registros con formato JSON. Maneja varias transformaciones de datos, como el cambio de nombre de los campos, la combinación de objetos anidados, el análisis de fechas y la propagación de campos del 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:

  • Es 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 Session Timeout Minutes 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 Usuarios del sistema exentos del vencimiento de la contraseña.

Crea un grupo de seguridad de integración

  1. En la barra de búsqueda, escribe Create Security Group y selecciona la tarea.
  2. Ubica 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 en 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 SecOps de Google recupera datos de cuatro extremos de la API de REST de Workday. Cada endpoint 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) en la lista Grupo de seguridad de origen.
  3. Haz clic en Aceptar.
  4. Ve a Permisos de política de seguridad del dominio.
  5. Agrega acceso de GET para cada uno de los siguientes dominios:

    Endpoint 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 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 comentarios (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 Extremos /workers y /workers/{id}/history
      Información de contacto Campos de correo electrónico y teléfono del trabajo que devuelve /workers (se usan para la correlación del UDM)
      Ausencias y licencias Extremo /workers/{id}/timeOffEntries
      Organizaciones y roles Extremo /supervisoryOrganizations
      Tenant Non-Configurable 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 Administrar tokens de actualización para integraciones y selecciona esa opción.
  2. Haz clic en Generate New Refresh Token.
  3. En el campo Cuenta de Workday, 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 URLs de extremo de API

  1. En la barra de búsqueda, escribe View API Clients y selecciónala.
  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:

    • Token Endpoint: Es la URL para obtener un token de acceso (por ejemplo, https://wd2-impl-services1.workday.com/ccx/oauth2/YOUR_TENANT/token).
    • Extremo de la 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 la ISU tenga los permisos necesarios para los endpoints 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 debe devolver el estado HTTP 200. Si algún extremo devuelve 403, consulta la sección Solución de problemas que se encuentra más abajo.

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

Configura el feed

  1. Ve a Configuración de SIEM > Feeds.
  2. Haz clic en Add New Feed.
  3. En la siguiente página, 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 el Tipo de fuente.
  6. Selecciona Día laboral 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).

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

  • Token de acceso: Es el token de acceso de OAuth generado 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 nueva configuración del feed en la pantalla Finalizar y, luego, haz clic en Enviar.

Soluciona problemas

403 Forbidden en extremos específicos

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

Falla en el extremo Corregir
/workers/{id}/timeOffEntries Agrega acceso de GET para los dominios Worker Data: Time Off (Time Off Balances) y Worker Data: Time Off (Time Off Balances Manager View). Agrega el alcance Time Off and Leave al cliente de la API.
/workers/{id}/history Agrega acceso de GET para el dominio Worker Data: Historical Staffing Information. Verifica que el alcance de Staffing esté asignado al cliente de la API.
/supervisoryOrganizations Agrega acceso de GET para el dominio Manage: Supervisory Organization o View: Supervisory Organization. Agrega el permiso Organizaciones y roles al cliente de API.

Después de cambiar los permisos, haz lo siguiente:

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

Errores de autenticación

  • 401 Unauthorized: 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 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 Administrar tokens de actualización para integraciones.

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 Se analizó como RFC 3339
Hire_Date entity.user.hire_date Se analizó 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 Se analizó como RFC 3339
timeoff.descriptor entity.user.time_off.description Asignada directamente
timeoff.date entity.user.time_off.interval.start_time Se analizó 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 Se analizó como MM/dd/yyyy HH:mm:ss a
body.time metadata.event_timestamp Se analizó como UNIX_MS
requestTime metadata.event_timestamp Se analizó como RFC 3339
timestamp metadata.event_timestamp Se analizó 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.