Cloud

Automatiser la création de comptes Microsoft 365 avec GitHub Actions

Automatiser la création de comptes Microsoft 365 avec GitHub Actions

Introduction

GitHub Actions permet d’automatiser des workflows directement depuis un repository Git. Dans cet article, nous allons voir comment créer automatiquement des comptes utilisateurs dans un tenant Microsoft 365 en utilisant PowerShell et Microsoft Graph API.

Cas d’usage : Créer des comptes étudiants pour un environnement de formation sans intervention manuelle. L’idée c’est que je puisse créer 25 comptes utilisateurs dans un Tenant de test automatiquement à chaque nouvelle session de formation.

Prérequis

Script(s) PowerShell à exécuter

J’utilise les scripts suivants pour créer les comptes de tests pour les étudiants :

$credential = New-Object System.Management.Automation.PSCredential(
    $env:AZURE_CLIENT_ID,
    (ConvertTo-SecureString $env:AZURE_CLIENT_SECRET -AsPlainText -Force)
)

Connect-MgGraph -TenantId $env:AZURE_TENANT_ID -ClientSecretCredential $credential -NoWelcome

Vous pouvez éventuellement retrouver une version plus complète des quelques lignes ci-dessus avec des sécurités et des try / catch qui permettent de savoir lorsque la connexion n’aboutit pas.

Si vous n’êtes pas familier de GitHub, les références aux termes : AZURE_CLIENT_SECRET ou encore AZURE_TENANT_ID font référence à des secrets GitHub que vous devez configurer dans votre repository pour que ça fonctionne. C’est le même principe qu’avec un Azure KeyVault – l’idée c’est d’éviter de mettre des logins/mdp/Subscribtion ID/Tenant ID ou autres valeurs secrètes dans le coeur de notre script PowerShell.

Création de GitHub Secrets
  • Création des comptes de test (après m’être connecté à Entra ID avec le script précédent). ⬇️
$domain = "yourtenant.onmicrosoft.com"
$passwordProfile = @{
    Password = $env:SDV_O365_ENTRAID_PASSWORD
    ForceChangePasswordNextSignIn = $false
}

