Automatiser les tâches de désintégrage des employés après leur dernier jour de travail à l’aide des API de workflows de cycle de vie

Ce tutoriel fournit des instructions pas à pas pour configurer des tâches de désintéglage pour les employés après leur dernier jour de travail à l’aide des API de workflows de cycle de vie. Dans ce scénario, le congédiement de l’employé est planifié, y compris éventuellement une période de préavis. Pour un scénario d’arrêt en temps réel, consultez Effectuer des tâches de désintéglage des employés en temps réel à l’aide des API de workflows de cycle de vie.

Dans ce tutoriel, vous apprenez à effectuer les opérations suivantes :

  • Configurez un workflow de cycle de vie pour case activée pour les employés d’un service spécifique, quelques jours après leur dernier jour de travail.
  • Configurez une tâche pour exécuter les tâches suivantes dans l’ordre :
    • Supprimer toutes les licences pour l’utilisateur
    • Supprimer un utilisateur de toutes les équipes
    • Supprimer le compte d’utilisateur
  • Surveillez les status du flux de travail et les tâches associées.

Configuration requise

Pour suivre ce didacticiel, vous avez besoin des ressources et privilèges suivants :

  • Cette fonctionnalité nécessite Gouvernance Microsoft Entra ID licences. Pour trouver la licence adaptée à vos besoins, consultez Gouvernance Microsoft Entra ID principes fondamentaux des licences.
  • Connectez-vous à un client API tel que Graph Explorer d’appeler Microsoft Graph avec un compte qui a au moins le rôle Administrateur Microsoft Entra cycle de vie.
  • Accordez-vous l’autorisation déléguée Microsoft Graph LifecycleWorkflows.ReadWrite.All .
  • Créez un compte d’utilisateur de test que vous utilisez pour représenter un employé quittant votre organization. Ce compte d’utilisateur de test est supprimé lors de l’exécution du workflow. Attribuez des licences et des appartenances Teams au compte d’utilisateur de test.

Créer un workflow « leaver »

Demande

La requête suivante crée un workflow de désintégrage avec les paramètres suivants :

  • Il peut être exécuté à la demande, mais pas selon la planification. Cette étape nous permet de valider le workflow à l’aide du compte de l’utilisateur de test. Le flux de travail est mis à jour pour s’exécuter selon la planification plus loin dans ce tutoriel.
  • Le flux de travail s’exécute sept jours après le employeeLeaveDateTime de l’employé, et s’il se trouve dans le service « Marketing ».
  • Trois tâches de flux de travail sont activées pour s’exécuter dans l’ordre : l’utilisateur est désattribué toutes les licences, puis supprimé de toutes les équipes, puis son compte d’utilisateur est supprimé.
POST https://graph.microsoft.com/v1.0/identityGovernance/LifecycleWorkflows/workflows
Content-type: application/json

{
    "category": "leaver",
    "displayName": "Post-Offboarding of an employee",
    "description": "Configure offboarding tasks for employees after their last day of work",
    "isEnabled": true,
    "isSchedulingEnabled": false,
    "executionConditions": {
        "@odata.type": "#microsoft.graph.identityGovernance.triggerAndScopeBasedConditions",
        "scope": {
            "@odata.type": "#microsoft.graph.identityGovernance.ruleBasedSubjectSet",
            "rule": "department eq 'Marketing'"
        },
        "trigger": {
            "@odata.type": "#microsoft.graph.identityGovernance.timeBasedAttributeTrigger",
            "timeBasedAttribute": "employeeLeaveDateTime",
            "offsetInDays": 7
        }
    },
    "tasks": [
        {
            "category": "leaver",
            "continueOnError": false,
            "description": "Remove all licenses assigned to the user",
            "displayName": "Remove all licenses for user",
            "executionSequence": 1,
            "isEnabled": true,
            "taskDefinitionId": "8fa97d28-3e52-4985-b3a9-a1126f9b8b4e",
            "arguments": []
        },
        {
            "category": "leaver",
            "continueOnError": false,
            "description": "Remove user from all Teams memberships",
            "displayName": "Remove user from all Teams",
            "executionSequence": 2,
            "isEnabled": true,
            "taskDefinitionId": "81f7b200-2816-4b3b-8c5d-dc556f07b024",
            "arguments": []
        },
        {
            "category": "leaver",
            "continueOnError": false,
            "description": "Delete user account in Azure AD",
            "displayName": "Delete User Account",
            "executionSequence": 3,
            "isEnabled": true,
            "taskDefinitionId": "8d18588d-9ad3-4c0f-99d0-ec215f0e3dff",
            "arguments": []
        }
    ]
}

