Freigeben über


Erstellen eines Azure-Dienstprinzipals mit der Azure CLI

Automatisierte Tools, die Azure-Dienste verwenden, sollten immer über eingeschränkte Berechtigungen verfügen, um Ihre Azure-Ressourcen zu schützen. Aus diesem Grund bietet Azure Dienstprinzipale, damit Anwendungen sich nicht als Benutzer mit uneingeschränkten Berechtigungen anmelden. Ein Azure-Dienstprinzipal ist eine Identität, die zur Verwendung mit Anwendungen, gehosteten Diensten und automatisierten Tools erstellt wird. Diese Identität wird für den Zugriff auf Ressourcen verwendet.

In diesem Tutorial lernen Sie Folgendes:

  • Erstellen eines Dienstprinzipals
  • Anmelden mit einem Dienstprinzipal und einem Kennwort
  • Anmelden mit einem Dienstprinzipal und einem Zertifikat
  • Verwalten von Dienstprinzipalrollen
  • Erstellen einer Azure-Ressource mithilfe eines Dienstprinzipals
  • Zurücksetzen von Anmeldeinformationen für Dienstprinzipal

Voraussetzungen

  • In einem Abonnement müssen Sie über User Access Administrator- oder Role Based Access Control Administrator- Berechtigungen verfügen, um einen Dienstprinzipal zu erstellen. Eine Liste der Rollen, die für die rollenbasierte Azure-Zugriffssteuerung (Azure RBAC) verfügbar sind, finden Sie unter Integrierte Azure-Rollen.
  • Verwenden Sie die Bash-Umgebung in Azure Cloud Shell. Weitere Informationen finden Sie unter Schnellstart für Bash in Azure Cloud Shell.

  • Wenn Sie CLI-Referenzbefehle lieber lokal ausführen, installieren Sie die Azure CLI. Wenn Sie Windows oder macOS ausführen, sollten Sie die Azure CLI in einem Docker-Container ausführen. Weitere Informationen finden Sie unter Ausführen der Azure CLI in einem Docker-Container.

    • Wenn Sie eine lokale Installation verwenden, melden Sie sich mithilfe des Befehls az login bei der Azure CLI an. Führen Sie die in Ihrem Terminal angezeigten Schritte aus, um den Authentifizierungsprozess abzuschließen. Informationen zu anderen Anmeldeoptionen finden Sie unter Anmelden mit der Azure CLI.

    • Installieren Sie die Azure CLI-Erweiterung beim ersten Einsatz, wenn Sie dazu aufgefordert werden. Weitere Informationen zu Erweiterungen finden Sie unter Verwenden von Erweiterungen mit der Azure CLI.

    • Führen Sie az version aus, um die installierte Version und die abhängigen Bibliotheken zu ermitteln. Führen Sie az upgrade aus, um das Upgrade auf die aktuelle Version durchzuführen.

Erstellen eines Dienstprinzipals

Verwenden Sie den Azure CLI-Verweisbefehl az ad sp create-for-rbac, um einen Dienstprinzipal zu erstellen. In diesem Beispiel wird kein --name-Parameter angegeben, sodass automatisch ein Name erstellt wird, der einen Zeitstempel enthält.

az ad sp create-for-rbac

Ausgabekonsole:

{
  "appId": "myAppId",
  "displayName": "myServicePrincipalName",
  "password": "myServicePrincipalPassword",
  "tenant": "myTentantId"
}

Wenn Sie die Konventionen für die Ressourcenbenennung nicht befolgen und planen, später eine Rolle und einen Bereich für den neuen Dienstprinzipal zu erstellen, können Sie den Befehl az ad sp create-for-rbac ohne Parameter verwenden. Ohne Rolle und Bereich hat der neue Dienstprinzipal jedoch keinen Zugriff auf Ressourcen. Er ist einfach vorhanden.

Wenn Sie einen Dienstprinzipal ohne Parameter erstellen, führen Sie auch die folgenden Schritte aus:

Erstellen eines Dienstprinzipals mit Rolle und Bereich

