Authentifizieren von Azure Batch-Diensten mit Microsoft Entra ID

Azure Batch unterstützt die Authentifizierung mit Microsoft Entra ID, dem mehrmandantenfähigen cloudbasierten Verzeichnis- und Identitätsverwaltungsdienst von Microsoft. Azure verwendet Microsoft Entra ID für die Authentifizierung seiner eigenen Kunden, Dienstadministratoren und Organisationsbenutzer.

In diesem Artikel werden zwei Möglichkeiten zur Verwendung der Microsoft Entra-Authentifizierung mit Azure Batch beschrieben:

  • Die integrierte Authentifizierung authentifiziert einen Benutzer, der mit einer Anwendung interagiert. Die Anwendung sammelt die Anmeldeinformationen eines Benutzers und verwendet diese zum Autorisieren des Zugriffs auf Batch-Ressourcen.

  • Ein Dienstprinzipal authentifiziert eine unbeaufsichtigte Anwendung. Ein Dienstprinzipal definiert die Richtlinien und die Berechtigungen für eine Anwendung und stellt die Anwendung für den Zugriff auf Batch-Ressourcen zur Laufzeit dar.

Weitere Informationen zu Microsoft Entra ID finden Sie in der Microsoft Entra Documentation.

Sammeln der Endpunkte für die Authentifizierung

Zum Authentifizieren von Batch-Anwendungen mit Microsoft Entra ID müssen Sie den Microsoft Entra-Endpunkt und den Batch-Ressourcenendpunkt in Ihren Code einschließen.

Microsoft Entra Endpunkt

Der Microsoft Entra Authority-Basis-Endpunkt ist https://login.microsoftonline.com/. Verwenden Sie für die Authentifizierung bei Microsoft Entra ID diesen Endpunkt mit der Mandanten-ID, die den für die Authentifizierung zu verwendenden Microsoft Entra-Mandanten identifiziert:

https://login.microsoftonline.com/<tenant-id>

Sie können Ihre Mandanten-ID auf der Microsoft Entra ID-Seite im Azure-Portal abrufen. Sie können auch im linken Navigationsbereich Eigenschaften auswählen und die Mandanten-ID auf der Seite Eigenschaften anzeigen.

Screenshot of the Tenant ID in the Azure portal.

Wichtig

  • Der mandantenspezifische Microsoft Entra-Endpunkt ist erforderlich, wenn Sie einen Dienstprinzipal zur Authentifizierung verwenden.

  • Wenn Sie mithilfe der integrierten Authentifizierung authentifizieren, wird der mandantenspezifische Endpunkt empfohlen, ist aber optional. Sie können auch den allgemeinen Microsoft Entra-Endpunkt verwenden, um eine generische Schnittstelle zum Sammeln von Anmeldeinformationen bereitzustellen, wenn kein spezifischer Mandant bereitgestellt wird. Der gemeinsame Endpunkt ist https://login.microsoftonline.com/common.

Weitere Informationen zu Endpunkten in Microsoft Entra finden Sie unter Authentifizierung im Vergleich zu Autorisierung.

Batch-Ressourcenendpunkt

Verwenden Sie den Batch-Ressourcenendpunkt https://batch.core.windows.net/, um ein Token zum Authentifizieren von Anforderungen für den Batch-Dienst abzurufen.

Registrieren Ihrer Anwendung bei einem Mandanten

Der erste Schritt zur Verwendung der Microsoft Entra-Authentifizierung ist die Registrierung Ihrer Anwendung in einem Microsoft Entra-Mandanten. Nachdem Sie Ihre Anmeldung registriert haben, können Sie die Microsoft-Authentifizierungsbibliothek (Microsoft Authentication Library, MSAL) aus Ihrem Code aufzurufen. Die MSAL stellt eine API für die Authentifizierung mit Microsoft Entra ID aus Ihrer Anwendung bereit. Die Registrierung Ihrer Anwendung ist unabhängig davon erforderlich, ob Sie die integrierte Authentifizierung oder einen Dienstprinzipal verwenden.