for ($i = 1; $i -le 25; $i++) {
    $studentNumber = "student{0:D2}" -f $i
    
    New-MgUser -AccountEnabled $false `
        -DisplayName $studentNumber `
        -MailNickname $studentNumber `
        -UserPrincipalName "$studentNumber@$domain" `
        -PasswordProfile $passwordProfile `
        -UsageLocation "FR"
}

La version ci-dessus ne fait aucun test et si ça plante vous n’aurez aucune information. Par défaut, je vais créer 25 comptes temporaires sur le format student01 jusqu’à student25. Comme précédemment, j’ai préféré mettre le mot de passe par défaut de chaque compte utilisateur dans un GitHub Secret plutôt que directement dans mon script – c’est la référence que j’appelle : SDV_O365_ENTRAID_PASSWORD. Si vous voulez un script plus élaboré et plus complet, personnaliser les attributs pour les comptes, vous pouvez consulter mon script complet en suivant ce lien.

    Création de mon workflow GitHub Actions

    Une fois que vous avez ouvert votre repository dans Visual Studio Code (ou autre logiciel de votre choix) – vous devez respecter l’arborescence suivante pour que votre workflow soit compris par GitHub Action :

    Aperçu de notre workflow github Action

    A la racine de votre repository GitHub, créez un nouveau fichier avec l’extension .yml. Le fichier doit se trouver dans le dossier suivant .github/workflows de votre repository.

    Au sein de votre fichier, insérez le code suivant :

    name: Create Test Accounts + Privileges
    
    on:
      workflow_dispatch:
    
    jobs:
      create-accounts:
        runs-on: ubuntu-latest
        
        steps:
          - name: Checkout repository
            uses: actions/checkout@v4
    
          - name: Install PowerShell modules
            shell: pwsh
            run: |
              Install-Module Microsoft.Graph.Authentication -Force -Scope CurrentUser
              Install-Module Microsoft.Graph.Users -Force -Scope CurrentUser
    
          - name: Connect and create accounts
            shell: pwsh
            env:
              AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
              AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
              AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
              SDV_O365_ENTRAID_PASSWORD: ${{ secrets.SDV_O365_PASSWORD }}
            run: |
              Import-Module Microsoft.Graph.Authentication
              Import-Module Microsoft.Graph.Users
              
              $secureSecret = ConvertTo-SecureString $env:AZURE_CLIENT_SECRET -AsPlainText -Force
              $credential = New-Object System.Management.Automation.PSCredential($env:AZURE_CLIENT_ID, $secureSecret)
              Connect-MgGraph -TenantId $env:AZURE_TENANT_ID -ClientSecretCredential $credential -NoWelcome
              
              ./SDV/Microsoft-365/Accounts-Creation/1-Create-Test-Accounts.ps1
    
    Dans mon workflow ci-dessous, vous voyez également qu’à la fin j’appelle simplement mon script PowerShell afin d’éviter de surcharger mon workflow. C’est plus agréable à lire. Mais cela veut aussi dire que vous pouvez ajouter d’autres scripts PowerShell après l’exécution 1-Create-Test-Accounts.ps1 afin de réaliser d’autres tâches (donner des permisions, attribuer des licences, etc.).

    Concrètement qu’est-ce qui se passe avec ce fichier particulier :

    • Déclenchement : Exécution manuelle uniquement (le workflow s’exécute sur une machine virtuelle Ubuntu fournie gratuitement par GitHub).
    • Actions :
      • Récupère le code du repository
      • Installe les modules PowerShell Graph
      • Se connecte à Microsoft Graph avec App Registration
      • Crée 25 comptes étudiants
      • Attribue les privilèges Global Admin
    • Secrets :
      • Tenant ID, Client ID, Client Secret, Mot de passe
    GitHub Actions provisionne une machine virtuelle Linux Ubuntu temporaire (incluse dans les 2000 minutes gratuites/mois), y installe PowerShell Core et les modules Microsoft Graph, puis exécute les scripts d’automatisation en utilisant les secrets chiffrés comme variables d’environnement. Une fois le workflow terminé, la VM est automatiquement détruite, éliminant tout coût d’infrastructure et toute trace des credentials utilisés.

    Si vous avez tout bien configuré, vous pouvez retourner sur l’interface de GitHub, dans la partie Actions, vous allez retrouver dans la partie à gauche tout en haut le nom de votre workflow automatiquement. Si rien n’apparaît, vérifiez bien l’extension de votre fichier qui doit être en .yml et le bon respect du dossier dans lequel mettre votre fichier : .github/workflows.

    Test d’exécution de notre workflow

    Il ne nous reste plus qu’à tester notre workflow – pour cela, vous cliquez dessus et sélectionnez ensuite le bouton « Run workflow« . Par défaut, le déclenchement est manuel mais il est également possible de le planifier sur le même format qu’une tâche cron.

    Test d’exécution de notre workflow

    Nous pouvons même suivre l’exécution de notre GitHub action :

    Suivi de l’exécution de notre workflow GitHub Actions

    Nous voyons que lors de la génération de la VM Linux par GitHub : on commence par installer les modules PowerShell puis ensuite on exécute le script PowerShell qui va créer mes 25 comptes de tests. Si votre fichier PowerShell affiche des Logs alors vous pourrez également les voir pour confirmer la bonne exécution de votre workflow.

    Facturation de Github Actions

    L’intérêt de GitHub Actions c’est qu’en plus vous avez plein de crédit inclus avec l’offre gratuite. Je n’ai pas encore eu besoin de payer et je l’utilise pour de nombreux workflows personnels. 👍

    • 2000 minutes/mois pour les comptes gratuits
    • Storage : 500 MB d’artefacts
    • Concurrent jobs : 20 jobs simultanés (Free tier)

    Conclusion

    GitHub Actions offre une solution puissante pour automatiser la gestion des comptes Microsoft 365 :

    • Automatisation complète : Plus besoin de créer les comptes manuellement
    • Traçabilité : Tous les changements sont versionnés dans Git
    • Sécurité : Les secrets sont chiffrés et jamais exposés
    • Reproductibilité : Le workflow peut être réutilisé et partagé
    • Gratuit : 2000 minutes/mois incluses

    Ressources

    Share
    Published by
    thibault

    Recent Posts

    Telegram Cocoon : une nouvelle ère pour la sécurité des communications

    Telegram Cocoon : une nouvelle ère pour la sécurité des communications Introduction Telegram Cocoon, une…

    8 heures ago

    Netflix s’offre Warner Bros pour 82,7 milliards de dollars : Un tournant majeur pour le streaming

    Netflix s'offre Warner Bros pour 82,7 milliards de dollars : Un tournant majeur pour le…

    2 jours ago

    Zorin OS atteint un million de téléchargements grâce à Microsoft

    Zorin OS atteint un million de téléchargements grâce à Microsoft Introduction Zorin OS, une distribution…

    2 semaines ago

    Stargate fait son grand retour sur Amazon Prime Video : une nouvelle série en préparation

    Première série : Stargate SG-1 avec Richard Dean Anderson en héro principale Amazon MGM Studios…

    2 semaines ago

    WhatsApp : la fonction multi-comptes arrive enfin… d’abord sur iPhone

    WhatsApp : la fonction multi-comptes arrive enfin... d'abord sur iPhone Après des années de demandes,…

    2 semaines ago

    Gmail peut lire vos emails et pièces jointes pour entraîner son IA, sauf si vous refusez

    Gmail peut lire vos emails et pièces jointes pour entraîner son IA, sauf si vous…

    2 semaines ago