Die bewährte Methode besteht darin, beim Erstellen eines Dienstprinzipals immer bestimmte --role- und --scopes-Werte zuzuweisen. Führen Sie folgende Schritte aus:

  1. Bestimmen Sie die richtige Rolle.

    Verwenden Sie beim Bestimmen der Rolle immer das Prinzip der geringsten Rechte. Geben Sie Ihrem Dienstprinzipal beispielsweise nicht die Berechtigungen von contributor für ein Abonnement, wenn der Dienstprinzipal nur auf Azure Storage innerhalb einer Ressourcengruppe zugreifen muss. Ziehen Sie eine spezielle Rolle wie Mitwirkender an Storage-Blobdaten in Erwägung. Eine vollständige Liste der Rollen, die in Azure RBAC verfügbar sind, finden Sie unter Integrierten Azure-Rollen.

  2. Ruft einen Wert für den scopes-Parameter ab.

    Suchen und kopieren Sie die Ressourcen-ID der Azure-Ressource, auf die der neue Dienstprinzipal Zugriff benötigt. Diese Informationen finden Sie in der Regel im Azure-Portal auf der Seite Eigenschaften oder Endpunkte der Ressource. Nachfolgend finden Sie allgemeine Beispiele mit --scopes, für das tatsächliche Format und den tatsächlichen Wert nutzen Sie aber unbedingt Ihre Ressourcen-ID.

    `Scope` Beispiel
    Subscription /subscriptions/mySubscriptionID
    Resource group /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName
    Virtueller Computer /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName/providers/Microsoft.Compute/virtualMachines/myVMname
    Speicherkonto-Dateidienst /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName/providers/Microsoft.Storage/storageAccounts/myStorageAccountName/fileServices/default
    Data Factory /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName/providers/Microsoft.DataFactory/factories/myDataFactoryName

    Weitere Beispiele mit Gültigkeitsbereichen finden Sie unter Verstehen des Gültigkeitsbereichs für Azure RBAC.

  3. Erstellen Sie den Dienstprinzipal.

    In diesem Beispiel wird ein neuer Dienstprinzipal mit dem Namen myServicePrincipalName1 mit der Berechtigung Leser für alle Ressourcen in der Ressourcengruppe RG1 erstellt.

    # Bash script
    az ad sp create-for-rbac --name myServicePrincipalName1 \
                             --role reader \
                             --scopes /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG1
    

    Der Parameter --scopes akzeptiert eine durch Leerzeichen getrennte Liste der Bereiche. In diesem Beispiel wird ein neuer Dienstprinzipal mit dem Namen myServicePrincipalName2 mit der Berechtigung Leser für alle Ressourcen in der Ressourcengruppe myRG1 erstellt. Dieser Dienstprinzipal erhält auch die Berechtigung Leser für myVM in myRG2.

    # Bash script
    az ad sp create-for-rbac --name myServicePrincipalName2 \
                             --role reader \
                             --scopes /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG1 /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG2/providers/Microsoft.Compute/virtualMachines/myVM
    

Wenn Sie dem neuen Dienstprinzipal zu wenige oder zu viele Berechtigungen erteilt haben, ändern Sie die Berechtigungen durch die Verwaltung von Dienstprinzipalrollen.

Erstellen eines Dienstprinzipals mithilfe von Variablen

Sie können einen Dienstprinzipal auch mithilfe von Variablen erstellen:

# Bash script
let "randomIdentifier=$RANDOM*$RANDOM"
servicePrincipalName="msdocs-sp-$randomIdentifier"
roleName="azureRoleName"
subscriptionID=$(az account show --query id --output tsv)
# Verify the ID of the active subscription
echo "Using subscription ID $subscriptionID"
resourceGroup="myResourceGroupName"

echo "Creating SP for RBAC with name $servicePrincipalName, with role $roleName and in scopes /subscriptions/$subscriptionID/resourceGroups/$resourceGroup"
az ad sp create-for-rbac --name $servicePrincipalName \
                         --role $roleName \
                         --scopes /subscriptions/$subscriptionID/resourceGroups/$resourceGroup

Eine vollständige Liste der Dienstprinzipaleigenschaften können Sie mit az ad sp list abrufen. Lesen Sie auch Abrufen eines vorhandenen Dienstprinzipals.

Warnung

Wenn Sie mithilfe des Befehls az ad sp create-for-rbac einen Azure-Dienstprinzipal erstellen, enthält die Ausgabe Anmeldeinformationen, die geschützt werden müssen. Schließen Sie diese Anmeldeinformationen nicht in Ihren Code ein, und checken Sie sie nicht in Ihre Quellcodeverwaltung ein. Verwenden Sie als Alternative ggf. verwaltete Identitäten (sofern verfügbar), um zu vermeiden, dass die Verwendung von Anmeldeinformationen erforderlich ist.

Nächste Schritte

Sie wissen jetzt, wie Sie einen Azure-Dienstprinzipal erstellen. Fahren Sie mit dem nächsten Schritt fort, um zu erfahren, wie Sie Dienstprinzipale mit kennwortbasierter Authentifizierung verwenden.