Wenn Sie Ihre Anwendung registrieren, liefern Sie Microsoft Entra ID Informationen über Ihre Anwendung. Microsoft Entra ID stellt dann eine Anwendungs-ID bereit, eine sogenannte Client-ID, mit der Sie Ihre Anwendung zur Laufzeit Microsoft Entra ID zuordnen können. Weitere Informationen zur Anwendungs-ID finden Sie unter Anwendungs- und Dienstprinzipalobjekte in Azure Active Directory.

Führen Sie zum Registrieren Ihrer Batch-Anwendung die Schritte unter Registrieren einer Anwendung aus.

Nachdem Sie Ihre Anwendung registriert haben, können Sie die Anwendungs-ID (Client-ID) auf der Seite Übersicht der Anwendung sehen.

Screenshot of the Application ID shown in the Azure portal.

Konfigurieren der integrierten Authentifizierung

Zum Authentifizieren mit der integrierter Authentifizierung müssen Sie Ihrer Anwendung die Berechtigung zum Herstellen der Verbindung mit der Batch-Dienst-API erteilen. Dieser Schritt ermöglicht es Ihrer Anwendung, Microsoft Entra ID zu verwenden, um Aufrufe der Batch-Dienst-API zu authentifizieren.

Nachdem Sie Ihre Anwendung registriert haben, führen Sie diese Schritte aus, um der Anwendung Zugriff auf den Batch-Dienst zu gewähren:

  1. Suchen Sie im Azure-Portal nach App-Registrierungen, und wählen Sie dies aus.
  2. Wählen Sie auf der Seite App-Registrierungen Ihre Anwendung aus.
  3. Wählen Sie auf der Seite Ihrer Anwendung im linken Navigationsbereich API-Berechtigungen aus.
  4. Wählen Sie auf der Seite API-Berechtigungen die Option Berechtigung hinzufügen aus.
  5. Wählen Sie auf der Seite API-Berechtigungen anfordern die Option Azure Batch aus.
  6. Aktivieren Sie auf der Seite Azure Batch unter Berechtigungen auswählen das Kontrollkästchen neben user_impersonation, und wählen Sie dann Berechtigungen hinzufügen aus.

Die Seite API-Berechtigungen zeigt jetzt, dass Ihre Microsoft Entra-Anwendung Zugriff sowohl auf Microsoft Graph als auch Azure Batch hat. Berechtigungen für Microsoft Graph werden automatisch gewährt, wenn Sie eine App bei Microsoft Entra ID registrieren.

Konfigurieren eines Dienstprinzipals

Um eine Anwendung zu authentifizieren, die unbeaufsichtigt ausgeführt wird, verwenden Sie einen Dienstprinzipal. Wenn sich Ihre Anwendung mit einem Dienstprinzipal authentifiziert, sendet sie sowohl die Anwendungs-ID als auch einen geheimen Schlüssel an Microsoft Entra ID.

Nachdem Sie die Anwendung registrieren, befolgen Sie diese Schritte im Azure-Portal, um einen Dienstprinzipal zu konfigurieren:

  1. Fordern Sie ein Geheimnis für Ihre Anwendung an.
  2. Weisen Sie der Anwendung die rollenbasierte Zugriffssteuerung von Azure (role-bases access control, Azure-RBAC) zu.

Anfordern eines Geheimnisses für Ihre Anwendung

Führen Sie die folgenden Schritte aus, um den geheimen Schlüssel zu erstellen und zu kopieren, um ihn in Ihrem Code zu verwenden:

  1. Suchen Sie im Azure-Portal nach App-Registrierungen, und wählen Sie dies aus.
  2. Wählen Sie auf der Seite App-Registrierungen Ihre Anwendung aus.
  3. Wählen Sie auf der Seite Ihrer Anwendung zertifikate und geheime Schlüssel aus der linken Navigationsleiste aus.
  4. Wählen Sie auf der Seite "Zertifikate und geheime Schlüssel " die Option "Neuer geheimer Clientschlüssel" aus.
  5. Geben Sie auf der Seite Geheimen Clientschlüssel hinzufügen eine Beschreibung ein, und wählen Sie eine Ablauffrist für das Geheimnis aus.
  6. Wählen Sie "Hinzufügen" aus, um den geheimen Schlüssel zu erstellen und auf der Seite "Zertifikate und geheime Schlüssel " anzuzeigen.
  7. Kopieren Sie den gemeinen Wert an einen sicheren Ort, da Sie nach dem Verlassen dieser Seite nicht mehr darauf zugreifen können. Wenn Sie den Zugriff auf Ihren Schlüssel verlieren, können Sie einen neuen generieren.

