Se connecter avec Azure PowerShell
Azure PowerShell prend en charge plusieurs méthodes d’authentification. Le moyen le plus simple pour commencer est d’utiliser Azure Cloud Shell, qui vous connecte automatiquement. Avec une installation locale, vous pouvez vous connecter de manière interactive par le biais de votre navigateur. Lors de l’écriture de scripts pour l’automatisation, l’approche recommandée consiste à utiliser un principal de service avec les autorisations nécessaires. Lorsque vous limitez le plus possible les autorisations de connexion pour votre cas d’usage, vous assurez une meilleure protection de vos ressources Azure.
À la base, vous êtes connecté au premier abonnement que retourne Azure si vous avez accès à plusieurs abonnements. Par défaut, les commandes sont exécutées sur cet abonnement. Pour changer votre abonnement actif sur une session, utilisez l’applet de commande Set-AzContext. Pour changer votre abonnement actif et le rendre persistant entre les sessions sur le même système, utilisez l’applet de commande Select-AzContext.
Important
Vos informations d’identification sont partagées entre plusieurs sessions PowerShell tant que vous restez connecté. Pour plus d’informations, consultez Objets de contexte Azure PowerShell.
Connexion interactive
Pour vous connecter de manière interactive, utilisez la cmdlet Connect-AzAccount.
Connect-AzAccount
Cette applet de commande présente une invite de connexion basée sur un navigateur interactive par défaut.
Utilisez l’applet de commande Get-AzContext pour stocker votre ID de locataire dans une variable à utiliser dans les deux sections suivantes de cet article.
$tenantId = (Get-AzContext).Tenant.Id
Authentification de code d’appareil
Vous pouvez spécifier le paramètre UseDeviceAuthentication
pour utiliser l’authentification de code d’appareil au lieu d’un contrôle de navigateur.
Connect-AzAccount -UseDeviceAuthentication
Connexion avec un principal de service
Les principaux de service sont des comptes Azure non interactifs. À l’instar des autres comptes d’utilisateur, leurs autorisations sont gérées avec Azure Active Directory. En accordant uniquement les autorisations nécessaires à un principal de service, vous vous assurez que vos scripts d’automatisation restent sécurisés.
Pour savoir comment créer un principal de service à utiliser avec Azure PowerShell, voir Créer un principal du service Azure avec Azure PowerShell.
Pour se connecter avec un principal de service, utilisez le paramètre ServicePrincipal
de l’applet de commande Connect-AzAccount
. Vous aurez également besoin de l’ID d’application du principal de service, des informations d’identification de connexion ainsi que de l’ID du locataire associé au principal du service. La façon dont vous vous connectez à un principal de service varie selon que celui-ci a été configuré pour l’authentification par mot de passe ou l’authentification par certificat.
L’authentification basée sur un mot de passe
Créez un principal de service à utiliser dans les exemples de cette section. Pour plus d’informations sur la création de principaux de service, consultez Créer un principal de service avec Azure PowerShell.
$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName
Avertissement
Le secret du principal de service fourni est stocké dans le fichier AzureRmContext.json
de votre profil utilisateur ($env:USERPROFILE\.Azure
). Assurez-vous que ce répertoire dispose des protections appropriées.
Pour obtenir les informations d’identification du principal de service en tant qu’objet approprié, utilisez la cmdlet Get-Credential. Cette applet de commande présente une invite pour entrer un nom d’utilisateur et un mot de passe. Utilisez la valeur applicationID
du principal de service comme nom d’utilisateur et convertissez son secret
en texte brut pour le mot de passe.
# Retrieve the plain text password for use with `Get-Credential` in the next command.
$sp.PasswordCredentials.SecretText
$pscredential = Get-Credential -UserName $sp.AppId
Connect-AzAccount -ServicePrincipal -Credential $pscredential -Tenant $tenantId
Pour les scénarios d’automatisation, vous devez créer des informations d’identification à partir des valeurs AppId
et SecretText
d’un principal de service :
$SecureStringPwd = $sp.PasswordCredentials.SecretText | ConvertTo-SecureString -AsPlainText -Force
$pscredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $sp.AppId, $SecureStringPwd
Connect-AzAccount -ServicePrincipal -Credential $pscredential -Tenant $tenantId
Lorsque vous automatisez les connexions au principal de service, utilisez les bonnes pratiques relatives au stockage des mots de passe.
Authentification par certificat
L’authentification par certificat nécessite qu’Azure PowerShell puisse récupérer des informations à partir d’un magasin de certificats local en se basant sur l’empreinte numérique du certificat.
Connect-AzAccount -ApplicationId $appId -Tenant $tenantId -CertificateThumbprint <thumbprint>
Quand vous utilisez un principal de service au lieu d’une application inscrite, spécifiez le paramètre ServicePrincipal et fournissez l’ID d’application du principal de service comme valeur du paramètre ApplicationId.
Connect-AzAccount -ServicePrincipal -ApplicationId $servicePrincipalId -Tenant $tenantId -CertificateThumbprint <thumbprint>
Dans Windows PowerShell 5.1, le magasin de certificats peut être géré et inspecté avec le module PKI. Pour PowerShell 7.x et versions ultérieures, le processus est plus complexe. Les scripts suivants montrent comment importer un certificat existant dans le magasin de certificats qui est accessible via PowerShell.
Importer un certificat dans Windows PowerShell 5.1
# Import a PFX
$credentials = Get-Credential -Message 'Provide PFX private key password'
Import-PfxCertificate -FilePath <path to certificate> -Password $credentials.Password -CertStoreLocation cert:\CurrentUser\My
Importer un certificat dans PowerShell 7.x et versions ultérieures
# Import a PFX
$storeName = [System.Security.Cryptography.X509Certificates.StoreName]::My
$storeLocation = [System.Security.Cryptography.X509Certificates.StoreLocation]::CurrentUser
$store = [System.Security.Cryptography.X509Certificates.X509Store]::new($storeName, $storeLocation)
$certPath = <path to certificate>
$credentials = Get-Credential -Message "Provide PFX private key password"
$flag = [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable
$certificate = [System.Security.Cryptography.X509Certificates.X509Certificate2]::new($certPath, $credentials.Password, $flag)
$store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite)
$store.Add($Certificate)
$store.Close()
Se connecter avec une identité managée
Les identités managées sont une fonctionnalité d’Azure Active Directory. Les identités managées sont des principaux de service affectés aux ressources s’exécutant dans Azure. Vous pouvez utiliser un principal de service d’identité managée pour vous connecter, et un jeton d’accès réservé à l’application afin d’accéder à d’autres ressources. Les identités managées sont disponibles uniquement sur les ressources en cours d’exécution dans un cloud Azure.
Cet exemple se connecte avec l’identité managée de l’environnement hôte. Par exemple, si elle est exécutée sur une machine virtuelle avec une identité MSI affectée, cela permet au code de se connecter avec cette identité affectée.
Connect-AzAccount -Identity
L’exemple suivant se connecte avec l’identité MSI myUserAssignedIdentity
. Il ajoute l’identité affectée par l’utilisateur à la machine virtuelle, puis se connecte à l’aide du ClientId
de l’identité affectée par l’utilisateur. Pour plus d’informations, consultez Configurer des identités managées pour les ressources Azure sur une machine virtuelle Azure.
$identity = Get-AzUserAssignedIdentity -ResourceGroupName 'myResourceGroup' -Name 'myUserAssignedIdentity'
Get-AzVM -ResourceGroupName contoso -Name testvm | Update-AzVM -IdentityType UserAssigned -IdentityId $identity.Id
Connect-AzAccount -Identity -AccountId $identity.ClientId # Run on the virtual machine
Account SubscriptionName TenantId Environment
------- ---------------- -------- -----------
yyyy-yyyy-yyyy-yyyy Subscription1 xxxx-xxxx-xxxx-xxxx AzureCloud
Se connecter avec un locataire non défini par défaut ou en tant que fournisseur de solutions cloud (CSP)
Si votre compte est associé à plusieurs locataires, le paramètre Tenant doit être spécifié au moment de la connexion. Ce paramètre fonctionne avec n’importe quelle méthode de connexion. Lors de la connexion, cette valeur de paramètre peut être l’ID d’objet Azure du locataire (ID de locataire) ou le nom de domaine complet du client.
Si vous êtes fournisseur de solutions Cloud (CSP), la valeur du paramètre Tenant doit être un ID de locataire.
Connect-AzAccount -Tenant '00000000-0000-0000-0000-000000000000'
Connexion à un autre cloud
Les services cloud Azure offrent des environnements conformes à la réglementation régionale sur la gestion des données. Pour les comptes situés dans un cloud régional, définissez l’environnement quand vous vous connectez avec le paramètre Environment. Ce paramètre fonctionne avec n’importe quelle méthode de connexion. Par exemple, si votre compte se trouve dans Azure China 21Vianet :
Connect-AzAccount -Environment AzureChinaCloud
La commande suivante retourne la liste des environnements disponibles :
Get-AzEnvironment | Select-Object -Property Name