sommersby - stock.adobe.com
Einen Azure-Dienstprinzipal mit PowerShell authentifizieren
Mit dem Azure PowerShell-Moduls lassen sich Anmeldeaufforderungen vermeiden und der Authentifizierungsprozess automatisieren, indem Sie Dienstprinzipale einrichten und nutzen.
Wenn Sie als Administrator für Cloud-Dienste wie Microsoft 365 oder Azure zuständig sind, müssen Sie möglicherweise bestimmte Aufgaben mit PowerShell automatisieren. Microsoft bietet viele Authentifizierungsansätze und -methoden zum Verbinden mit seinen Diensten.
- Interaktive Anmeldung. Bei dieser Methode melden Sie sich mit einem Azure Active Directory-Konto(AD) über die PowerShell-Kommandozeile an. Diese Methode eignet sich am besten für spontane und einmalige Arbeiten, da die Benutzer bei jeder Authentifizierung ihre Anmeldedaten eingeben müssen.
- Verwaltete Identität. Mit dieser Funktion authentifiziert sich eine Ressource bei Azure AD, ohne dass explizite Anmeldedaten erforderlich sind. Diese Methode eignet sich am besten für Szenarien, in denen eine Ressource sicher auf eine andere Ressource zugreifen muss, zum Beispiel wenn eine virtuelle Maschine Zugang zu einem Speicherkonto benötigt.
- Geräte-Authentifizierung. Bei dieser Methode erfolgt die Authentifizierung mit einem Code, den das Azure-Portal bereitstellt. Sie verwenden diese Methode, wenn sich ein Benutzer von einem Gerät aus authentifizieren muss, das keine modernen Authentifizierungsprotokolle unterstützt.
Diese drei Varianten funktionieren gut, doch wenn Sie mit Code wie PowerShell automatisieren möchten, sollten Sie einen Dienstprinzipal verwenden.
Sie verwenden Dienstprinzipale für den Zugriff auf Azure-Ressourcen speziell bei Prozessen, die Sie automatisieren möchten. Dazu gehören beispielsweise:
- Automatisierte Aufgaben und Skripte.
- Kontinuierliche Integration und Bereitstellung.
- Zugriffskontrolle und Sicherheit.
- Ressourcenzugriff von externen Anwendungen aus.
- Provisionieren und Verwalten von Azure-Ressourcen.
Dienstprinzipal im Azure-Portal erstellen
Sie erstellen Dienstprinzipale entweder im Azure-Portal oder mit PowerShell. Der einfachste Ansatz ist das Azure-Portal:
- Melden Sie sich beim Azure-Portal an.
- Navigieren Sie zu Azure AD und wählen Sie dann App-Registrierungen.
- Klicken Sie auf Neue Registrierung, um eine neue Anwendung zu registrieren.
- Geben Sie den Namen der Anwendung ein und wählen Sie dann den entsprechenden Kontotyp.#
- Legen Sie die Umleitungs-URI fest, die den Endpunkt angibt, zu dem Azure AD die Benutzer nach der Authentifizierung umleiten soll.
- Sobald Sie die Anwendung registriert haben, erstellen Sie einen Dienstprinzipal, indem Sie im linken Menü Zertifikate & Geheimnisse auswählen und dann auf Neuer geheimer Clientschlüssel klicken.
- Geben Sie einen Namen für das neue Geheimnis ein, wählen Sie ein Ablaufdatum und klicken Sie dann auf Hinzufügen. Kopieren und speichern Sie den neuen Schlüssel.
- Schließlich können Sie die Werte für die Client-ID, die Tenant-ID und das Client-Geheimnis der Anwendung abrufen, mit denen Sie sich über PowerShell bei Azure anmelden.
Dienstprinzipal mit PowerShell einrichten
Wenn Sie lieber PowerShell verwenden, benötigen Sie das PowerShell-Modul Az. Sie importieren das Modul aus der PowerShell-Galerie. Der Prozess durchläuft die folgenden Schritte:
- Erstellen Sie einen Dienstprinzipal.
- Weisen Sie dem Dienstprinzipal eine Rolle zu.
- Authentifizieren Sie sich als Dienstprinzipal.
Beginnen Sie mit dem Authentifizierungsprozess
Zunächst müssen Sie das Modul installieren und importieren.
# Installieren und importieren Sie das 'Az'-Modul
Install-Module Az
Import-Module Az
Wenn Sie die richtigen Module installiert haben, müssen Sie sich über den interaktiven Ansatz bei Azure authentifizieren.
# Melden Sie sich bei Azure an
Connect-AzAccount
Für die Authentifizierung müssen Sie Ihren Benutzernamen und Ihr Passwort eingeben und andere Sicherheitsprüfungen bestehen. Jetzt führen wir mit diesem Konto weitere Befehle aus; Sie müssen also über die entsprechenden Berechtigungen verfügen. Für das Az-Modul müssen Sie dem Konto, das Sie verwenden, eine Berechtigung zuweisen. Achten Sie auf die Mieterdetails, falls diese nach der Authentifizierung angezeigt werden. Falls nicht, führen Sie Get-AzSubscription oder Get-AzContext aus.
Erstellen Sie den Dienstprinzipal
Nach der Authentifizierung beginnen Sie mit dem Erstellen des Dienstprinzipals:
# Erstellen des Dienstesprinzipals
$startDate = Get-Date
$endDate = (Get-Date).AddDays(100)
$name = "App-Az"
$app = New-AzADServicePrincipal -DisplayName $name
Update-AzADApplication `
-ApplicationId $app.AppId `
-IdentifierUris "api://app-az" `
-ReplyUrls "https://localhost"
$creds = [Microsoft.Azure.PowerShell.Cmdlets.Resources.MSGraph.Models.ApiV10.MicrosoftGraphPasswordCredential]@{
StartDateTime = $startDate
EndDateTime = $endDate
}
$spCreds = New-AzADAppCredential `
-ApplicationId $app.AppId `
-PasswordCredentials $creds
Wenn Sie das möchten, speichern Sie das Passwort zur späteren Verwendung. Rufen Sie dazu die Eigenschaft SecretText ab und speichern Sie diese in einer flachen Datei oder in einer Anmeldedatenbank. Um das Geheimnis in einer flachen Datei zu speichern, geben Sie den Befehl Out-File ein und übergeben Sie den gewünschten Wert.
US-DollarspCreds.SecretText | Out-File "C:\Temp\Azure.txt"
Konfigurieren Sie die Dienstprinzipalrolle
Dienstprinzipalrollen definieren die Zugriffsebene, die der Prinzipal auf Azure-Ressourcen hat. In Azure gibt es vier eingebaute Dienstprinzipalrollen:
- Besitzer (owner). Voller Zugriff auf alle Ressourcen und Verwaltung des Zugriffs anderer auf die Ressourcen
- Mitwirkender (contributor). Voller Zugriff auf alle Ressourcen, aber keine Verwaltungsfunktionen
- Leser (reader). Zugriff auf Einsehen von Ressourcen begrenzt
- Benutzerzugriffsadministrator (User access administrator). Voller Zugriff zur Verwaltung des Benutzerzugriffs auf Azure-Ressourcen.
Um die Rolle dem Dienstprinzipal mit PowerShell zuzuweisen, verwenden Sie je nach gewähltem Modul den folgenden Code.
# Legen Sie die Rolle des Dienstprinzipal fest
$roleParam = @{
RoleDefinitionName = "Contributor"
PrincipalId = $app.Id
}
New-AzRoleAssignment @roleParam
Verbindung zu Azure über den Dienstprinzipal
Um sich mit dem neuen Dienstprinzipal in PowerShell mit Azure zu verbinden, erstellen Sie ein neues PSCredential-Objekt, das aus den Werten besteht, die Sie zuvor abgerufen haben.
US-DollarclientSecret = US-DollarspCreds.SecretText | ConvertTo-SecureString -AsPlainText -Force
Wenn Sie das Geheimnis mit der Flat File-Methode gespeichert haben, müssen Sie die Datei und den gespeicherten Wert abrufen.
US-DollarclientSecret = Get-Content "C:\Temp\Azure.txt" | ConvertTo-SecureString -AsPlainText -Force
Mit dem erforderlichen Geheimnis und der Mandanten-ID stellen Sie über Connect-AzAccount und mit der Eigenschaft -ServicePrincipal eine Verbindung her.
US-DollarconnectCreds = New-Object -TypeName System.Management.Automation.PSCredential `
-ArgumentList US-Dollarapp.AppId, US-DollarclientSecret
Connect-AzAccount -ServicePrincipal -Credential US-DollarconnectCreds -Tenant US-Dollartenant.Tenant.Id
Wie Sie sehen, bietet die Verbindung zu Azure über einen Dienstprinzipal mehr Sicherheit, ermöglicht Automatisierung und reduziert den Bedarf an Benutzeranmeldeinformationen. Skripte und Anwendungen können sich authentifizieren und autorisieren, ohne die Benutzeranmeldeinformationen preiszugeben, so dass sensible Daten geschützt sind.