Zuweisen von Azure-RBAC in Ihrer Anwendung

Führen Sie diese Schritte aus, um Ihrer Anwendung eine Azure RBAC-Rolle zuzuweisen. Ausführliche Informationen finden Sie unter Zuweisen von Azure-Rollen über das Azure-Portal.

  1. Navigieren Sie im Azure-Portal zu dem Batch-Konto, das Ihre Anwendung verwendet.
  2. Wählen Sie im linken Navigationsbereich auf Zugriffssteuerung (IAM) .
  3. Wählen Sie auf der Seite Zugriffssteuerung (IAM) die Option Rollenzuweisung hinzufügen aus.
  4. Wählen Sie auf der Seite Rollenzuweisung hinzufügen die Registerkarte Rolle und dann entweder die Rolle Mitwirkender oder Leser für Ihre App aus.
  5. Wählen Sie die Registerkarte Mitglieder und dann unter Mitglieder die Option Mitglieder auswählen aus.
  6. Suchen Sie auf dem Bildschirm Mitglieder auswählen nach Ihrer Anwendung wählen Sie diese aus, und wählen Sie dann Auswählen aus.
  7. Wählen Sie auf der Seite Rollenzuweisung hinzufügen die Option Überprüfen + zuweisen aus.

Ihre Anwendung sollte jetzt auf der Registerkarte Rollenzuweisungen auf der Seite Zugriffssteuerung (IAM) des Batch-Kontos angezeigt werden.

Zuweisen einer benutzerdefinierten Rolle

Eine benutzerdefinierte Rolle gewährt einem Benutzer eine präzise Berechtigung zum Einreichen von Aufträgen, Aufgaben und mehr. Sie können benutzerdefinierte Rollen verwenden, um Benutzer daran zu hindern, Vorgänge durchzuführen, die sich auf die Kosten auswirken, wie z. B. das Erstellen von Pools oder das Ändern von Knoten.

Sie können eine benutzerdefinierte Rolle verwenden, um einem Benutzer, einer Gruppe oder einem Dienstprinzipal in Microsoft Entra Berechtigungen für die folgenden Azure Batch-RBAC-Vorgänge zu erteilen oder zu verweigern:

  • Microsoft.Batch/batchAccounts/pools/write
  • Microsoft.Batch/batchAccounts/pools/delete
  • Microsoft.Batch/batchAccounts/pools/read
  • Microsoft.Batch/batchAccounts/jobSchedules/write
  • Microsoft.Batch/batchAccounts/jobSchedules/delete
  • Microsoft.Batch/batchAccounts/jobSchedules/read
  • Microsoft.Batch/batchAccounts/jobs/write
  • Microsoft.Batch/batchAccounts/jobs/delete
  • Microsoft.Batch/batchAccounts/jobs/read
  • Microsoft.Batch/batchAccounts/certificates/write
  • Microsoft.Batch/batchAccounts/certificates/delete
  • Microsoft.Batch/batchAccounts/certificates/read
  • Microsoft.Batch/batchAccounts/read, für alle Lesevorgänge
  • Microsoft.Batch/batchAccounts/listKeys/action, für alle Vorgänge

Benutzerdefinierte Rollen sind für Benutzer, die von Microsoft Entra authentifiziert werden, nicht für die Batch-Konto-Anmeldeinformationen mit freigegebenem Schlüssel. Anmeldeinformationen für das Batch-Konto gewähren die volle Berechtigung für das Batch-Konto. Aufträge, die den automatischen Pool verwenden, erfordern Berechtigungen auf Poolebene.

Hinweis

Bestimmte Rollenzuweisungen müssen im actions-Feld angegeben werden während andere Rollen im dataActions-Feld angegeben werden müssen. Weitere Informationen finden Sie unter Vorgänge mit dem Azure-Ressourcenanbieter.

