Collecter les journaux Workday HCM

Compatible avec :

Ce document explique comment ingérer des journaux Workday HCM dans Google Security Operations en configurant un flux à l'aide de l'API tierce.

L'analyseur extrait les données utilisateur Workday HCM des journaux au format JSON. Il gère diverses transformations de données, y compris le changement de nom des champs, la fusion d'objets imbriqués, l'analyse des dates et le remplissage des champs UDM pour les attributs utilisateur, les informations sur l'emploi et la structure organisationnelle.

Avant de commencer

Assurez-vous de remplir les conditions suivantes :

  • Une instance Google SecOps
  • Un accès privilégié à Workday avec des autorisations d'administrateur de la sécurité ou équivalentes

Configurer l'authentification de l'API Workday

Créer un utilisateur du système d'intégration (ISU)

  1. Connectez-vous à Workday avec des droits d'administrateur.
  2. Dans la barre de recherche, saisissez Create Integration System User (Créer un utilisateur du système d'intégration), puis sélectionnez la tâche.
  3. Saisissez un nom d'utilisateur (par exemple, ISU_SecOps_HCM).
  4. Définissez un mot de passe.
  5. Définissez Session Timeout Minutes (Délai avant expiration de la session en minutes) sur 0 pour éviter que l'ISU n'expire.
  6. Activez l'option Do Not Allow UI Sessions (Ne pas autoriser les sessions d'interface utilisateur) pour renforcer la sécurité en limitant les connexions à l'interface utilisateur.
  7. Accédez à la tâche Maintain Password Rules (Gérer les règles de mot de passe).
  8. Ajoutez l'utilisateur du système d'intégration au champ System Users exempt from password expiration (Utilisateurs du système exemptés de l'expiration du mot de passe).

Créer un groupe de sécurité d'intégration

  1. Dans la barre de recherche, saisissez Create Security Group (Créer un groupe de sécurité), puis sélectionnez la tâche.
  2. Recherchez le champ Type of Tenanted Security Group (Type de groupe de sécurité locataire), puis sélectionnez Integration System Security Group (Unconstrained) (Groupe de sécurité du système d'intégration (sans contrainte)).
  3. Saisissez un nom pour le groupe de sécurité (par exemple, ISG_SecOps_HCM).
  4. Cliquez sur OK.
  5. Cliquez sur Edit (Modifier) pour le groupe de sécurité que vous venez de créer.
  6. Attribuez l'utilisateur du système d'intégration de l'étape précédente au groupe de sécurité.
  7. Cliquez sur OK.

Accorder l'accès au domaine au groupe de sécurité

Le flux Google SecOps récupère les données de quatre points de terminaison de l'API REST Workday. Chaque point de terminaison nécessite que des autorisations spécifiques de la stratégie de sécurité du domaine soient accordées au groupe de sécurité d'intégration.

  1. Dans la barre de recherche, saisissez Maintain Permissions for Security Group (Gérer les autorisations pour le groupe de sécurité), puis sélectionnez la tâche.
  2. Choisissez le groupe de sécurité que vous avez créé (par exemple, ISG_SecOps_HCM) dans la liste Source Security Group (Groupe de sécurité source).
  3. Cliquez sur OK.
  4. Accédez à Domain Security Policy Permissions (Autorisations de la stratégie de sécurité du domaine).
  5. Ajoutez l'accès GET pour chacun des domaines suivants :

    Point de terminaison de l'API Stratégies de sécurité du domaine requises
    /workers : liste et profils des employés Worker Data: Public Worker Reports
    /workers/{id}/timeOffEntries : soldes de congés Worker Data: Time Off (Time Off Balances), Worker Data: Time Off (Time Off Balances Manager View)
    /workers/{id}/history : historique du personnel Worker Data: Historical Staffing Information
    /supervisoryOrganizations : structure organisationnelle Manage: Supervisory Organization ou View: Supervisory Organization
  6. Cliquez sur OK.

  7. Cliquez sur OK pour enregistrer les modifications.

Activer les modifications de la stratégie de sécurité

  1. Dans la barre de recherche, saisissez Activate Pending Security Policy Changes (Activer les modifications en attente de la stratégie de sécurité), puis sélectionnez la tâche.
  2. Saisissez une raison pour la modification dans le champ de commentaire (par exemple, Granting API access for Google SecOps HCM integration).
  3. Cliquez sur OK.
  4. Sélectionnez Confirm (Confirmer), puis cliquez sur OK.

Enregistrer le client API pour les intégrations

  1. Dans la barre de recherche, saisissez Register API Client for Integrations (Enregistrer le client API pour les intégrations), puis sélectionnez-le.
  2. Cliquez sur Créer.
  3. Fournissez les informations de configuration suivantes :

    • Client Name (Nom du client) : saisissez un nom (par exemple, Google SecOps HCM Client).
    • System User (Utilisateur du système) : sélectionnez l'utilisateur du système d'intégration que vous avez créé (par exemple, ISU_SecOps_HCM).
    • Scope (Champ d'application) : sélectionnez les champs d'application suivants :

      Champ d'application Obligatoire pour
      Personnel Points de terminaison /workers et /workers/{id}/history
      Congés et absences Point de terminaison /workers/{id}/timeOffEntries
      Organisations et rôles Point de terminaison /supervisoryOrganizations
  4. Cliquez sur Enregistrer.

  5. Cliquez sur OK.

  6. Copiez et enregistrez immédiatement l'ID client et le code secret du client.

Générer un jeton d'actualisation OAuth 2.0

  1. Dans la barre de recherche, saisissez Manage Refresh Tokens for Integrations (Gérer les jetons d'actualisation pour les intégrations), puis sélectionnez-le.
  2. Cliquez sur Generate New Refresh Token (Générer un jeton d'actualisation).
  3. Dans le champ Workday Account (Compte Workday), recherchez et sélectionnez l'utilisateur du système d'intégration (par exemple, ISU_SecOps_HCM).
  4. Sélectionnez le client API que vous avez créé, puis cliquez sur OK.
  5. Copiez et enregistrez le jeton d'actualisation.

Obtenir les URL des points de terminaison de l'API

  1. Dans la barre de recherche, saisissez View API Clients (Afficher les clients API), puis sélectionnez-le.
  2. Sous API Clients for Integrations (Clients API pour les intégrations), recherchez le client que vous avez créé (par exemple, Google SecOps HCM Client).
  3. Copiez et enregistrez les informations suivantes :

    • Token Endpoint (Point de terminaison du jeton) : URL permettant d'obtenir un jeton d'accès (par exemple, https://wd2-impl-services1.workday.com/ccx/oauth2/YOUR_TENANT/token).
    • Workday REST API Endpoint (Point de terminaison de l'API REST Workday) : URL de base pour les appels d'API (par exemple, https://wd2-impl-services1.workday.com/ccx/api/v1/YOUR_TENANT).

Générer un jeton d'accès OAuth

  • Utilisez curl ou un client HTTP semblable pour envoyer une requête POST au point de terminaison du jeton :

    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"
    

Un jeton d'accès est renvoyé (par exemple, "access_token": "abcd1234"). Copiez et enregistrez le jeton d'accès.

Vérifier l'accès à l'API

  • Avant de configurer le flux, vérifiez que l'ISU dispose des autorisations requises pour les points de terminaison clés. Remplacez les variables par vos valeurs réelles :

    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"
    

Chaque test doit renvoyer l'état HTTP 200. Si un point de terminaison renvoie 403, consultez la section Dépannage.

Configurer un flux dans Google SecOps pour ingérer des données Workday HCM

Configurer le flux

  1. Accédez à Paramètres SIEM > Flux.
  2. Cliquez sur Add New Feed (Ajouter un flux).
  3. Sur la page suivante, cliquez sur Configure a single feed (Configurer un seul flux).
  4. Dans le champ Feed name (Nom du flux), saisissez un nom pour le flux (par exemple, Workday HCM).
  5. Sélectionnez Third Party API (API tierce) comme Source type (Type de source).
  6. Sélectionnez Workday comme Log type (Type de journal).
  7. Cliquez sur Suivant.

Configurer les paramètres du flux

  1. Spécifiez des valeurs pour les paramètres d'entrée suivants :

    • API Hostname (Nom d'hôte de l'API) : nom de domaine complet de votre point de terminaison de l'API REST Workday (par exemple, wd2-impl-services1.workday.com).

    • Tenant (Locataire) : dernier élément de chemin d'accès de votre point de terminaison de l'API REST Workday qui identifie votre instance Workday.

    • Access token (Jeton d'accès) : jeton d'accès OAuth généré dans la section précédente.

    Options avancées :

    • Asset namespace (Espace de noms de l'élément) : l'espace de noms de l'élément.
    • Ingestion labels (Libellés d'ingestion) : libellé à appliquer aux événements de ce flux.
  2. Cliquez sur Suivant.

  3. Vérifiez la configuration de votre nouveau flux dans l'écran Finalize (Finaliser), puis cliquez sur Submit (Envoyer).

Dépannage

403 Interdit sur des points de terminaison spécifiques

Si le flux signale des erreurs ou si les commandes curl de validation renvoient 403 pour des points de terminaison spécifiques, l'utilisateur du système d'intégration ne dispose pas des autorisations nécessaires.

Point de terminaison en échec Corriger
/workers/{id}/timeOffEntries Ajoutez l'accès GET pour les domaines Worker Data: Time Off (Time Off Balances) et Worker Data: Time Off (Time Off Balances Manager View). Ajoutez le champ d'application Congés et absences au client API.
/workers/{id}/history Ajoutez l'accès GET pour le domaine Worker Data: Historical Staffing Information. Vérifiez que le champ d'application Personnel est attribué au client API.
/supervisoryOrganizations Ajoutez l'accès GET pour le domaine Manage: Supervisory Organization ou View: Supervisory Organization. Ajoutez le champ d'application Organisations et rôles au client API.

Après avoir modifié les autorisations :

  1. Exécutez Activate Pending Security Policy Changes (Activer les modifications en attente de la stratégie de sécurité) dans Workday.
  2. Si vous avez ajouté des champs d'application au client API, générez un jeton d'actualisation via Manage Refresh Tokens for Integrations (Gérer les jetons d'actualisation pour les intégrations), puis générez un jeton d'accès.
  3. Mettez à jour la configuration du flux avec le nouveau jeton d'accès si celui-ci a été modifié.

Erreurs d'authentification

  • 401 Non autorisé : le jeton d'accès a expiré. Générez un jeton à l'aide du jeton d'actualisation et mettez à jour le flux.
  • Client non valide : vérifiez que l'ID client et le code secret du client sont corrects.
  • Jeton d'actualisation non valide : le jeton d'actualisation a peut-être été révoqué. Générez-en un via Manage Refresh Tokens for Integrations (Gérer les jetons d'actualisation pour les intégrations).

Table de mappage UDM

Champ du journal Mappage UDM Logique
@timestamp metadata.event_timestamp.seconds Analyse en tant qu'horodatage en secondes depuis l'epoch
businessTitle entity.entity.user.title Mappage direct
descriptor entity.entity.user.user_display_name Mappage direct
Employee_ID entity.entity.user.employee_id Mappage direct
Employee_ID entity.metadata.product_entity_id Mappé lorsque id n'est pas présent
gopher-supervisor.descriptor entity.entity.user.managers.user_display_name Mappage direct
gopher-supervisor.id entity.entity.user.managers.product_object_id Mappage direct
gopher-supervisor.primaryWorkEmail entity.entity.user.managers.email_addresses Mappage direct
gopher-time-off.date entity.entity.user.time_off.interval.start_time Analyse en tant que date
gopher-time-off.descriptor entity.entity.user.time_off.description Mappage direct
Hire_Date entity.entity.user.hire_date Analyse en tant que date
id entity.metadata.product_entity_id Mappage direct lorsqu'il est présent
Job_Profile entity.entity.user.title Mappé lorsque businessTitle n'est pas présent
Legal_Name_First_Name entity.entity.user.first_name Mappage direct
Legal_Name_Last_Name entity.entity.user.last_name Mappage direct
location.descriptor entity.entity.location.city Mappage direct
primarySupervisoryOrganization.descriptor entity.entity.user.department Mappage direct
primaryWorkEmail entity.entity.user.email_addresses Mappage direct
primaryWorkPhone entity.entity.user.phone_numbers Mappage direct
Termination_Date entity.entity.user.termination_date Analyse en tant que date
Work_Email entity.entity.user.email_addresses Mappé lorsque primaryWorkEmail n'est pas présent
collection_time metadata.event_timestamp.collected_timestamp Mappage direct

Vous avez encore besoin d'aide ? Obtenez des réponses auprès des membres de la communauté et des professionnels Google SecOps.