Anmelden mit Azure PowerShell

Azure PowerShell unterstützt mehrere Authentifizierungsmethoden. Den einfachsten Einstieg ermöglicht der Azure Cloud Shell-Dienst, der Sie automatisch anmeldet. Bei einer lokalen Installation können Sie sich interaktiv über Ihren Browser anmelden. Beim Schreiben von Skripts für die Automatisierung besteht der empfohlene Ansatz darin, einen Dienstprinzipal mit den erforderlichen Berechtigungen zu verwenden. Indem Sie die Anmeldeberechtigungen für Ihren Anwendungsfall so weit wie möglich einschränken, tragen Sie zur Sicherheit Ihrer Azure-Ressourcen bei.

Zunächst sind Sie beim ersten Abonnement angemeldet, das von Azure zurückgegeben wird, wenn Sie Zugriff auf mehrere Abonnements haben. Befehle werden für dieses Abonnement standardmäßig ausgeführt. Verwenden Sie das Cmdlet Set-AzContext, um Ihr aktives Abonnement für eine Sitzung zu ändern. Um Ihr aktives Abonnement zu ändern und es zwischen Sitzungen auf demselben System beizubehalten, verwenden Sie das Cmdlet Select-AzContext.

Wichtig

Ihre Anmeldeinformationen werden in mehreren PowerShell-Sitzungen gemeinsam verwendet, solange Sie angemeldet bleiben. Weitere Informationen finden Sie unter Azure PowerShell-Kontextobjekte.

Interaktives Anmelden

Verwenden Sie für die interaktive Anmeldung das Cmdlet Connect-AzAccount.

Connect-AzAccount

Dieses Cmdlet zeigt standardmäßig eine browserbasierte interaktive Anmeldeaufforderung an.

Verwenden Sie das Cmdlet Get-AzContext, um Ihre Mandanten-ID in einer Variablen zu speichern, die in den nächsten beiden Abschnitten dieses Artikels verwendet werden soll.

$tenantId = (Get-AzContext).Tenant.Id

Gerätecodeauthentifizierung

Sie können den Parameter UseDeviceAuthentication angeben, um die Gerätecodeauthentifizierung anstelle eines Browsersteuerelements zu verwenden.

Connect-AzAccount -UseDeviceAuthentication

Anmelden mit einem Dienstprinzipal

Dienstprinzipale sind nicht interaktive Azure-Konten. Wie bei anderen Benutzerkonten auch, werden die Berechtigungen mit Azure Active Directory verwaltet. Indem für einen Dienstprinzipal nur die benötigten Berechtigungen gewährt werden, bleibt die Sicherheit Ihrer Automatisierungsskripts gewahrt.

Informationen zur Erstellung eines Dienstprinzipals für die Verwendung mit PowerShell finden Sie unter Erstellen eines Azure-Dienstprinzipals mit Azure PowerShell.

Verwenden Sie für die Anmeldung mit einem Dienstprinzipal das Cmdlet Connect-AzAccount mit dem Parameter ServicePrincipal. Sie benötigen auch die Anwendungs-ID und die Anmeldeinformationen des Dienstprinzipals sowie die dem Dienstprinzipal zugeordnete Mandanten-ID. Wie Sie sich mit einem Dienstprinzipal anmelden, hängt davon ab, ob er für die kennwortbasierte oder die zertifikatbasierte Authentifizierung konfiguriert wurde.

Kennwortbasierte Authentifizierung

Erstellen Sie einen Dienstprinzipal für die Verwendung in den Beispielen in diesem Abschnitt. Weitere Informationen zum Erstellen von Dienstprinzipalen finden Sie unter Erstellen eines Azure-Dienstprinzipals mit Azure PowerShell.

$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName

Warnung

Der bereitgestellte Dienstprinzipalschlüssel wird in der AzureRmContext.json-Datei in Ihrem Benutzerprofil ($env:USERPROFILE\.Azure) gespeichert. Stellen Sie sicher, dass dieses Verzeichnis ausreichend geschützt ist.

Verwenden Sie das Cmdlet Get-Credential, um die Anmeldeinformationen des Dienstprinzipals als entsprechendes Objekt abzurufen. Mit diesem Cmdlet wird eine Eingabeaufforderung für Benutzername und Kennwort angezeigt. Verwenden Sie die applicationID des Dienstprinzipals für den Benutzernamen, und konvertieren Sie dessen secret in Nur-Text für das Kennwort.

# 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

Für Automatisierungsszenarien müssen Sie Anmeldeinformationen aus der AppId und dem SecretText eines Dienstprinzipals erstellen:

$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

Achten Sie darauf, gute Methoden für die Kennwortspeicherung zu verwenden, wenn Sie Dienstprinzipalverbindungen automatisieren.

Zertifikatbasierte Authentifizierung

Zertifikatbasierte Authentifizierung erfordert, dass Azure PowerShell Informationen von einem lokalen Zertifikatsspeicher basierend auf einem Fingerabdruck des Zertifikats abrufen kann.

Connect-AzAccount -ApplicationId $appId -Tenant $tenantId -CertificateThumbprint <thumbprint>

Wenn Sie einen Dienstprinzipal anstelle einer registrierten Anwendung verwenden, geben Sie den Parameter ServicePrincipal und die Anwendungs-ID des Dienstprinzipals als Wert für den Parameter ApplicationId an.

Connect-AzAccount -ServicePrincipal -ApplicationId $servicePrincipalId -Tenant $tenantId -CertificateThumbprint <thumbprint>

In Windows PowerShell 5.1 kann der Zertifikatspeicher mit den PKI-Modul verwaltet und überprüft werden. Für PowerShell 7.x und höher ist der Prozess komplizierter. Die folgenden Skripts zeigen, wie ein vorhandenes Zertifikat in den für PowerShell zugänglichen Zertifikatspeicher importiert wird.

Importieren eines Zertifikats in 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

Importieren eines Zertifikats in PowerShell Core 7.x und höher

# 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()

Anmelden mit einer verwalteten Identität

Verwaltete Identitäten sind ein Feature von Azure Active Directory. Bei verwalteten Identitäten handelt es sich um Dienstprinzipale, die den in Azure ausgeführten Ressourcen zugewiesen sind. Sie können den Dienstprinzipal einer verwalteten Identität für die Anmeldung verwenden und ein App-exklusives Zugriffstoken für den Zugriff auf andere Ressourcen verwenden. Verwaltete Identitäten stehen nur für Ressourcen zur Verfügung, die in einer Azure-Cloud ausgeführt werden.

In diesem Beispiel wird mithilfe der verwalteten Identität der Hostumgebung eine Verbindung hergestellt. Beispiel: Bei der Ausführung auf einem virtuellen Computer (VirtualMachine) mit einer zugewiesenen verwalteten Dienstidentität wird dadurch dem Code die Anmeldung mithilfe dieser zugewiesenen Identität ermöglicht.

 Connect-AzAccount -Identity

Im folgenden Beispiel wird eine Verbindung mithilfe der verwalteten Dienstidentität myUserAssignedIdentity hergestellt. Sie fügt dem virtuellen Computer die benutzerseitig zugewiesene Identität hinzu und stellt dann mithilfe der ClientId der benutzerseitig zugewiesenen Identität eine Verbindung her. Weitere Informationen finden Sie unter Konfigurieren von verwalteten Identitäten für Azure-Ressourcen auf einem virtuellen Azure-Computer mithilfe von PowerShell.

$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

Anmelden mit einem anderen Mandanten als dem Standardmandanten oder als Cloudlösungsanbieter (Cloud Solution Provider, CSP)

Wenn Ihr Konto mehr als einem Mandanten zugeordnet ist, muss bei der Verbindungsherstellung für die Anmeldung der Parameter Tenant verwendet werden. Dieser Parameter funktioniert mit jedem Anmeldeverfahren. Beim Anmelden kann dieser Parameterwert entweder die Azure-Objekt-ID des Mandanten (Mandanten-ID) oder der vollqualifizierte Domänenname des Mandanten sein.

Wenn Sie ein Cloudlösungsanbieter (Cloud Solution Provider, CSP) sind, muss der Wert des Parameters Tenant eine Mandanten-ID sein.

Connect-AzAccount -Tenant '00000000-0000-0000-0000-000000000000'

Anmelden bei einer anderen Cloud

Azure-Clouddienste verfügen über Umgebungen, die jeweils mit den regionalen Gesetzen zum Umgang mit Daten konform sind. Legen Sie die Umgebung für Konten in einer regionalen Cloud fest, wenn Sie sich mit dem Parameter Environment anmelden. Dieser Parameter funktioniert mit jedem Anmeldeverfahren. Beispiel, wenn sich Ihr Konto in Azure China 21Vianet befindet:

Connect-AzAccount -Environment AzureChinaCloud

Der folgende Befehl gibt eine Liste der verfügbaren Umgebungen zurück:

Get-AzEnvironment | Select-Object -Property Name