Freigeben über


Erstellen eines Azure-Dienstprinzipals mit Azure PowerShell

Automatisierte Tools, die Azure-Dienste verwenden, sollten immer eingeschränkte Berechtigungen besitzen. Azure bietet Dienstprinzipale, damit Anwendungen nicht als Benutzer mit uneingeschränkten Berechtigungen angemeldet werden müssen.

Ein Azure-Dienstprinzipal ist eine Identität, die für die Verwendung mit Anwendungen, gehosteten Diensten und automatisierten Tools für den Zugriff auf Azure-Ressourcen erstellt wurde. Dieser Zugriff ist durch die Rollen eingeschränkt, die dem Dienstprinzipal zugewiesen sind, sodass Sie steuern können, auf welche Ressourcen zugegriffen werden kann und auf welcher Ebene. Aus Sicherheitsgründen wird stets empfohlen, Dienstprinzipale mit automatisierten Tools zu verwenden, statt ihnen die Anmeldung mit einer Benutzeridentität zu erlauben.

In diesem Artikel wird Schritt für Schritt erläutert, wie Sie mit Azure PowerShell einen Dienstprinzipal erstellen, Informationen zu ihm abrufen und ihn zurücksetzen.

Vorsicht

Wenn Sie mithilfe des Befehls New-AzADServicePrincipal einen Dienstprinzipal erstellen, enthält die Ausgabe Anmeldeinformationen, die geschützt werden müssen. Verwenden Sie als Alternative ggf. verwaltete Identitäten, um zu vermeiden, dass die Verwendung von Anmeldeinformationen erforderlich ist.

Voraussetzungen

Erstellen eines Dienstprinzipals

Erstellen Sie mit dem Cmdlet New-AzADServicePrincipal einen Dienstprinzipal. Beim Erstellen eines Dienstprinzipals wählen Sie den Typ der von ihm verwendeten Anmeldeauthentifizierung aus.

Von Bedeutung

Ab Az PowerShell-Modul Version 7.x weist New-AzADServicePrincipal die Rolle "Mitwirkender " dem Dienstprinzipal standardmäßig nicht mehr zu. Informationen zum Zuweisen einer bestimmten Rolle zu einem Dienstprinzipal finden Sie unter "Schritte zum Hinzufügen einer Rollenzuweisung".

Hinweis

Wenn Ihr Konto nicht über die Berechtigung zum Erstellen eines Dienstprinzipals verfügt, gibt New-AzADServicePrincipal eine Fehlermeldung mit dem Hinweis „Nicht genügend Berechtigungen zum Abschließen des Vorgangs“ zurück. Wenden Sie sich an die für die Microsoft Entra-Administration zuständige Person, um einen Dienstprinzipal zu erstellen.

In einem Microsoft Entra-ID-Verzeichnis, in dem Benutzereinstellung Benutzer können Anwendungen registrieren , auf "Nein" festgelegt wurde, müssen Sie Mitglied einer der folgenden integrierten Microsoft Entra-ID-Rollen sein (die über die Aktion verfügen: microsoft.directory/applications/createAsOwner oder microsoft.directory/applications/create):

Weitere Informationen zu Den Benutzereinstellungen in der Microsoft Entra-ID finden Sie unter Einschränken, wer Anwendungen erstellen kann.

Es gibt zwei Arten von Authentifizierung für Dienstprinzipale: kennwortbasierte Authentifizierung und zertifikatbasierte Authentifizierung.

Kennwortbasierte Authentifizierung

Von Bedeutung

Die Standardrolle für einen Dienstprinzipal mit kennwortbasierter Authentifizierung ist Mitwirkender. Diese Rolle verfügt über vollständige Berechtigungen zum Lesen und Schreiben in ein Azure-Konto. Informationen zum Verwalten von Rollenzuweisungen finden Sie unter Verwalten von Dienstprinzipalrollen.

Ohne andere Authentifizierungsparameter wird die kennwortbasierte Authentifizierung verwendet und ein zufälliges Kennwort für Sie erstellt. Wenn Sie eine kennwortbasierte Authentifizierung wünschen, wird diese Methode empfohlen.

$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName

Das zurückgegebene Objekt enthält die PasswordCredentials.SecretText Eigenschaft, die das generierte Kennwort enthält. Stellen Sie sicher, dass Sie diesen Wert an einer sicheren Stelle speichern, um sich beim Dienstprinzipal zu authentifizieren. Der Wert wird in der Konsolenausgabe nicht angezeigt. Wenn Sie das Kennwort verlieren, setzen Sie die Anmeldeinformationen des Dienstprinzipals zurück.

