Gestion de vos groupes Azure Active Directory en PowerShell

J’ai récemment dû aider un client à gérer les membres de ses groupes au sein d’Azure Active Directory. Mais comme il voulait réaliser des actions massives : ajout en fonction de critères spécifiques – il était exclu de la faire manuellement. Nous avons donc réalisé ces actions en PowerShell.

Etape 0 – Préparation du scénario

Je vous propose un petit scénario de test dans l’article suivant pour voir comment on peut faire cela. Je vais créer un certain nombre d’utilisateurs et de groupes – puis nous allons voir ce que nous pouvons faire en PowerShell.

Dans mon cas, je dispose de plusieurs comptes de test. La problématique a laquelle j’avais été confronté provenait d’une université donc on va reprendre une logique similaire.

J’ai créé plusieurs comptes de test sur le format suivant :

  • prenom.nom.xxxx@domain.tld
    • Dans mon cas, les xxx peuvent être remplacés par “user” pour définir un étudiant, “teacher” pour le compte d’une professeur et enfin “collab” pour un prestataire de service.
Comptes de test Azure AD
Comptes de test Azure AD

J’ai également besoin de créer 3 groupes de tests pour contenir mes étudiants, professeurs et collaborateurs externes.

Groupes de test Azure AD
Groupes de test Azure AD

Objectif : Je vais donc vouloir positionner chacun de mes comptes dans le groupe qui le concerne. A savoir :

  • Group-Collaborators pour tous les prestataires externes – qui ont donc la mention “Collab” dans leur UPN ;
  • Group-Teachers pour les enseignants ;
  • Group-Users pour les étudiants.

Dans un premier temps, nous allons faire cela en PowerShell. Mais nous verrons que nous pouvons également utiliser les groupes dynamiques dans la dernière partie de l’article.

Etape 1 – Intégration d’1 utilisateur à 1 groupe

Avant tout, vous allez avoir besoin du module PowerShell Azure AD sur votre poste de travail. Pour ce faire, installez le en utilisant la commande suivante :

Install-Module AzureAD

Répondez “Yes” pour l’installation du module.

Ensuite, vous devrez vous connecter en PowerShell à votre Azure Active Directory. Pour ce faire, utilisez la commande suivante :

Connect-AzureAD

Vous aurez alors la mire d’authentification Office 365. Identifiez-vous avec un compte qui dispose de suffisamment de privilèges pour gérer les utilisateurs et/ou groupes Azure Active Directory. Dans mon cas, je suis Global Administrator.

Vous pouvez alors utiliser la commande suivante pour voir la liste de vos utilisateurs :

Get-AzureADUser

Et celle-ci pour la liste de vos groupes :

Get-AzureADGroup

Vous devriez avoir le rendu similaire suivant (dans mon cas c’est un tenant de test les résultats sont donc plus limités) :

List des utilisateurs et groupes au sein de mon Azure Active Directory
List des utilisateurs et groupes au sein de mon Azure Active Directory

On retrouve bien tous mes comptes de tests et les groupes que j’ai créé précédemment. 🙂

On peut utiliser la commande Get-AzureADGroupMember avec l’ObjectId du groupe concerné pour obtenir la liste des membres d’un groupe donné. Dans mon cas, on voit que mon groupe “Group-Users” est pour l’instant vide. Aucun retour. 😉

Get-AzureADGroup
Get-AzureADGroup

Pour ajouter un utilisateur comme étant membre d’un groupe nous avons besoin de connaître l’ObjectId de l’utilisateur et du groupe qui sont concernés. A partir de là, on peut utiliser la commande Add-AzureADGroupMember pour intégrer un utilisateur dans un groupe :

Add-AzureADGroupMember -ObjectId 30499fa8-639c-4367-84ea-310dcc1d879c -RefObjectId 50408f51-2af9-477b-9fae-3a55a72c2ca9

Le premier paramètre ObjectId correspond à la référence du groupe tandis que le second paramètre correspond à l’ObjectId de l’utilisateur concerné.

Get-AzureADGroupMember
Get-AzureADGroupMember

On a ajouté un utilisateur à mon groupe. Lorsque l’on exécute à nouveau la commande précédente, on voit bien que désormais je dispose d’un membre. Si vous voulez supprimer un utilisateur d’un groupe, il vous suffit d’utiliser la commande Remove-AzureADGroupMember avec la même logique au niveau des paramètres.

Cela étant dit, nous l’avons fait de manière unitaire. Mais nous voudrions le faire de manière massive pour que tous nos utilisateurs aillent dans le groupe qui leur convient. 😉

Etape 2 – Intégration des utilisateurs dans leurs groupes respectifs en PowerShell

J’ai utilisé le script ci-dessous pour analyser chacun de mes utilisateurs et l’intégrer au groupe qui convient en fonction de ce que j’ai pu détecter dans son adresse email/UPN.

$all_users = Get-AzureADUser