Das folgende Beispiel zeigt eine benutzerdefinierte Azure Batch-Rollendefinition:

{
 "properties":{
    "roleName":"Azure Batch Custom Job Submitter",
    "type":"CustomRole",
    "description":"Allows a user to submit jobs to Azure Batch but not manage pools",
    "assignableScopes":[
      "/subscriptions/88888888-8888-8888-8888-888888888888"
    ],
    "permissions":[
      {
        "actions":[
          "Microsoft.Batch/*/read",
          "Microsoft.Authorization/*/read",
          "Microsoft.Resources/subscriptions/resourceGroups/read",
          "Microsoft.Support/*",
          "Microsoft.Insights/alertRules/*"
        ],
        "notActions":[

        ],
        "dataActions":[
          "Microsoft.Batch/batchAccounts/jobs/*",
          "Microsoft.Batch/batchAccounts/jobSchedules/*"
        ],
        "notDataActions":[

        ]
      }
    ]
  }
}

Weitere Informationen zum Erstellen einer benutzerdefinierten Rolle finden Sie unter Benutzerdefinierte Azure-Rollen.

Codebeispiele

Die Codebeispiele in diesem Abschnitt zeigen das Authentifizieren mit Microsoft Entra mittels der integrierten Authentifizierung oder mit einem Dienstprinzipal. Die Codebeispiele verwenden .NET und Python, aber die Konzepte sind für andere Sprachen ähnlich.

Hinweis

Ein Microsoft Entra-Authentifizierungstoken läuft nach einer Stunde ab. Wenn Sie ein langlebiges BatchClient-Objekt verwenden, ist es am besten, bei jeder Anforderung ein Token von MSAL abzurufen, um sicherzustellen, dass Sie immer über ein gültiges Token verfügen.

Schreiben Sie hierfür in .NET eine Methode, die das Token aus Microsoft Entra ID abruft, und übergeben Sie diese Methode als Delegat an ein BatchTokenCredentials-Objekt. Jede Anforderung an den Batch-Dienst ruft die Delegat-Methode auf, um sicherzustellen, dass ein gültiges Token bereitgestellt wird. Standardmäßig werden Token von MSAL zwischengespeichert, sodass nur dann ein neues Token aus Microsoft Entra abgerufen wird, wenn dies erforderlich ist. Weitere Informationen zu Token in Microsoft Entra ID finden Sie unter Sicherheitstoken.

Codebeispiel: Verwenden der integrierten Authentifizierung in Microsoft Entra mit Batch .NET