Réponse

HTTP/1.1 201 Created
Content-Type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#identityGovernance/lifecycleWorkflows/workflows/$entity",
    "category": "leaver",
    "description": "Configure offboarding tasks for employees after their last day of work",
    "displayName": "Post-Offboarding of an employee",
    "lastModifiedDateTime": "2024-03-03T18:29:10.8412536Z",
    "createdDateTime": "2024-03-03T18:29:10.8412352Z",
    "deletedDateTime": null,
    "id": "15239232-66ed-445b-8292-2f5bbb2eb833",
    "isEnabled": true,
    "isSchedulingEnabled": false,
    "nextScheduleRunDateTime": null,
    "version": 1,
    "executionConditions": {
        "@odata.type": "#microsoft.graph.identityGovernance.triggerAndScopeBasedConditions",
        "scope": {
            "@odata.type": "#microsoft.graph.identityGovernance.ruleBasedSubjectSet",
            "rule": "department eq 'Marketing'"
        },
        "trigger": {
            "@odata.type": "#microsoft.graph.identityGovernance.timeBasedAttributeTrigger",
            "timeBasedAttribute": "employeeLeaveDateTime",
            "offsetInDays": 7
        }
    }
}

Exécuter le flux de travail

Étant donné que le workflow n’est pas planifié pour s’exécuter, il doit être exécuté manuellement, à la demande. Dans la requête suivante, l’utilisateur qui est la cible du workflow est identifié par l’ID df744d9e-2148-4922-88a8-633896c1e929.

Lorsque vous exécutez un workflow à la demande, les tâches sont exécutées, que l’état utilisateur corresponde ou non aux conditions d’exécution de l’étendue et du déclencheur. Par conséquent, même si l’utilisateur n’est pas dans le service « Marketing » ou si son employeeLeaveDateTime est défini sur null, cette commande exécute toujours les tâches définies dans le flux de travail pour l’utilisateur.

La requête retourne un code de réponse 204 No Content .

POST https://graph.microsoft.com/v1.0/identityGovernance/LifecycleWorkflows/workflows/15239232-66ed-445b-8292-2f5bbb2eb833/activate

{
    "subjects": [
        {
            "id": "df744d9e-2148-4922-88a8-633896c1e929"
        }
    ]
}

Vérifier les tâches et les status de flux de travail

À tout moment, vous pouvez surveiller la status des workflows et des tâches à trois niveaux.

  • Surveillez les tâches au niveau de l’utilisateur.
  • Surveillez le résumé général agrégé des résultats au niveau de l’utilisateur pour un flux de travail, dans une période spécifiée.
  • Récupérez le journal détaillé de toutes les tâches exécutées pour un utilisateur spécifique dans le workflow.

Option 1 : Surveiller les tâches d’un flux de travail au niveau de l’utilisateur

Demande

GET https://graph.microsoft.com/v1.0/identityGovernance/LifecycleWorkflows/workflows/15239232-66ed-445b-8292-2f5bbb2eb833/userProcessingResults

Réponse

HTTP/1.1 200 OK
Content-Type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#identityGovernance/lifecycleWorkflows/workflows('15239232-66ed-445b-8292-2f5bbb2eb833')/userProcessingResults",
    "value": [
        {
            "id": "40efc576-840f-47d0-ab95-5abca800f8a2",
            "completedDateTime": "2024-03-03T18:31:00.3581066Z",
            "failedTasksCount": 0,
            "processingStatus": "completed",
            "scheduledDateTime": "2024-03-03T18:30:43.154495Z",
            "startedDateTime": "2024-03-03T18:30:46.9357178Z",
            "totalTasksCount": 3,
            "totalUnprocessedTasksCount": 0,
            "workflowExecutionType": "onDemand",
            "workflowVersion": 1,
            "subject": {
                "id": "df744d9e-2148-4922-88a8-633896c1e929"
            }
        }
    ]
}

Option 2 : Obtenir le résumé général agrégé des résultats au niveau de l’utilisateur pour un flux de travail, dans une période spécifiée

Demande

GET https://graph.microsoft.com/v1.0/identityGovernance/LifecycleWorkflows/workflows/15239232-66ed-445b-8292-2f5bbb2eb833/userProcessingResults/summary(startDateTime=2024-03-01T00:00:00Z,endDateTime=2024-03-30T00:00:00Z)

Réponse