Mit dem folgenden Code können Sie den geheimen Schlüssel exportieren:

$sp.PasswordCredentials.SecretText

Das zurückgegebene New-AzADServicePrincipal-Objekt enthält die Id- und DisplayName-Elemente, von denen jeweils eines für die Anmeldung mit dem Dienstprinzipal verwendet werden kann.

Von Bedeutung

Das Anmelden mit einem Dienstprinzipal erfordert die ID des Mandanten, unter dem der Dienstprinzipal erstellt wurde. Führen Sie den folgenden Befehl unmittelbar nach der Erstellung des Dienstprinzipals aus, um den aktiven Mandanten abzurufen:

(Get-AzContext).Tenant.Id

Zertifikatbasierte Authentifizierung

Von Bedeutung

Beim Erstellen eines Dienstprinzipals mit zertifikatbasierter Authentifizierung wird keine Standardrolle zugewiesen. Informationen zum Verwalten von Rollenzuweisungen finden Sie unter Verwalten von Dienstprinzipalrollen.

Dienstprinzipale mit zertifikatbasierter Authentifizierung werden mit dem CertValue Parameter erstellt. Dieser Parameter verwendet eine base64-codierte ASCII-Zeichenfolge des öffentlichen Zertifikats. Dies wird durch eine PEM-Datei oder eine textcodierte CRT- oder CER-Datei dargestellt. Binäre Codierungen des öffentlichen Zertifikats werden nicht unterstützt. Bei diesen Anweisungen wird davon ausgegangen, dass Sie bereits über ein Zertifikat verfügen.

$cert = <public certificate as base64-encoded string>
$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName -CertValue $cert

Das zurückgegebene New-AzADServicePrincipal-Objekt enthält die Id- und DisplayName-Eigenschaften, von denen eine für die Anmeldung mit dem Dienstprinzipal verwendet werden kann. Clients, die sich mit dem Dienstprinzipal anmelden, benötigen auch Zugriff auf den privaten Schlüssel des Zertifikats.

Von Bedeutung

Das Anmelden mit einem Dienstprinzipal erfordert die ID des Mandanten, unter dem der Dienstprinzipal erstellt wurde. Führen Sie den folgenden Befehl unmittelbar nach der Erstellung des Dienstprinzipals aus, um den aktiven Mandanten abzurufen:

(Get-AzContext).Tenant.Id

Abrufen eines vorhandenen Dienstprinzipals

Eine Liste der Dienstprinzipale für den aktiven Mandanten kann mit Get-AzADServicePrincipal abgerufen werden. Dieser Befehl gibt standardmäßig alle Dienstprinzipale in einem Mandanten zurück. Für große Organisationen kann es sehr lange dauern, ergebnisse zurückzugeben. Stattdessen wird die Verwendung eines der optionalen serverseitigen Filterargumente empfohlen:

  • DisplayNameBeginsWith fordert Dienstprinzipale an, die über ein Präfix verfügen, das dem bereitgestellten Wert entspricht. Der Anzeigename eines Dienstprinzipals ist der Wert, der während der Erstellung mit DisplayName festgelegt wird.
  • DisplayName fordert eine genaue Übereinstimmung eines Dienstprinzipalnamens an.

Verwalten von Dienstprinzipalrollen

Azure PowerShell verfügt über die folgenden Cmdlets zum Verwalten von Rollenzuweisungen:

Weitere Informationen zu Role-Based Zugriffssteuerung (Access Control, RBAC) und Rollen finden Sie unter RBAC: Integrierte Rollen.

Im folgenden Beispiel wird die Rolle " Leser" hinzugefügt und die Rolle " Mitwirkender" entfernt:

New-AzRoleAssignment -ApplicationId <service principal application ID> -RoleDefinitionName 'Reader'
Remove-AzRoleAssignment -ObjectId <service principal object ID> -RoleDefinitionName 'Contributor'

Von Bedeutung

Cmdlets für die Rollenzuweisung akzeptieren die Dienstprinzipalobjekt-ID nicht. Sie übernehmen die zugeordnete Anwendungs-ID, die zum Zeitpunkt der Erstellung generiert wird. Um die Anwendungs-ID für einen Dienstprinzipal abzurufen, verwenden Sie Get-AzADServicePrincipal.

