Udostępnij przez


Uwierzytelnianie usług Azure Batch za pomocą Microsoft Entra ID

Azure Batch obsługuje uwierzytelnianie za pomocą Microsoft Entra ID, wielodostępnej usługi katalogowej i zarządzania tożsamościami działającej w chmurze od Microsoftu. Azure używa Microsoft Entra ID do uwierzytelniania swoich klientów, administratorów usług i użytkowników organizacyjnych.

Artykuł opisuje dwa sposoby użycia uwierzytelniania Microsoft Entra z Azure Batch.

  • Uwierzytelnianie zintegrowane uwierzytelnia użytkownika, który współdziała z aplikacją. Aplikacja zbiera dane uwierzytelniające użytkownika i wykorzystuje je do uwierzytelniania dostępu do zasobów Batch.

  • Główna tożsamość usługi uwierzytelnia nieobsługiwaną aplikację. Zasada usługi definiuje politykę i uprawnienia dla aplikacji oraz reprezentuje aplikację w celu uzyskania dostępu do zasobów Batch w czasie wykonania.

Aby uzyskać więcej informacji o Microsoft Entra ID, zobacz dokumentację Microsoft Entra.

Zbierz punkty końcowe do uwierzytelniania

Aby uwierzytelniać aplikacje Batch za pomocą identyfikatora Microsoft Entra, musisz uwzględnić w swoim kodzie punkt końcowy Microsoft Entra oraz punkt końcowy zasobów Batch.

Microsoft Entra endpoint

Podstawowy punkt końcowy władzy Microsoft Entra to https://login.microsoftonline.com/. Aby uwierzytelnić się za pomocą Microsoft Entra ID, użyj tego punktu końcowego wraz z identyfikatorem dzierżawy, który identyfikuje dzierżawę Microsoft Entra używaną do uwierzytelniania.

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

Możesz uzyskać identyfikator najemcy z głównej strony Microsoft Entra ID w portalu Azure. Możesz także wybrać Właściwości w lewym panelu nawigacyjnym i zobaczyć Identyfikator dzierżawcy na stronie Właściwości.

Zrzut ekranu identyfikatora dzierżawcy w portalu Azure.

Ważne

  • Konieczny jest punkt końcowy Microsoft Entra specyficzny dla dzierżawcy, gdy uwierzytelniasz się za pomocą jednostki usługi.

  • When you authenticate by using integrated authentication, the tenant-specific endpoint is recommended, but optional. You can also use the Microsoft Entra common endpoint to provide a generic credential gathering interface when a specific tenant isn't provided. Wspólny punkt końcowy to https://login.microsoftonline.com/common.

For more information about Microsoft Entra endpoints, see Authentication vs. authorization.

Końcówka zbioru zasobów

Aby uzyskać token do uwierzytelniania żądań do usługi Batch, użyj końcowego punktu zasobu Batch https://batch.core.windows.net/.

Zarejestruj swoją aplikację u najemcy

Pierwszym krokiem w korzystaniu z uwierzytelniania Microsoft Entra jest zarejestrowanie aplikacji w dzierżawie Microsoft Entra. Po zarejestrowaniu swojej aplikacji możesz wywołać Microsoft Authentication Library (MSAL) z poziomu swojego kodu. The MSAL provides an API for authenticating with Microsoft Entra ID from your application. Registering your application is required whether you use integrated authentication or a service principal.

Kiedy rejestrujesz swoją aplikację, podajesz informacje o niej usłudze Microsoft Entra ID. Microsoft Entra ID następnie zapewnia identyfikator aplikacji (ID aplikacji), nazywany również identyfikatorem klienta (ID klienta), który służy do powiązania aplikacji z Microsoft Entra ID podczas działania. Aby uzyskać więcej informacji na temat identyfikatora aplikacji, zobacz Obiekty aplikacji i obiektów usługi głównej w Microsoft Entra ID.

To register your Batch application, follow the steps at Register an application.

