rss logo

Microsoft Entra : Comment automatiser les tâches de Microsoft 365 et AzureAD avec PowerShell en activant l'authentification sans mot de passe ?

Microsoft 365 Logo

Dans le milieu professionnel, de plus en plus de services Microsoft sont externalisés vers leurs solutions cloud internes : Microsoft365/Azure/Entra. Cela peut sembler indigeste, mais c'est un fait. L'utilisation de PowerShell pour administrer ces services est presque obligatoire, et pour ouvrir une console d'administration powershell il faut généralement s'authentifier avec un identifiant, un mot de passe et également le logiciel microsoft authenticator. Mais comment exécuter des scripts qui doivent être lancés automatiquement et nécessiteront donc une authentification sans aucune interaction humaine? Eh bien, c'est exactement ce que je vais expliquer dans cet article : comment s'authentifier à ExchangeOnlineManagement et AzureAD avec PowerShell sans mot de passe!

Prérequis

  • Prérequis :
    • .Net : 4.7.2
    • Tls : 1.2

Il faudra s'assurer que l'on dispose d'une version de .Net au moins égale à 4.7.2 et de Tls en version 1.2. Par exemple, à partir d'un serveur Windows 2016, j'ai dû mettre à jour ma version de .Net et activer Tls à 1.2.

  • Afficher la version actuelle de Tls :
PS C:\> [Net.ServicePointManager]::SecurityProtocol Ssl3, Tls
  • Définir la version Tls en 1.2 pour le contexte actuel de la session :