So authentifizieren Sie mit integrierter Authentifizierung von Batch .NET:

  1. Installieren Sie die Azure Batch .NET- und die MSAL-NuGet-Pakete.

  2. Deklarieren Sie die folgenden using-Anweisungen in Ihrem Code:

    using Microsoft.Azure.Batch;
    using Microsoft.Azure.Batch.Auth;
    using Microsoft.Identity.Client;
    
  3. Verweisen Sie auf den Microsoft Entra-Endpunkt, einschließlich der Mandanten-ID. Sie können Ihre Mandanten-ID auf der Microsoft Entra ID-Seite Übersicht im Azure-Portal abrufen.

    private const string AuthorityUri = "https://login.microsoftonline.com/<tenant-id>";
    
  4. Verweisen Sie auf den Ressourcenendpunkt für den Batch-Dienst:

    private const string BatchResourceUri = "https://batch.core.windows.net/";
    
  5. Verweisen Sie auf Ihr Batch-Konto:

    private const string BatchAccountUrl = "https://<myaccount>.<mylocation>.batch.azure.com";
    
  6. Geben Sie die Anwendungs-ID (Client-ID) für Ihre Anwendung an. Sie können die Anwendungs-ID auf der Seite Übersicht Ihrer Anwendung im Azure-Portal abrufen.

    private const string ClientId = "<application-id>";
    
  7. Geben Sie den Umleitungs-URI an, den Sie bei der Registrierung der Anwendung eingegeben haben.

    private const string RedirectUri = "https://<redirect-uri>";
    
  8. Schreiben Sie eine Callbackmethode, um das Authentifizierungstoken aus Microsoft Entra ID abzurufen. Im folgenden Beispiel wird MSAL aufgerufen, um einen Benutzer zu authentifizieren, der mit der Anwendung interagiert. Die MSAL IConfidentialClientApplication.AcquireTokenByAuthorizationCode-Methode fordert den Benutzer zur Eingabe seiner Anmeldeinformationen auf. Die Anwendung wird fortgesetzt, sobald der Benutzer Anmeldeinformationen bereitstellt.

    Der Parameter authorizationCode ist der Autorisierungscode, der nach der Authentifizierung des Benutzers vom Autorisierungsserver erhalten wird. WithRedirectUri gibt den Umleitungs-URI an, an den der Autorisierungsserver den Benutzer nach der Authentifizierung umleitet.

    public static async Task<string> GetTokenUsingAuthorizationCode(string authorizationCode, string redirectUri, string[] scopes)
    {
        var app = ConfidentialClientApplicationBuilder.Create(ClientId)
                    .WithAuthority(AuthorityUri)
                    .WithRedirectUri(RedirectUri)
                    .Build();
    
        var authResult = await app.AcquireTokenByAuthorizationCode(scopes, authorizationCode).ExecuteAsync();
        return authResult.AccessToken;
    }
    
  9. Rufen Sie diese Methode mit dem folgenden Code auf, und ersetzen Sie <authorization-code> mit dem vom Autorisierungsserver erhaltenen Autorisierungscode. Der .default-Bereich stellt sicher, dass der Benutzer über die Berechtigung für den Zugriff auf alle Bereiche für die Ressource verfügt.

    
    var token = await GetTokenUsingAuthorizationCode("<authorization-code>", "RedirectUri", new string[] { "BatchResourceUri/.default" });
    
  10. Erstellen Sie ein BatchTokenCredentials-Objekt, in dem der Delegat als Parameter verwendet wird. Verwenden Sie diese Anmeldeinformationen, um ein BatchClient-Objekt zu öffnen. Verwenden Sie dann das BatchClient-Objekt für nachfolgende Vorgänge für den Batch-Dienst:

    public static void PerformBatchOperations()
    {
        Func<Task<string>> tokenProvider = () => GetTokenUsingAuthorizationCode();
    
        using (var client = BatchClient.Open(new BatchTokenCredentials(BatchAccountUrl, tokenProvider)))
        {
            client.JobOperations.ListJobs();
        }
    }
    

Codebeispiel: Verwenden eines Microsoft Entra-Dienstprinzipals mit Batch .NET