Hinweis

Wenn Ihr Konto nicht über die Berechtigung zum Zuweisen einer Rolle verfügt, wird eine Fehlermeldung angezeigt, dass Ihr Konto "keine Autorisierung zum Ausführen der Aktion "Microsoft.Authorization/roleAssignments/write" hat" angezeigt wird. Wenden Sie sich an Ihren Microsoft Entra-Administrator, um Rollen zu verwalten.

Durch das Hinzufügen einer Rolle werden zuvor zugewiesene Berechtigungen nicht eingeschränkt. Beim Einschränken der Berechtigungen eines Dienstprinzipals sollte die Rolle Mitwirkender entfernt werden.

Die Änderungen können durch Auflisten der zugewiesenen Rollen überprüft werden:

Get-AzRoleAssignment -ServicePrincipalName ServicePrincipalName

Anmelden mithilfe eines Dienstprinzipals

Testen Sie die Anmeldeinformationen und Berechtigungen des neuen Dienstprinzipals, indem Sie sich anmelden. Für die Anmeldung mit einem Dienstprinzipal benötigen Sie den zugeordneten applicationId-Wert und den Mandanten, unter dem er erstellt wurde.

So melden Sie sich mit einem Dienstprinzipal und einem Kennwort an

# Use the application ID as the username, and the secret as password
$credentials = Get-Credential
Connect-AzAccount -ServicePrincipal -Credential $credentials -Tenant <tenant ID>

Für die zertifikatbasierte Authentifizierung muss Azure PowerShell Informationen aus einem lokalen Zertifikatspeicher basierend auf einem Zertifikatfingerabdruck abrufen.

Connect-AzAccount -ServicePrincipal -Tenant <TenantId> -CertificateThumbprint <Thumbprint> -ApplicationId <ApplicationId>

Anweisungen zum Importieren eines Zertifikats in einen Von PowerShell zugänglichen Anmeldeinformationsspeicher finden Sie unter Zertifikatbasierte Authentifizierung

Zurücksetzen von Anmeldeinformation

Wenn Sie die Anmeldeinformationen für einen Dienstprinzipal vergessen, verwenden Sie New-AzADSpCredential , um neue Anmeldeinformationen mit einem zufälligen Kennwort hinzuzufügen. Dieses Cmdlet unterstützt beim Zurücksetzen des Kennworts keine benutzerdefinierten Anmeldeinformationen.

Von Bedeutung

Bevor Sie neue Anmeldeinformationen zuweisen, können Sie vorhandene Anmeldeinformationen entfernen, um die Anmeldung mit ihnen zu verhindern. Verwenden Sie dazu das Cmdlet Remove-AzADSpCredential :

Remove-AzADSpCredential -DisplayName ServicePrincipalName
$newCredential = New-AzADSpCredential -ServicePrincipalName ServicePrincipalName

Problembehandlung

Wenn Sie die Fehlermeldung "New-AzADServicePrincipal: Ein anderes Objekt mit demselben Wert für die Eigenschaft 'identifierUris' ist bereits vorhanden." erhalten, vergewissern Sie sich, dass ein Dienstprinzipal mit demselben Namen noch nicht existiert.

Get-AzAdServicePrincipal -DisplayName ServicePrincipalName

Wenn der vorhandene Dienstprinzipal nicht mehr benötigt wird, können Sie ihn mithilfe des folgenden Beispiels entfernen.

Remove-AzAdServicePrincipal -DisplayName ServicePrincipalName

Dieser Fehler kann auch auftreten, wenn Sie zuvor einen Dienstprinzipal für eine Azure Active Directory-Anwendung erstellt haben. Wenn Sie den Dienstprinzipal entfernen, ist die Anwendung weiterhin verfügbar. Diese Anwendung verhindert, dass Sie einen anderen Dienstprinzipal mit demselben Namen erstellen.

Mit dem folgenden Beispiel können Sie überprüfen, ob eine Microsoft Entra-Anwendung mit demselben Namen nicht vorhanden ist:

Get-AzADApplication -DisplayName ServicePrincipalName

Wenn eine Anwendung mit demselben Namen vorhanden ist und nicht mehr benötigt wird, kann sie mithilfe des folgenden Beispiels entfernt werden.

Remove-AzADApplication -DisplayName ServicePrincipalName

Wählen Sie andernfalls einen alternativen Namen für den neuen Dienstprinzipal aus, den Sie erstellen möchten.