foreach ($user in $all_users)
{
    if ($user.USerPrincipalName -match ".user")
    {
        Write-Host "LOG - Account: $($user.DisplayName) is a user/student - Adding to Group-Users" -ForegroundColor Yellow
        Add-AzureADGroupMember -ObjectId (Get-AzureADGroup -SearchString "Group-Users").ObjectId -RefObjectId $user.ObjectId
    }

    elseif ($User.UserPrincipalName -match ".teacher")
    {
        Write-Host "LOG - Account: $($user.DisplayName) is a teacher - Adding to Group-Teachers" -ForegroundColor Green
        Add-AzureADGroupMember -ObjectId (Get-AzureADGroup -SearchString "Group-Teachers").ObjectId -RefObjectId $user.ObjectId
    }

    elseif ($User.UserPrincipalName -match ".collab")
    {
        Write-Host "LOG - Account: $($user.DisplayName) is a Collaborator - Adding to Group-Collaborators" -ForegroundColor Cyan
        Add-AzureADGroupMember -ObjectId (Get-AzureADGroup -SearchString "Group-Collaborators").ObjectId -RefObjectId $user.ObjectId
    }

    else
    {
        Write-Host "LOG - Account: $($user.DisplayName) is corresponding to nothing managed. Not added to nothing." -ForegroundColor Red
    }   
}

Je récupère tous mes utilisateurs et pour chacun d’entre eux je regarde si je trouve la mention : .teacher, .user, .collab dans l’adresse. En fonction de cette lecture, j’ajoute l’utilisateur concerné au groupe qui convient.

En revanche, si je ne vois rien qui convienne alors je n’ajoute cet utilisateur nul part. Une fois le script exécuté, j’ai le retour suivant :

Exécution du script PowerShell
Exécution du script PowerShell

On voit donc bien que tous mes comptes de test ont bien été ajoutés dans les groupes pertinents. On peut également vérifier le résultat sur l’interface graphique de Azure Active Directory pour chaque groupe concerné.

Groupe Azure Active Directory - Etudiants
Groupe Azure Active Directory – Etudiants
Groupe Azure Active Directory - Enseignants
Groupe Azure Active Directory – Enseignants
Groupe Azure Active Directory - Prestataires
Groupe Azure Active Directory – Prestataires

C’est terminé. 🙂

Je ne rentre pas dans les détails du script. Il y a plusieurs façons de faire et vous devrez certainement l’adapter en fonction de vos contraintes. En cas de besoin, utilisez la zone commentaires pour vos questions.

Maintenant, sachez que l’on peut faire mieux que du PowerShell dans le cas précis… Et cela nous amène à l’étape 3. 😉

Etape 3 – Utilisation des groupes dynamiques

Depuis un moment maintenant, O365 et Azure Active Directory vous permettent de créer ce que l’on appelle des groupes dynamiques. Ces groupes dynamiques se mettent – et surtout, se maintiennent à jour – en fonction des conditions que vous configurez !

Ce n’est pas le cas de notre script PowerShell que vous devrez exécuter à nouveau régulièrement.

Rendez-vous dans Azure Active Directory, puis tentez de créer un nouveau groupe. Sauf, qu’au moment de choisir l’option Membership type – choisissez Dynamic User.

Création d'un groupe Azure Active Directory dynamique
Création d’un groupe Azure Active Directory dynamique

Cliquez ensuite sur Add dynamic query pour définir les conditions à vérifier pour être automatiquement ajouté à ce groupe Azure Active Directory.

Création de votre query
Création de votre query

Vous pouvez écrire la requête tout seul si vous êtes à l’aise avec ce type d’outils. Sinon, le plus simple est encore d’utiliser les menus déroulants qui sont à votre disposition pour définir votre condition.

Si je reprends un cas précédemment évoqué, les enseignants, alors je dois sélectionner les options suivantes :

  • Property : userPrincipalName
  • Operator : Match
  • Value : .teacher

Et le mieux, c’est que vous pouvez tester votre requête ! 🙂

Pour ce faire, utilisez l’onglet Validate Rules (Preview). Sélectionnez tous nos utilisateurs de test sur la droite. Vous verrez que cette règle ne va s’appliquer qu’aux comptes qui possèdent la mention “.teacher“.

Test de votre query
Test de votre query

On voit clairement que notre requête fonctionne. Seuls les comptes concernés sont détectés par notre requête. 🙂

Il ne vous reste plus qu’à sauvegarder et finaliser la création de ce groupe.

L’intérêt de cette seconde méthode et que le calcul des membres de votre groupe est automatique. Il n’est pas nécessaire d’exécuter à nouveau un script ou quoique ce soit. Si vous créez un nouvel utilisateur avec la même logique, alors il sera intégré au groupe automatiquement. Inversement, si un utilisateur ne respecte plus la requête, alors il sera retiré du groupe concerné.

Plus d’infos sur les groupes dynamiques en suivant ce lien.

Pour toute question, n’hésitez pas à utiliser la zone des commentaires ci-dessous ! 🙂