Collecter les journaux Workday HCM
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)
- Connectez-vous à Workday avec des droits d'administrateur.
- 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.
- Saisissez un nom d'utilisateur (par exemple,
ISU_SecOps_HCM). - Définissez un mot de passe.
- Définissez Session Timeout Minutes (Délai avant expiration de la session en minutes) sur
0pour éviter que l'ISU n'expire. - 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.
- Accédez à la tâche Maintain Password Rules (Gérer les règles de mot de passe).
- 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
- Dans la barre de recherche, saisissez Create Security Group (Créer un groupe de sécurité), puis sélectionnez la tâche.
- 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)).
- Saisissez un nom pour le groupe de sécurité (par exemple,
ISG_SecOps_HCM). - Cliquez sur OK.
- Cliquez sur Edit (Modifier) pour le groupe de sécurité que vous venez de créer.
- Attribuez l'utilisateur du système d'intégration de l'étape précédente au groupe de sécurité.
- 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.
- 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.
- 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). - Cliquez sur OK.
- Accédez à Domain Security Policy Permissions (Autorisations de la stratégie de sécurité du domaine).
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ésWorker Data: Public Worker Reports/workers/{id}/timeOffEntries: soldes de congésWorker Data: Time Off (Time Off Balances),Worker Data: Time Off (Time Off Balances Manager View)/workers/{id}/history: historique du personnelWorker Data: Historical Staffing Information/supervisoryOrganizations: structure organisationnelleManage: Supervisory OrganizationouView: Supervisory OrganizationCliquez sur OK.
Cliquez sur OK pour enregistrer les modifications.
Activer les modifications de la stratégie de sécurité
- 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.
- Saisissez une raison pour la modification dans le champ de commentaire (par exemple,
Granting API access for Google SecOps HCM integration). - Cliquez sur OK.
- Sélectionnez Confirm (Confirmer), puis cliquez sur OK.
Enregistrer le client API pour les intégrations
- Dans la barre de recherche, saisissez Register API Client for Integrations (Enregistrer le client API pour les intégrations), puis sélectionnez-le.
- Cliquez sur Créer.
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 /workerset/workers/{id}/historyCongés et absences Point de terminaison /workers/{id}/timeOffEntriesOrganisations et rôles Point de terminaison /supervisoryOrganizations
- Client Name (Nom du client) : saisissez un nom (par exemple,
Cliquez sur Enregistrer.
Cliquez sur OK.
Copiez et enregistrez immédiatement l'ID client et le code secret du client.
Générer un jeton d'actualisation OAuth 2.0
- 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.
- Cliquez sur Generate New Refresh Token (Générer un jeton d'actualisation).
- Dans le champ Workday Account (Compte Workday), recherchez et sélectionnez l'utilisateur du système d'intégration (par exemple,
ISU_SecOps_HCM). - Sélectionnez le client API que vous avez créé, puis cliquez sur OK.
- Copiez et enregistrez le jeton d'actualisation.
Obtenir les URL des points de terminaison de l'API
- Dans la barre de recherche, saisissez View API Clients (Afficher les clients API), puis sélectionnez-le.
- Sous API Clients for Integrations (Clients API pour les intégrations), recherchez le client que vous avez créé (par exemple,
Google SecOps HCM Client). 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).
- Token Endpoint (Point de terminaison du jeton) : URL permettant d'obtenir un jeton d'accès (par exemple,
Générer un jeton d'accès OAuth
Utilisez
curlou 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
- Accédez à Paramètres SIEM > Flux.
- Cliquez sur Add New Feed (Ajouter un flux).
- Sur la page suivante, cliquez sur Configure a single feed (Configurer un seul flux).
- Dans le champ Feed name (Nom du flux), saisissez un nom pour le flux (par exemple,
Workday HCM). - Sélectionnez Third Party API (API tierce) comme Source type (Type de source).
- Sélectionnez Workday comme Log type (Type de journal).
- Cliquez sur Suivant.
Configurer les paramètres du flux
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.
Cliquez sur Suivant.
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 :
- Exécutez Activate Pending Security Policy Changes (Activer les modifications en attente de la stratégie de sécurité) dans Workday.
- 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.
- 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.