Recopila registros de Workday HCM

Compatible con:

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 datos de usuarios de HCM de Workday de 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 contraseñas.

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 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) 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:

    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 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 la 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:

    • Client Name: 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 de /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 de 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 selecciónalo.
  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 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).
    • 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 a continuación.

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

Configura el feed

  1. Ve a Configuración de SIEM > Feeds.
  2. Haz clic en Agregar feed nuevo.
  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 origen.
  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 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 Se agregó 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 de 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 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 Asignado directamente
location.descriptor entity.location.city Asignado directamente
AU_EFFECTIVE_DATE entity.resource.attribute.labels.value Asignado directamente
COMPANY_EFFECTIVE_DATE entity.resource.attribute.labels.value Asignado directamente
ORIG_HIRE_DT entity.resource.attribute.labels.value Asignado directamente
STATUS_EFFECTIVE_DATE entity.resource.attribute.labels.value Asignado directamente
href entity.url Asignado directamente
CONT_START_DTE entity.user.attribute.labels.value Asignado directamente
EMPL_TYPE entity.user.attribute.labels.value Asignado directamente
EXEC_CD entity.user.attribute.labels.value Asignado directamente
EXEC_DESCR entity.user.attribute.labels.value Asignado directamente
HR_Status entity.user.attribute.labels.value Asignado directamente
Is_Active entity.user.attribute.labels.value Asignado directamente
Is_Manager entity.user.attribute.labels.value Asignado directamente
JOB_CODE entity.user.attribute.labels.value Asignado directamente
ORG_CD entity.user.attribute.labels.value Asignado directamente
ORG_Container entity.user.attribute.labels.value Asignado directamente
ORG_Container_Name entity.user.attribute.labels.value Asignado directamente
PER_Status entity.user.attribute.labels.value Asignado directamente
POSITION_NBR entity.user.attribute.labels.value Asignado directamente
PS_ELID entity.user.attribute.labels.value Asignado directamente
REG_TEMP entity.user.attribute.labels.value Asignado directamente
WB_LOGON_ID entity.user.attribute.labels.value Asignado 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 Asignado directamente
Employee_ID entity.user.employee_id Asignado directamente
First_Name entity.user.first_name Asignado directamente
Legal_Name_First_Name entity.user.first_name Asignado 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 Asignado directamente
Legal_Name_Last_Name entity.user.last_name Asignado directamente
gopher-supervisor.primaryWorkEmail entity.user.managers.email_addresses Combinado
Reports_To_EMPLID entity.user.managers.employee_id Asignado 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 Asignado 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 Asignado directamente
timeoff.date entity.user.time_off.interval.start_time Se analizó como RFC 3339
HR_JOB_TITLE entity.user.title Asignado directamente
Job_Profile entity.user.title Asignado directamente
businessTitle entity.user.title Asignado directamente
Full_Name entity.user.user_display_name Asignado directamente
descriptor entity.user.user_display_name Asignado directamente
udm_metadata metadata Se cambió el nombre o se asignó
metadata_entity_type metadata.entity_type Asignado 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 Asignado directamente
Employee_ID metadata.product_entity_id Asignado directamente
id metadata.product_entity_id Asignado directamente
Source_Name metadata.product_name Asignado directamente
userAgent network.http.parsed_user_agent Se cambió el nombre o se asignó
userAgent network.http.user_agent Asignado directamente
sessionId network.session_id Asignado directamente
ipAddress principal.ip Combinado
taskId principal.process.pid Asignado directamente
activityAction_label principal.resource.attribute.labels Combinado
body.event.Submitted_By principal.user.userid Asignado directamente
body.event.Response_Message security_result.action_details Asignado directamente
body.event.Messages security_result.description Asignado 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 Asignado directamente
body.event.Integration_System target.application Asignado directamente
target_data.id target.resource.product_object_id Asignado directamente
deviceType target.resource.resource_subtype Asignado directamente
deviceType target.resource.type Asignado: (?i)(Desktop/Laptop/Mobile)DEVICE
user_display_name target.user.user_display_name Asignado directamente
systemAccount target.user.userid Asignado 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.