So authentifizieren Sie mit einem Dienstprinzipal von Batch .NET:

  1. Installieren Sie die Azure Batch .NET- und die MSAL-NuGet-Pakete.

  2. Deklarieren Sie die folgenden using-Anweisungen in Ihrem Code:

    using Microsoft.Azure.Batch;
    using Microsoft.Azure.Batch.Auth;
    using Microsoft.Identity.Client;
    
  3. Verweisen Sie auf den Microsoft Entra-Endpunkt, einschließlich der Mandanten-ID. Wenn Sie einen Dienstprinzipal verwenden, müssen Sie einen mandantenspezifischen Endpunkt angeben. Sie können Ihre Mandanten-ID auf der Microsoft Entra ID-Seite Übersicht im Azure-Portal abrufen.

    private const string AuthorityUri = "https://login.microsoftonline.com/<tenant-id>";
    
  4. Verweisen Sie auf den Ressourcenendpunkt für den Batch-Dienst:

    private const string BatchResourceUri = "https://batch.core.windows.net/";
    
  5. Verweisen Sie auf Ihr Batch-Konto:

    private const string BatchAccountUrl = "https://<myaccount>.<mylocation>.batch.azure.com";
    
  6. Geben Sie die Anwendungs-ID (Client-ID) für Ihre Anwendung an. Sie können die Anwendungs-ID auf der Seite Übersicht Ihrer Anwendung im Azure-Portal abrufen.

    private const string ClientId = "<application-id>";
    
  7. Geben Sie den geheimen Schlüssel an, den Sie aus dem Azure-Portal kopiert haben.

    private const string ClientKey = "<secret-key>";
    
  8. Schreiben Sie eine Callbackmethode, um das Authentifizierungstoken aus Microsoft Entra ID abzurufen. Die folgende ConfidentialClientApplicationBuilder.Create-Methode ruft MSAL für die unbeaufsichtigte Authentifizierung auf.

    public static async Task<string> GetAccessToken(string[] scopes)
    {
        var app = ConfidentialClientApplicationBuilder.Create(clientId)
                    .WithClientSecret(ClientKey)
                    .WithAuthority(new Uri(AuthorityUri))
                    .Build();
    
        var result = await app.AcquireTokenForClient(scopes).ExecuteAsync();
        return result.AccessToken;
    }
    
  9. Rufen Sie diese Methode mithilfe des folgenden Codes auf. Der .default-Bereich stellt sicher, dass die Anwendung über die Berechtigung für den Zugriff auf alle Bereiche für die Ressource verfügt.

       var token = await GetAccessToken(new string[] { "BatchResourceId/.default" });
    
  10. Erstellen Sie ein BatchTokenCredentials-Objekt, in dem der Delegat als Parameter verwendet wird. Verwenden Sie diese Anmeldeinformationen, um ein BatchClient-Objekt zu öffnen. Verwenden Sie dann das BatchClient-Objekt für nachfolgende Vorgänge für den Batch-Dienst:

    public static void PerformBatchOperations()
    {
        Func<Task<string>> tokenProvider = () => GetAccessToken();
    
        using (var client = BatchClient.Open(new BatchTokenCredentials(BatchAccountUrl, tokenProvider)))
        {
            client.JobOperations.ListJobs();
        }
    }
    

Codebeispiel: Verwenden eines Microsoft Entra-Dienstprinzipals mit Batch Python

So authentifizieren Sie mit einem Dienstprinzipal von Batch Python:

  1. Installieren Sie die Python-Module azure-batch und azure-common.

  2. Verweisen Sie auf die Module:

    from azure.batch import BatchServiceClient
    from azure.common.credentials import ServicePrincipalCredentials
    
  3. Um einen Dienstprinzipal zu verwenden, geben Sie einen mandantenspezifischen Endpunkt an. Sie können Ihre Mandanten-ID auf der Microsoft Entra ID-Seite Übersicht oder Eigenschaften im Azure-Portal abrufen.

    TENANT_ID = "<tenant-id>"
    
  4. Verweisen Sie auf den Ressourcenendpunkt für den Batch-Dienst:

    RESOURCE = "https://batch.core.windows.net/"
    
  5. Verweisen Sie auf Ihr Batch-Konto:

    BATCH_ACCOUNT_URL = "https://<myaccount>.<mylocation>.batch.azure.com"
    
  6. Geben Sie die Anwendungs-ID (Client-ID) für Ihre Anwendung an. Sie können die Anwendungs-ID auf der Seite Übersicht Ihrer Anwendung im Azure-Portal abrufen.

    CLIENT_ID = "<application-id>"
    
  7. Geben Sie den geheimen Schlüssel an, den Sie aus dem Azure-Portal kopiert haben:

    SECRET = "<secret-key>"
    
  8. Erstellen Sie ein ServicePrincipalCredentials-Objekt:

    credentials = ServicePrincipalCredentials(
        client_id=CLIENT_ID,
        secret=SECRET,
        tenant=TENANT_ID,
        resource=RESOURCE
    )
    
  9. Verwenden Sie die Dienstprinzipal-Anmeldeinformationen, um ein BatchServiceClient-Objekt zu öffnen. Verwenden Sie dann das BatchServiceClient-Objekt für nachfolgende Vorgänge für den Batch-Dienst.

        batch_client = BatchServiceClient(
        credentials,
        batch_url=BATCH_ACCOUNT_URL
    )
    

Ein Python-Beispiel zum Erstellen eines Batch-Clients, der mithilfe eines Microsoft Entra-Token authentifiziert wird, finden Sie unter Beispiel: Bereitstellen eines benutzerdefinierten Azure Batch-Images mit einem Python-Skript.

Nächste Schritte