HTTP/1.1 200 OK
Content-Type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#microsoft.graph.identityGovernance.userSummary",
    "failedTasks": 0,
    "failedUsers": 0,
    "successfulUsers": 1,
    "totalTasks": 3,
    "totalUsers": 1
}

Option 3 : Récupérer le journal détaillé de toutes les tâches exécutées pour un utilisateur spécifique dans le workflow

Demande

GET https://graph.microsoft.com/v1.0/identityGovernance/LifecycleWorkflows/workflows/15239232-66ed-445b-8292-2f5bbb2eb833/userProcessingResults/40efc576-840f-47d0-ab95-5abca800f8a2/taskProcessingResults

Réponse

HTTP/1.1 200 OK
Content-Type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#identityGovernance/lifecycleWorkflows/workflows('15239232-66ed-445b-8292-2f5bbb2eb833')/userProcessingResults('40efc576-840f-47d0-ab95-5abca800f8a2')/taskProcessingResults",
    "value": [
        {
            "completedDateTime": "2024-03-03T18:30:50.483365Z",
            "createdDateTime": "2024-03-03T18:30:47.6125438Z",
            "id": "78650318-7238-4e7e-852f-2c36cbeff340",
            "processingStatus": "completed",
            "startedDateTime": "2024-03-03T18:30:50.0549446Z",
            "failureReason": null,
            "subject": {
                "id": "df744d9e-2148-4922-88a8-633896c1e929"
            },
            "task": {
                "category": "leaver",
                "continueOnError": false,
                "description": "Remove all licenses assigned to the user",
                "displayName": "Remove all licenses for user",
                "executionSequence": 1,
                "id": "f71246b2-269c-4ba6-ab8e-afc1a05114cb",
                "isEnabled": true,
                "taskDefinitionId": "8fa97d28-3e52-4985-b3a9-a1126f9b8b4e",
                "arguments": []
            }
        },
        {
            "completedDateTime": "2024-03-03T18:30:57.6034021Z",
            "createdDateTime": "2024-03-03T18:30:47.8824313Z",
            "id": "3d2e459d-5614-42e4-952b-0e917b5f6646",
            "processingStatus": "completed",
            "startedDateTime": "2024-03-03T18:30:53.6770279Z",
            "failureReason": null,
            "subject": {
                "id": "df744d9e-2148-4922-88a8-633896c1e929"
            },
            "task": {
                "category": "leaver",
                "continueOnError": false,
                "description": "Remove user from all Teams memberships",
                "displayName": "Remove user from all Teams",
                "executionSequence": 2,
                "id": "ed545f03-e8d8-45fb-9cbd-15c937f2a866",
                "isEnabled": true,
                "taskDefinitionId": "81f7b200-2816-4b3b-8c5d-dc556f07b024",
                "arguments": []
            }
        },
        {
            "completedDateTime": "2024-03-03T18:31:00.0894515Z",
            "createdDateTime": "2024-03-03T18:30:48.0004721Z",
            "id": "03359fa6-c63c-4573-92c2-4c9518ca98aa",
            "processingStatus": "completed",
            "startedDateTime": "2024-03-03T18:30:59.6195169Z",
            "failureReason": null,
            "subject": {
                "id": "df744d9e-2148-4922-88a8-633896c1e929"
            },
            "task": {
                "category": "leaver",
                "continueOnError": false,
                "description": "Delete user account in Azure AD",
                "displayName": "Delete User Account",
                "executionSequence": 3,
                "id": "b4cefaa0-6ceb-461d-bbf5-ec69246463fd",
                "isEnabled": true,
                "taskDefinitionId": "8d18588d-9ad3-4c0f-99d0-ec215f0e3dff",
                "arguments": []
            }
        }
    ]
}

[Facultatif] Planifier l’exécution automatique du workflow

Après avoir exécuté votre workflow à la demande et vérifié que tout fonctionne correctement, vous pouvez activer le flux de travail afin qu’il puisse s’exécuter automatiquement selon une planification définie par le locataire. Exécutez la requête suivante.

La requête retourne un code de réponse 204 No Content . Lorsqu’un flux de travail est planifié, le moteur workflows de cycle de vie vérifie toutes les trois heures les utilisateurs dans la condition d’exécution associée et exécute les tâches configurées pour ces utilisateurs. Vous pouvez personnaliser cette périodicité d’une heure à 24 heures.

PATCH https://graph.microsoft.com/v1.0/identityGovernance/lifecycleWorkflows/workflows/15239232-66ed-445b-8292-2f5bbb2eb833
Content-type: application/json

{
    "isEnabled": true,
    "isSchedulingEnabled": true
}