PS C:\> [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 PS C:\> [Net.ServicePointManager]::SecurityProtocol Tls12
  • Alternativement, on pourra exécuter ce script PowerShell afin d'activer Tls 1.2 de façon permanente :
If (-Not (Test-Path 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319')) { New-Item 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319' -Force | Out-Null } New-ItemProperty -Path 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319' -Name 'SystemDefaultTlsVersions' -Value '1' -PropertyType 'DWord' -Force | Out-Null New-ItemProperty -Path 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -PropertyType 'DWord' -Force | Out-Null If (-Not (Test-Path 'HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319')) { New-Item 'HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319' -Force | Out-Null } New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319' -Name 'SystemDefaultTlsVersions' -Value '1' -PropertyType 'DWord' -Force | Out-Null New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -PropertyType 'DWord' -Force | Out-Null If (-Not (Test-Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server')) { New-Item 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server' -Force | Out-Null } New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server' -Name 'Enabled' -Value '1' -PropertyType 'DWord' -Force | Out-Null New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server' -Name 'DisabledByDefault' -Value '0' -PropertyType 'DWord' -Force | Out-Null If (-Not (Test-Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client')) { New-Item 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client' -Force | Out-Null } New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client' -Name 'Enabled' -Value '1' -PropertyType 'DWord' -Force | Out-Null New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client' -Name 'DisabledByDefault' -Value '0' -PropertyType 'DWord' -Force | Out-Null

Création d'un certificat auto-signé

Nous aurons besoin d'un certificat comme moyen d'authentification pour nos scripts. Nous allons donc en créer un nouveau sur la machine sur laquelle nous souhaitons lancer nos scripts.

  • Depuis une console PowerShell ouverte avec les droits administrateur, créer un certificat auto-signé, ici valable pour une durée de 10 ans dans le magasin Ordinateur Local\Personnel :
PS C:\> $cert = New-SelfSignedCertificate -CertStoreLocation Cert:\LocalMachine\My -NotAfter (Get-Date).AddYears(10) -Subject "CN=Office365Automation" -KeySpec KeyExchange
  • Utiliser la commande certlm.msc pour ouvrir la console de Gestion de certificats et vérifier la présence du certificat précédement créé :
Capture d'écran du gestionnaire de certificats Windows montrant un certificat nommé Office365Automation dans le magasin de certificats personnels.
  • Exporter le certificat auto-signé vers le fichier mycert.cer dans C:\ :
PS C:\> $cert = Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object { $_.Subject -eq "CN=Office365Automation" } PS C:\> Export-Certificate -Cert $cert -FilePath "C:\mycert.cer"

Microsoft Entra

Écran de connexion de Microsoft Entra avec un exemple d'adresse électronique et des options pour créer un compte ou récupérer l'accès.

Inscription de l'application

  • Chercher le terme inscription d'applications dans la barre de recherche :
Capture d'écran du centre d'administration Microsoft Entra montrant les résultats de recherche pour inscriptions d'applications avec l'option mise en évidence.
  • Cliquer sur Nouvelle inscription:
Capture d'écran de la page Inscriptions d'applications dans Microsoft Entra avec le bouton Nouvelle inscription mis en évidence.
  • Entrer un Nom, choisir Locataire unique et cliquer sur S'inscrire :
Capture d'écran de la page Inscrire une application dans Microsoft Entra avec le nom VulgarDisplayOfPowerShell et l'option Comptes dans cet annuaire d'organisation uniquement sélectionnée.
  • Aller dans le menu API autorisées et cliquer sur Ajouter une autorisation :
Capture d'écran de la page API autorisées dans Microsoft Entra avec le bouton Ajouter une autorisation et la section des autorisations configurées pour PowerShellAuto mis en évidence.
  • Depuis l'onglet API utilisées par mon organisation, rechercher le terme Office 365 Exchange (ou directement l'id: 00000002-0000-0ff1-ce00-000000000000) et cliquer sur Office 365 Exchange Online :
Capture d'écran de la page Demander des autorisations d'API dans Microsoft Entra avec l'onglet API utilisées par mon organisation et l'option Office 365 Exchange Online mis en évidence.
  • Choisir Autorisation d'applicaiton puis cocher les cases full_access_as_app et Exchange.ManageAsApp puis cliquer sur Ajouter des autorisations :
Capture d'écran de la page Demander des autorisations d'API dans Microsoft Entra avec les permissions full_access_as_app et Exchange.ManageAsApp pour Office 365 Exchange Online sélectionnées et le bouton Ajouter des permissions mis en évidence.
  • Faire de même avec Microsoft Graph (ou directement l'id: 00000003-0000-0000-c000-000000000000):
Capture d'écran de la page Request API permissions dans Microsoft Entra mettant en évidence l'onglet APIs my organization uses avec Microsoft Graph API sélectionné.
  • Rechercher l'autorisation Directory.ReadWrite.All (et Mail.Send si l'on a besoin de pouvoir envoyer des mails depuis notre script), cocher la case associée et cliquer sur Ajouter des autorisations :
Capture d'écran de la page Request API permissions dans Microsoft Entra sélectionnant les permissions d'application Directory.ReadWrite.All et Mail.Send pour Microsoft Graph API avec le bouton Add permissions en surbrillance.
  • Depuis le menu API autorisées, cliquer sur Accorder un consentement d'administrateur :
Capture d'écran de la page API autorisées dans Microsoft Entra avec le bouton Accorder un consentement d'administrateur pour STD et les autorisations configurées mises en évidence.

Importer le certificat

  • Dans le menu Certificats & secrets, cliquer sur l'onglet Certificats puis sur Télécharger le certificat :
Capture d'écran de la page Certificats et secrets dans Microsoft Entra avec l'onglet Certificats et le bouton Télécharger le certificat mis en évidence.
  • Importer le certificat précédement créé et cliquer sur Ajouter :
Capture d'écran de la fenêtre Télécharger le certificat dans Microsoft Entra avec le champ pour sélectionner le fichier, la description PowerShellAutoCert et le bouton Ajouter mis en évidence.
  • Une fois importé, le certificat devrait apparaitre :
Capture d'écran de la section Certificats et secrets dans Microsoft Entra affichant le certificat PowerShellAutoCert avec son empreinte numérique, sa date de début, sa date d'expiration et son ID mis en évidence.
  • Depuit le menu Vue d'ensemble, récupérer les informations sur ID d'application, ID de l'objet et ID de l'annuaire :
Capture d'écran de la vue d'ensemble de l'application PowerShellAuto dans Microsoft Entra, montrant les IDs d'application, d'objet et d'annuaire mis en évidence, ainsi que les options de gestion et les informations client.

Microsoft Entra rôles et administrateurs

  • Depuis la barre de recherche, chercher rôles et administrateurs Microsoft Entra :
Capture d'écran montrant l'interface du centre d'administration Microsoft Entra avec la recherche et l'option 'Rôles et administrateurs Microsoft Entra' sélectionnée dans le menu des services.
  • Depuis Tous les rôles chercher Administrateur Exchange et éditer le rôle (⚠️cela donnera les droits administrateur complet à l'application pour Exchange, envisagez de donner des droits plus restreints⚠️) :
Capture d’écran montrant l’interface Microsoft Entra avec la recherche du rôle Administrateur Exchange, mettant en évidence le rôle sélectionné qui peut gérer tous les aspects du produit Exchange.
  • Cliquer sur Ajouter des affectations :
Capture d’écran de l’interface Administrateur Exchange dans Microsoft Entra, montrant le bouton Ajouter des affectations pour attribuer le rôle d’administrateur Exchange.
  • Chercher le nom de l'Application précédemment créé :
Capture d’écran du processus Ajouter des affectations dans Microsoft Entra, avec PowerShellAuto sélectionné comme application à attribuer dans le rôle d’administrateur Exchange.
  • Toujours depuis le menu Tous les rôles, chercher Administrateur général (⚠️cela donnera les droits administrateur complet à l'application pour AzureAD, envisager de donner des droits plus restreints⚠️) :
Capture d’écran de l’interface Microsoft Entra affichant la liste des rôles d’administration, avec le rôle Administrateur général mis en évidence, décrivant ses privilèges et son type intégré.
  • Comme pour le rôle Administrateur Exchange, cliquer sur Ajouter des affectations :
Capture d’écran de l’interface Microsoft Entra montrant la section Administrateur général avec une option Ajouter des affectations mise en évidence pour attribuer des rôles.
  • Rechercher le nom de l'Application précédemment définie :
Capture d’écran du processus Ajouter des affectations dans Microsoft Entra, avec PowerShellAuto sélectionné comme application à attribuer dans le rôle d’administrateur Exchange.

Connexion avec PowerShell

Logo PowerShell

Maintenant que tout a été configuré dans le portail Entra, on peut ouvrir une console PowerShell (avec les droits administrateur) afin de se connecter aux environnements de gestion Exchange Online Management et AzureAd sans mot de passe.

Les Modules PowerShell

  • Installer les modules PowerShell pour ExchangeOnlineManagement et Microsoft Graph :
PS C:\> Install-Module -name ExchangeOnlineManagement PS C:\> Install-Module -name Microsoft.Graph
  • Vérifier que l'on peut importer les modules et entrer la commande powershell.exe -ExecutionPolicy Unrestricted si l'erreur suivante apparait :
PS C:\> Import-Module ExchangeOnlineManagement Import-Module : File C:\Program Files\WindowsPowerShell\Modules\ExchangeOnlineManagement\3.4.0\netFramework\ExchangeOnlineManagement.psm1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170. At line:1 char:1 + Import-Module ExchangeOnlineManagement + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : SecurityError: (:) [Import-Module], PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess,Microsoft.PowerShell.Commands.ImportModuleCommand PS C:\> PowerShell.exe -ExecutionPolicy Unrestricted PS C:\> Import-Module ExchangeOnlineManagement PS C:\> Import-Module Microsoft.Graph

Connexion aux services

  • Récupérer l'empreinte du certificat :
PS C:\> Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object { $_.Subject -eq "CN=Office365Automation" } | Select-Object Thumbprint Thumbprint ---------- 05E5C016FA061E38265D863F04C6CAFC674C84B0
  • Les arguments :
    • CertificateThumbprint : Empreinte du certificat autosigné
    • AppId ou ApplicationId : Application ID
    • Organization or TenantDomain : le nom du compte au format XXX.onmicrosoft.com ou le nom de domaine
  • Se connecter à ExchangeOnline avec les informations précédemment collectées :
PS C:\> Connect-ExchangeOnline -CertificateThumbprint "05E5C016FA061E38265D863F04C6CAFC674C84B0" -AppId "0fe06d0b-XXXXXX-XXXX-XXXX-XXXXXXXXXXXX" -Organization "XXX.onmicrosoft.com" -ShowBanner:$false
  • Se connecter à Microsoft Graph :
PS C:\> Connect-MgGraph -CertificateThumbprint "05E5C016FA061E38265D863F04C6CAFC674C84B0" -ApplicationId "0fe06d0b-XXXXXX-XXXX-XXXX-XXXXXXXXXXXX" -Tenant "XXX.onmicrosoft.com" -NoWelcome

Tests

Une fois connecté, et grace aux droits définis précédemment, on devrait être capable de créer un compte Office365 et définir des droits AzureAD.

  • Par exemple ici, avec la création d'une Boite aux lettres et l'obkgation donnée à l'utilisateur de changer son mot de passe à la première connexion :
PS C:\> New-Mailbox -Name "Jane Doe" -DisplayName "Jane Doe" -MicrosoftOnlineServicesID "jane.doe@STD.onmicrosoft.com" -Password (ConvertTo-SecureString -String "P@ssW0rDSuXX" -AsPlainText -Force) -FirstName "Jane" -LastName "Doe" PS C:\> Set-Mailbox -Identity "Jane Doe" -Office "In Hell To Pay" PS C:\> Update-MgUser -UserId "jane.doe@STD.onmicrosoft.com" -PasswordProfile @{ Password = "P@ssW0rDSuXX"; ForceChangePasswordNextSignIn= $true } -Department "In Hell To Pay" -UsageLocation "FR"
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Contact :

contact mail address