Po zarejestrowaniu aplikacji możesz zobaczyć identyfikator Aplikacji (klienta) na stronie Przegląd aplikacji.

Zrzut ekranu identyfikatora aplikacji pokazany w portalu Azure.

Skonfiguruj zintegrowane uwierzytelnianie

Aby uwierzytelniać przy użyciu zintegrowanego uwierzytelniania, musisz nadać swojej aplikacji uprawnienie do łączenia się z interfejsem API usługi Batch. Ten krok pozwala Twojej aplikacji używać Microsoft Entra ID do uwierzytelniania wywołań do interfejsu API usługi Batch.

Po zarejestrowaniu aplikacji, wykonaj następujące kroki, aby przyznać aplikacji dostęp do usługi Batch:

  1. W portalu Azure wyszukaj i wybierz rejestracje aplikacji.
  2. Na stronie Rejestracje aplikacji wybierz swoją aplikację.
  3. Na stronie swojej aplikacji wybierz Uprawnienia API z lewego menu nawigacyjnego.
  4. On the API permissions page, select Add a permission.
  5. On the Request API permissions page, select Azure Batch.
  6. Na stronie Azure Batch, w sekcji Wybierz uprawnienia, zaznacz pole wyboru obok user_impersonation, a następnie wybierz Dodaj uprawnienia.

The API permissions page now shows that your Microsoft Entra application has access to both Microsoft Graph and Azure Batch. Uprawnienia są automatycznie przyznawane usłudze Microsoft Graph po zarejestrowaniu aplikacji za pomocą Microsoft Entra ID.

Konfiguracja obiektu zabezpieczeń usługi

To authenticate an application that runs unattended, you use a service principal. When your application authenticates by using a service principal, it sends both the application ID and a secret key to Microsoft Entra ID.

After you register your application, follow these steps in the Azure portal to configure a service principal:

  1. Request a secret for your application.
  2. Przypisz oparty na rolach system kontroli dostępu Azure (Azure RBAC) do swojej aplikacji.

Poproś o tajny klucz dla swojej aplikacji

Aby utworzyć i skopiować klucz tajny do użycia w kodzie, wykonaj następujące kroki:

  1. W portalu Azure wyszukaj i wybierz app registrations.
  2. Na stronie Rejestracje aplikacji wybierz swoją aplikację.
  3. Na stronie swojej aplikacji wybierz Certyfikaty i tajemnice z lewego menu nawigacyjnego.
  4. Na stronie Certyfikaty & tajemnice wybierz Nowy klient tajemnic.
  5. On the Add a client secret page, enter a description and select an expiration period for the secret.
  6. Select Add to create the secret and display it on the Certificates & secrets page.
  7. Copy the secret Value to a safe place, because you won't be able to access it again after you leave this page. If you lose access to your key, you can generate a new one.

Assign Azure RBAC to your application

Postępuj zgodnie z tymi krokami, aby przypisać rolę Azure RBAC do swojej aplikacji. Aby uzyskać więcej informacji, zobacz Role-based access control for Azure Batch service.

  1. W portalu Azure przejdź do konta Batch, z którego korzysta Twoja aplikacja.
  2. Wybierz Access control (IAM) z lewego menu nawigacyjnego.
  3. Na stronie Kontrola dostępu (IAM) wybierz Dodaj przypisanie roli.
  4. On the Add role assignment page, select the Role tab, and then select one of Azure Batch built-in RBAC roles the role for your app.
  5. Wybierz kartę Członkowie, a następnie wybierz Wybierz członków w sekcji Członkowie.
  6. Na ekranie Wybierz członków wyszukaj i wybierz swoją aplikację, a następnie wybierz Wybierz.
  7. Select Review + assign on the Add role assignment page.

Twoja aplikacja powinna teraz pojawić się na karcie Przypisania ról na stronie Kontrola dostępu (IAM) konta Batch.

Code examples

