Erstellen eines Azure-Dienstprinzipals mit Azure PowerShell
Warnung
Das AzureRM PowerShell-Modul ist seit dem 29. Februar 2024 offiziell veraltet. Benutzern wird empfohlen, von AzureRM zum Az PowerShell-Modul zu migrieren, um weiterhin Support und Updates zu erhalten.
Obwohl das AzureRM-Modul möglicherweise weiterhin funktioniert, wird es nicht mehr gewartet, und es wird kein Support mehr angeboten. Die weitere Nutzung erfolgt daher nach Ermessen und auf Risiko des Benutzers. Weitere Informationen zum Übergang zum Az-Modul finden Sie in unseren Migrationsressourcen.
Wenn Sie Ihre App oder Ihren Dienst mit Azure PowerShell verwalten möchten, sollten Sie sie bzw. ihn nicht unter Ihren eigenen Anmeldeinformationen, sondern unter einem Azure Microsoft Entra-Dienstprinzipal ausführen. In diesem Artikel wird Schritt für Schritt erläutert, wie Sie einen Sicherheitsprinzipal mit Azure PowerShell erstellen.
Hinweis
Dienstprinzipale können auch über das Azure-Portal erstellt werden. Ausführlichere Informationen finden Sie unter Erstellen einer Active Directory-Anwendung und eines Dienstprinzipals mit Ressourcenzugriff mithilfe des Portals.
Was ist ein Dienstprinzipal?
Ein Azure-Dienstprinzipal ist eine Sicherheitsidentität, die durch von Benutzern erstellte Apps, Dienste und Automatisierungstools verwendet wird, um auf bestimmte Azure-Ressourcen zuzugreifen. Das Konzept lässt sich als Benutzeridentität (Benutzername und Kennwort oder Zertifikat) mit einer bestimmten Rolle und streng kontrollierten Berechtigungen beschreiben. Ein Dienstprinzipal sollte – im Gegensatz zu einer allgemeinen Benutzeridentität – nur für bestimmte Dinge zuständig sein. Wenn Sie ihr nur die Berechtigungen gewähren, die sie zum Ausführen ihrer Verwaltungsaufgaben benötigt, verbessert das die Sicherheit.
Überprüfen der eigenen Berechtigungsstufe
Zunächst einmal müssen Sie sowohl in der Microsoft Entra ID-Instanz als auch im Azure-Abonnement über ausreichende Berechtigungen verfügen. Sie müssen eine App in der Active Directory-Instanz erstellen und dem Dienstprinzipal eine Rolle zuweisen können.
Die einfachste Möglichkeit zum Überprüfen, ob Ihr Konto über die richtigen Berechtigungen verfügt, ist die Vorgehensweise über das Portal. Siehe Überprüfen der erforderlichen Berechtigung im Portal.
Erstellen eines Dienstprinzipals für Ihre App
Nachdem Sie sich an Ihrem Azure-Konto angemeldet haben, können Sie den Dienstprinzipal erstellen. Ihre bereitgestellte App muss auf eine der folgenden Arten identifiziert werden:
- Mithilfe des eindeutigen Namens Ihrer bereitgestellten App („MyDemoWebApp“ in den folgenden Beispielen). Oder:
- Mithilfe der Anwendungs-ID (GUID, die Ihrer bereitgestellten App, Ihrem bereitgestellten Dienst oder Ihrem bereitgestellten Objekt zugeordnet ist)
Abrufen von Informationen zu Ihrer Anwendung
Mit dem Cmdlet Get-AzureRmADApplication
können Sie Informationen zu Ihrer Anwendung erhalten.
Get-AzureRmADApplication -DisplayNameStartWith MyDemoWebApp
DisplayName : MyDemoWebApp
ObjectId : 00001111-aaaa-2222-bbbb-3333cccc4444
IdentifierUris : {http://MyDemoWebApp}
HomePage : http://www.contoso.com
Type : Application
ApplicationId : 00001111-aaaa-2222-bbbb-3333cccc4444
AvailableToOtherTenants : False
AppPermissions :
ReplyUrls : {}
Erstellen eines Dienstprinzipals für Ihre Anwendung
Das Cmdlet New-AzureRmADServicePrincipal
dient zum Erstellen des Dienstprinzipals.
$servicePrincipal = New-AzureRmADServicePrincipal -ApplicationId 00001111-aaaa-2222-bbbb-3333cccc4444
Secret : System.Security.SecureString
ServicePrincipalNames : {00001111-aaaa-2222-bbbb-3333cccc4444, http://MyDemoWebApp}
ApplicationId : 00001111-aaaa-2222-bbbb-3333cccc4444
DisplayName : MyDemoWebApp
Id : 698138e7-d7b6-4738-a866-b4e3081a69e4
AdfsId :
Type : ServicePrincipal
Sie können nun entweder direkt die Eigenschaft „$servicePrincipal.Secret“ in „Connect-AzureRmAccount“ verwenden (siehe „Anmelden mithilfe des Dienstprinzipals“ weiter unten) oder dieses SecureString-Element zur späteren Verwendung in eine Nur-Text-Zeichenfolge konvertieren:
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($servicePrincipal.Secret)
$password = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
[Runtime.InteropServices.Marshal]::ZeroFreeBSTR($BSTR)
Anmelden mithilfe des Dienstprinzipals
Nun können Sie sich als der neue Dienstprinzipal für die App anmelden. Verwenden Sie dabei den von Ihnen angegebenen Wert für appId und den automatisch generierten Wert für password. Außerdem benötigen Sie die Mandanten-ID für den Dienstprinzipal. Ihre Mandanten-ID wird angezeigt, wenn Sie sich mit Ihren persönlichen Anmeldeinformationen bei Azure anmelden. Verwenden Sie die folgenden Befehle, um sich mit einem Dienstprinzipal anzumelden:
$cred = New-Object System.Management.Automation.PSCredential ("00001111-aaaa-2222-bbbb-3333cccc4444", $servicePrincipal.Secret)
Connect-AzureRmAccount -Credential $cred -ServicePrincipal -TenantId 00000000-0000-0000-0000-000000000000
Nach einer erfolgreichen Anmeldung wird die folgende Ausgabe angezeigt:
Environment : AzureCloud
Account : 00001111-aaaa-2222-bbbb-3333cccc4444
TenantId : 00000000-0000-0000-0000-000000000000
SubscriptionId :
SubscriptionName :
CurrentStorageAccount :
Glückwunsch! Die Anmeldeinformationen können zum Ausführen Ihrer App verwendet werden. Als Nächstes müssen Sie die Berechtigungen des Dienstprinzipals anpassen.
Verwalten von Rollen
Hinweis
Bei der rollenbasierten Zugriffssteuerung (Role-Based Access Control, RBAC) in Azure handelt es sich um ein Modell zum Definieren und Verwalten von Rollen für Benutzer- und Dienstprinzipale. Rollen sind bestimmte Berechtigungen zugeordnet, die bestimmen, welche Ressourcen ein Prinzipal lesen, aufrufen, schreiben oder verwalten kann. Weitere Informationen zu RBAC und Rollen finden Sie unter Integrierte Rollen für die rollenbasierte Zugriffssteuerung in Azure.
Für die Verwaltung von Rollenzuweisungen stehen in Azure PowerShell folgende Cmdlets zur Verfügung:
Standardmäßig hat ein Dienstprinzipal die Rolle Mitwirkender. Je nachdem, in welchem Maß Ihrer App mit Azure Services interagiert, ist das unter Umständen nicht die beste Wahl, da diese Rolle über umfassende Berechtigungen verfügt. Die Rolle Leser ist stärker eingeschränkt und bietet sich für Apps ohne Schreibzugriff an. Über das Azure-Portal können Sie Details zu rollenspezifischen Berechtigungen anzeigen oder benutzerdefinierte Berechtigungen erstellen.
Im folgenden Beispiel fügen wir unserem vorherigen Beispiel die Rolle Leser hinzu und löschen die Rolle Mitwirkender:
New-AzureRmRoleAssignment -ResourceGroupName myRG -ObjectId 698138e7-d7b6-4738-a866-b4e3081a69e4 -RoleDefinitionName Reader
RoleAssignmentId : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG/providers/Microsoft.Authorization/roleAssignments/818892f2-d075-46a1-a3a2-3a4e1a12fcd5
Scope : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG
DisplayName : MyDemoWebApp
SignInName :
RoleDefinitionName : Reader
RoleDefinitionId : 00001111-aaaa-2222-bbbb-3333cccc4444
ObjectId : 698138e7-d7b6-4738-a866-b4e3081a69e4
ObjectType : ServicePrincipal
Remove-AzureRmRoleAssignment -ResourceGroupName myRG -ObjectId 698138e7-d7b6-4738-a866-b4e3081a69e4 -RoleDefinitionName Contributor
So zeigen Sie die derzeit zugewiesenen Rollen an:
Get-AzureRmRoleAssignment -ResourceGroupName myRG -ObjectId 698138e7-d7b6-4738-a866-b4e3081a69e4
RoleAssignmentId : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG/providers/Microsoft.Authorization/roleAssignments/0906bbd8-9982-4c03-8dae-aeaae8b13f9e
Scope : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG
DisplayName : MyDemoWebApp
SignInName :
RoleDefinitionName : Reader
RoleDefinitionId : 00001111-aaaa-2222-bbbb-3333cccc4444
ObjectId : 698138e7-d7b6-4738-a866-b4e3081a69e4
ObjectType : ServicePrincipal
Weitere Azure PowerShell-Cmdlets für die Rollenverwaltung:
- Get-AzureRmRoleDefinition
- New-AzureRmRoleDefinition
- Remove-AzureRmRoleDefinition
- Set-AzureRmRoleDefinition
Ändern der Anmeldeinformationen des Sicherheitsprinzipals
Aus Sicherheitsgründen empfiehlt es sich, regelmäßig die Berechtigungen zu überprüfen und das Kennwort zu aktualisieren. Darüber hinaus sollten Sie auch die Sicherheitsanmeldeinformationen verwalten und ändern, wenn sich Ihre App verändert. Zum Ändern des Dienstprinzipalkennworts können wir beispielsweise ein neues Kennwort erstellen und das alte entfernen.
Hinzufügen eines neuen Kennworts für den Dienstprinzipal
New-AzureRmADSpCredential -ServicePrincipalName http://MyDemoWebApp
Secret : System.Security.SecureString
StartDate : 11/16/2018 12:38:23 AM
EndDate : 11/16/2019 12:38:23 AM
KeyId : 00001111-aaaa-2222-bbbb-3333cccc4444
Type : Password
Abrufen einer Liste mit Anmeldeinformationen für den Dienstprinzipal
Get-AzureRmADSpCredential -ServicePrincipalName http://MyDemoWebApp
StartDate EndDate KeyId Type
--------- ------- ----- ----
3/8/2017 5:58:24 PM 3/8/2018 5:58:24 PM 00001111-aaaa-2222-bbbb-3333cccc4444 Password
5/5/2016 4:55:27 PM 5/5/2017 4:55:27 PM 00001111-aaaa-2222-bbbb-3333cccc4444 Password
Entfernen des alten Kennworts für den Dienstprinzipal
Remove-AzureRmADSpCredential -ServicePrincipalName http://MyDemoWebApp -KeyId 00001111-aaaa-2222-bbbb-3333cccc4444
Confirm
Are you sure you want to remove credential with keyId '00001111-aaaa-2222-bbbb-3333cccc4444' for
service principal objectId '698138e7-d7b6-4738-a866-b4e3081a69e4'.
[Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): Y
Überprüfen der Liste mit Anmeldeinformationen für den Dienstprinzipal
Get-AzureRmADSpCredential -ServicePrincipalName http://MyDemoWebApp
StartDate EndDate KeyId Type
--------- ------- ----- ----
3/8/2017 5:58:24 PM 3/8/2018 5:58:24 PM 00001111-aaaa-2222-bbbb-3333cccc4444 Password
Abrufen von Informationen zum Dienstprinzipal
$svcprincipal = Get-AzureRmADServicePrincipal -ObjectId 698138e7-d7b6-4738-a866-b4e3081a69e4
$svcprincipal | Select-Object -Property *
ServicePrincipalNames : {http://MyDemoWebApp, 00001111-aaaa-2222-bbbb-3333cccc4444}
ApplicationId : 00001111-aaaa-2222-bbbb-3333cccc4444
DisplayName : MyDemoWebApp
Id : 698138e7-d7b6-4738-a866-b4e3081a69e4
Type : ServicePrincipal