Przykłady kodu w tej sekcji pokazują, jak uwierzytelniać się za pomocą Microsoft Entra ID, używając uwierzytelniania zintegrowanego lub profilu usługi. The code examples use .NET and Python, but the concepts are similar for other languages.

Uwaga

Token uwierzytelniający Microsoft Entra wygasa po jednej godzinie. Korzystając z długotrwałego obiektu BatchClient, najlepiej jest uzyskać token z MSAL przy każdym żądaniu, aby mieć pewność, że zawsze masz ważny token.

Aby to zrobić w .NET, napisz metodę, która pobiera token z Microsoft Entra ID i przekaż tę metodę do obiektu BatchTokenCredentials jako delegata. Każde żądanie do usługi Batch wywołuje metodę delegata, aby upewnić się, że dostarczony jest prawidłowy token. Domyślnie MSAL przechowuje tokeny w pamięci podręcznej, więc nowy token jest pobierany z Microsoft Entra tylko wtedy, gdy jest to konieczne. For more information about tokens in Microsoft Entra ID, see Security tokens.

Przykład kodu: użycie zintegrowanego uwierzytelniania Microsoft Entra z Batch .NET

To authenticate with integrated authentication from Batch .NET:

  1. Zainstaluj pakiety NuGet Azure Batch .NET i MSAL.

  2. Zadeklaruj następujące using instrukcje w swoim kodzie:

    using Microsoft.Azure.Batch;
    using Microsoft.Azure.Batch.Auth;
    using Microsoft.Identity.Client;
    
  3. Odwołaj się do punktu końcowego Microsoft Entra, w tym identyfikatora dzierżawy. You can get your tenant ID from the Microsoft Entra ID Overview page in the Azure portal.

    private const string AuthorityUri = "https://login.microsoftonline.com/<tenant-id>";
    
  4. Odwołaj się do punktu końcowego zasobu usługi Batch:

    private const string BatchResourceUri = "https://batch.core.windows.net/";
    
  5. Reference your Batch account:

    private const string BatchAccountUrl = "https://<myaccount>.<mylocation>.batch.azure.com";
    
  6. Specify the application (client) ID for your application. Możesz uzyskać identyfikator aplikacji z strony Przegląd swojej aplikacji w portalu Azure.

    private const string ClientId = "<application-id>";
    
  7. Określ URI przekierowania, który podałeś podczas rejestracji aplikacji.

    private const string RedirectUri = "https://<redirect-uri>";
    
  8. Napisz metodę wywołania zwrotnego, aby uzyskać token uwierzytelniający od Microsoft Entra ID. Przykład poniżej pokazuje użycie MSAL do uwierzytelnienia użytkownika, który współpracuje z aplikacją. Metoda MSAL IConfidentialClientApplication.AcquireTokenByAuthorizationCode prosi użytkownika o jego dane uwierzytelniające. Gdy użytkownik poda dane uwierzytelniające, aplikacja przechodzi do działania.

    Parametr authorizationCode jest kodem autoryzacyjnym uzyskanym z serwera autoryzacji po uwierzytelnieniu użytkownika. WithRedirectUri określa URI przekierowania, do którego serwer autoryzacji przekierowuje użytkownika po uwierzytelnieniu.

    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. Wywołaj tę metodę używając poniższego kodu, zastępując <authorization-code> kodem autoryzacji uzyskanym z serwera autoryzacji. The .default scope ensures that the user has permission to access all the scopes for the resource.

    
    var token = await GetTokenUsingAuthorizationCode("<authorization-code>", "RedirectUri", new string[] { "BatchResourceUri/.default" });
    
  10. Skonstruuj obiekt BatchTokenCredentials, który przyjmuje delegata jako parametr. Użyj tych poświadczeń, aby otworzyć obiekt BatchClient. Następnie użyj obiektu BatchClient do przeprowadzania kolejnych operacji w ramach usługi Batch.

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

Przykład kodu: Użycie głównego elementu usługi Microsoft Entra z Batch .NET

Aby uwierzytelnić za pomocą głównego użytkownika usługi z Batch .NET:

  1. Zainstaluj pakiety NuGet Azure Batch .NET i MSAL.

  2. Zadeklaruj następujące instrukcje using w swoim kodzie:

    using Microsoft.Azure.Batch;
    using Microsoft.Azure.Batch.Auth;
    using Microsoft.Identity.Client;
    
  3. Reference the Microsoft Entra endpoint, including the tenant ID. Kiedy używasz głównego konta usługi, musisz podać punkt końcowy specyficzny dla dzierżawcy. You can get your tenant ID from the Microsoft Entra ID Overview page in the Azure portal.

    private const string AuthorityUri = "https://login.microsoftonline.com/<tenant-id>";
    
  4. Odwołaj się do punktu końcowego zasobu usługi Batch.

    private const string BatchResourceUri = "https://batch.core.windows.net/";
    
  5. Odwołaj się do swojego konta Batch.

    private const string BatchAccountUrl = "https://<myaccount>.<mylocation>.batch.azure.com";
    
  6. Specify the application (client) ID for your application. Możesz uzyskać identyfikator aplikacji ze strony Overview swojej aplikacji w portalu Azure.

    private const string ClientId = "<application-id>";
    
  7. Określ klucz tajny, który skopiowałeś z portalu Azure.

    private const string ClientKey = "<secret-key>";
    
  8. Napisz metodę zwrotną, aby uzyskać token uwierzytelniania od Microsoft Entra ID. The following ConfidentialClientApplicationBuilder.Create method calls MSAL for unattended authentication.

    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. Wywołaj tę metodę, używając następującego kodu. Zakres .default gwarantuje, że aplikacja ma uprawnienia do dostępu do wszystkich zakresów dla zasobu.

       var token = await GetAccessToken(new string[] { $"{BatchResourceUri}/.default" });
    
  10. Utwórz obiekt BatchTokenCredentials, który przyjmuje delegata jako parametr. Użyj tych danych uwierzytelniających, aby otworzyć obiekt BatchClient. Then use the BatchClient object for subsequent operations against the Batch service:

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

Code example: Use a Microsoft Entra service principal with Batch Python

To authenticate with a service principal from Batch Python:

  1. Install the azure-batch and azure-common Python modules.

  2. Reference the modules:

    from azure.batch import BatchServiceClient
    from azure.common.credentials import ServicePrincipalCredentials
    
  3. To use a service principal, provide a tenant-specific endpoint. Możesz uzyskać identyfikator dzierżawy na stronie Przegląd lub stronie Właściwości usługi Microsoft Entra ID w portalu Azure.

    TENANT_ID = "<tenant-id>"
    
  4. Reference the Batch service resource endpoint:

    RESOURCE = "https://batch.core.windows.net/"
    
  5. Odwołaj się do swojego konta Batch

    BATCH_ACCOUNT_URL = "https://<myaccount>.<mylocation>.batch.azure.com"
    
  6. Określ identyfikator aplikacji (klienta) dla swojej aplikacji. You can get the application ID from your application's Overview page in the Azure portal.

    CLIENT_ID = "<application-id>"
    
  7. Określ klucz tajny, który skopiowałeś z portalu Azure.

    SECRET = "<secret-key>"
    
  8. Create a ServicePrincipalCredentials object:

    credentials = ServicePrincipalCredentials(
        client_id=CLIENT_ID,
        secret=SECRET,
        tenant=TENANT_ID,
        resource=RESOURCE
    )
    
  9. Użyj poświadczeń podmiotu zabezpieczeń, aby otworzyć obiekt BatchServiceClient. Następnie użyj obiektu BatchServiceClient do kolejnych operacji w stosunku do usługi Batch.

        batch_client = BatchServiceClient(
        credentials,
        batch_url=BATCH_ACCOUNT_URL
    )
    

For a Python example of how to create a Batch client authenticated by using a Microsoft Entra token, see the Deploying Azure Batch Custom Image with a Python Script sample.

Next steps