Uwierzytelnianie usług Azure Batch przy użyciu identyfikatora Entra firmy Microsoft

Usługa Azure Batch obsługuje uwierzytelnianie za pomocą identyfikatora Entra FIRMY Microsoft, wielodostępnej usługi katalogowej i zarządzania tożsamościami firmy Microsoft. Platforma Azure używa identyfikatora Entra firmy Microsoft do uwierzytelniania własnych klientów, administratorów usług i użytkowników organizacji.

W tym artykule opisano dwa sposoby korzystania z uwierzytelniania entra firmy Microsoft w usłudze Azure Batch:

  • Zintegrowane uwierzytelnianie uwierzytelnia użytkownika, który wchodzi w interakcję z aplikacją. Aplikacja zbiera poświadczenia użytkownika i używa tych poświadczeń do autoryzowania dostępu do zasobów usługi Batch.

  • Jednostka usługi uwierzytelnia nienadzorowaną aplikację. Jednostka usługi definiuje zasady i uprawnienia dla aplikacji oraz reprezentuje aplikację w celu uzyskania dostępu do zasobów usługi Batch w czasie wykonywania.

Aby uzyskać więcej informacji na temat identyfikatora Entra firmy Microsoft, zobacz dokumentację firmy Microsoft Entra.

Zbieranie punktów końcowych na potrzeby uwierzytelniania

Aby uwierzytelnić aplikacje usługi Batch przy użyciu identyfikatora Entra firmy Microsoft, należy uwzględnić punkt końcowy firmy Microsoft Entra i punkt końcowy zasobu usługi Batch w kodzie.

Punkt końcowy firmy Microsoft Entra

Podstawowym punktem końcowym urzędu entra firmy Microsoft jest https://login.microsoftonline.com/. Aby uwierzytelnić się przy użyciu identyfikatora Entra firmy Microsoft, użyj tego punktu końcowego z identyfikatorem dzierżawy, który identyfikuje dzierżawę firmy Microsoft Entra do użycia na potrzeby uwierzytelniania:

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

Identyfikator dzierżawy można uzyskać z głównej strony Identyfikator entra firmy Microsoft w witrynie Azure Portal. Możesz również wybrać pozycję Właściwości w obszarze nawigacji po lewej stronie i wyświetlić identyfikator dzierżawy na stronie Właściwości .

Screenshot of the Tenant ID in the Azure portal.

Ważne

  • Punkt końcowy firmy Microsoft entra specyficzny dla dzierżawy jest wymagany podczas uwierzytelniania przy użyciu jednostki usługi.

  • Podczas uwierzytelniania przy użyciu zintegrowanego uwierzytelniania zalecany jest punkt końcowy specyficzny dla dzierżawy, ale opcjonalny. Możesz również użyć wspólnego punktu końcowego firmy Microsoft, aby zapewnić ogólny interfejs zbierania poświadczeń, gdy nie podano określonej dzierżawy. Typowym punktem końcowym jest https://login.microsoftonline.com/common.

Aby uzyskać więcej informacji na temat punktów końcowych usługi Microsoft Entra, zobacz Uwierzytelnianie a autoryzacja.

Punkt końcowy zasobu usługi Batch

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

Rejestrowanie aplikacji w dzierżawie

Pierwszym krokiem korzystania z uwierzytelniania entra firmy Microsoft jest zarejestrowanie aplikacji w dzierżawie firmy Microsoft Entra. Po zarejestrowaniu aplikacji możesz wywołać bibliotekę Microsoft Authentication Library (MSAL) ze swojego kodu. Biblioteka MSAL udostępnia interfejs API do uwierzytelniania za pomocą identyfikatora Entra firmy Microsoft z aplikacji. Zarejestrowanie aplikacji jest wymagane niezależnie od tego, czy używasz zintegrowanego uwierzytelniania, czy jednostki usługi.

Podczas rejestrowania aplikacji należy podać informacje o aplikacji do identyfikatora Entra firmy Microsoft. Identyfikator Entra firmy Microsoft udostępnia następnie identyfikator aplikacji, nazywany również identyfikatorem klienta, którego używasz do skojarzenia aplikacji z identyfikatorem Entra firmy Microsoft w czasie wykonywania. Aby uzyskać więcej informacji na temat identyfikatora aplikacji, zobacz Application and service principal objects in Microsoft Entra ID (Obiekty aplikacji i jednostki usługi w identyfikatorze Entra firmy Microsoft).

Aby zarejestrować aplikację usługi Batch, wykonaj kroki opisane w temacie Rejestrowanie aplikacji.

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

Screenshot of the Application ID shown in the Azure portal.

Konfigurowanie zintegrowanego uwierzytelniania

Aby uwierzytelnić się przy użyciu zintegrowanego uwierzytelniania, musisz przyznać aplikacji uprawnienie do nawiązywania połączenia z interfejsem API usługi Batch. Ten krok umożliwia aplikacji używanie identyfikatora Entra firmy Microsoft do uwierzytelniania wywołań interfejsu API usługi Batch.

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

  1. W witrynie Azure Portal wyszukaj i wybierz pozycję Rejestracje aplikacji.
  2. Na stronie Rejestracje aplikacji wybierz aplikację.
  3. Na stronie aplikacji wybierz pozycję Uprawnienia interfejsu API w obszarze nawigacji po lewej stronie.
  4. Na stronie Uprawnienia interfejsu API wybierz pozycję Dodaj uprawnienie.
  5. Na stronie Żądanie uprawnień interfejsu API wybierz pozycję Azure Batch.
  6. Na stronie Azure Batch w obszarze Wybierz uprawnienia zaznacz pole wyboru obok user_impersonation, a następnie wybierz pozycję Dodaj uprawnienia.

Strona uprawnień interfejsu API pokazuje teraz, że aplikacja Microsoft Entra ma dostęp zarówno do programu Microsoft Graph, jak i usługi Azure Batch. Uprawnienia są przyznawane programowi Microsoft Graph automatycznie podczas rejestrowania aplikacji przy użyciu identyfikatora Entra firmy Microsoft.

Konfigurowanie nazwy głównej usługi

Aby uwierzytelnić aplikację, która działa nienadzorowana, należy użyć jednostki usługi. Gdy aplikacja uwierzytelnia się przy użyciu jednostki usługi, wysyła zarówno identyfikator aplikacji, jak i klucz tajny do identyfikatora Entra firmy Microsoft.

Po zarejestrowaniu aplikacji wykonaj następujące kroki w witrynie Azure Portal, aby skonfigurować jednostkę usługi:

  1. Zażądaj wpisu tajnego dla aplikacji.
  2. Przypisz kontrolę dostępu opartą na rolach (RBAC) platformy Azure do aplikacji.

Żądanie wpisu tajnego dla aplikacji

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

  1. W witrynie Azure Portal wyszukaj i wybierz pozycję Rejestracje aplikacji.
  2. Na stronie Rejestracje aplikacji wybierz aplikację.
  3. Na stronie aplikacji wybierz pozycję Certyfikaty i wpisy tajne w obszarze nawigacji po lewej stronie.
  4. Na stronie Certyfikaty i wpisy tajne wybierz pozycję Nowy klucz tajny klienta.
  5. Na stronie Dodawanie wpisu tajnego klienta wprowadź opis i wybierz okres wygaśnięcia wpisu tajnego.
  6. Wybierz pozycję Dodaj , aby utworzyć wpis tajny i wyświetlić go na stronie Certyfikaty i wpisy tajne.
  7. Skopiuj wartość wpisu tajnego do bezpiecznego miejsca, ponieważ nie będzie można uzyskać do niej dostępu ponownie po opuszczeniu tej strony. Jeśli utracisz dostęp do klucza, możesz wygenerować nowy.

Przypisywanie kontroli dostępu opartej na rolach platformy Azure do aplikacji

Wykonaj następujące kroki, aby przypisać rolę RBAC platformy Azure do aplikacji. Aby uzyskać szczegółowe instrukcje, zobacz Przypisywanie ról platformy Azure przy użyciu witryny Azure Portal.

  1. W witrynie Azure Portal przejdź do konta usługi Batch używanego przez aplikację.
  2. Wybierz pozycję Kontrola dostępu (Zarządzanie dostępem i tożsamościami) w obszarze nawigacji po lewej stronie.
  3. Na stronie Kontrola dostępu (Zarządzanie dostępem i tożsamościami) wybierz pozycję Dodaj przypisanie roli.
  4. Na stronie Dodawanie przypisania roli wybierz kartę Rola, a następnie wybierz rolę Współautor lub Czytelnik dla aplikacji.
  5. Wybierz kartę Członkowie i wybierz pozycję Wybierz członków w obszarze Członkowie.
  6. Na ekranie Wybieranie członków wyszukaj i wybierz aplikację, a następnie wybierz pozycję Wybierz.
  7. Wybierz pozycję Przejrzyj i przypisz na stronie Dodawanie przypisania roli.

Aplikacja powinna być teraz wyświetlana na karcie Przypisania ról na stronie Kontrola dostępu (IAM) konta usługi Batch.

Przypisywanie roli niestandardowej

Rola niestandardowa przyznaje użytkownikowi szczegółowe uprawnienia do przesyłania zadań, zadań i nie tylko. Za pomocą ról niestandardowych można uniemożliwić użytkownikom wykonywanie operacji wpływających na koszt, takich jak tworzenie pul lub modyfikowanie węzłów.

Możesz użyć roli niestandardowej, aby udzielić lub odmówić uprawnień użytkownikowi, grupie lub jednostce usługi Firmy Microsoft dla następujących operacji kontroli dostępu opartej na rolach usługi Azure Batch:

  • 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 dla dowolnej operacji odczytu
  • Microsoft.Batch/batchAccounts/listKeys/action, dla dowolnej operacji

Role niestandardowe są przeznaczone dla użytkowników uwierzytelnionych przez identyfikator entra firmy Microsoft, a nie dla poświadczeń konta klucza udostępnionego usługi Batch. Poświadczenia konta usługi Batch dają pełne uprawnienia do konta usługi Batch. Zadania korzystające z puli automatycznej wymagają uprawnień na poziomie puli.

Uwaga

Niektóre przypisania ról muszą być określone w actions polu, podczas gdy inne muszą być określone w dataActions polu. Aby uzyskać więcej informacji, zobacz Operacje dostawcy zasobów platformy Azure.

W poniższym przykładzie przedstawiono definicję roli niestandardowej usługi Azure Batch:

{
 "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":[

        ]
      }
    ]
  }
}

Aby uzyskać więcej informacji na temat tworzenia roli niestandardowej, zobacz Role niestandardowe platformy Azure.

Przykłady kodu

Przykłady kodu w tej sekcji pokazują, jak uwierzytelniać się za pomocą identyfikatora Entra firmy Microsoft przy użyciu zintegrowanego uwierzytelniania lub jednostki usługi. Przykłady kodu używają platformy .NET i języka Python, ale koncepcje są podobne dla innych języków.

Uwaga

Token uwierzytelniania entra firmy Microsoft wygasa po godzinie. Jeśli używasz długotrwałego obiektu BatchClient , najlepiej uzyskać token z biblioteki MSAL na każdym żądaniu, aby upewnić się, że zawsze masz prawidłowy token.

Aby to zrobić na platformie .NET, napisz metodę, która pobiera token z identyfikatora Entra firmy Microsoft i przekazuje tę metodę do obiektu BatchTokenCredentials jako delegata. Każde żądanie do usługi Batch wywołuje metodę delegata, aby upewnić się, że podano prawidłowy token. Domyślnie biblioteka MSAL buforuje tokeny, więc nowy token jest pobierany z firmy Microsoft tylko w razie potrzeby. Aby uzyskać więcej informacji na temat tokenów w identyfikatorze Entra firmy Microsoft, zobacz Tokeny zabezpieczające.

Przykład kodu: Używanie zintegrowanego uwierzytelniania firmy Microsoft z usługą Batch .NET

Aby uwierzytelnić się przy użyciu zintegrowanego uwierzytelniania z platformy .NET usługi Batch:

  1. Zainstaluj platformę .NET usługi Azure Batch i pakiety NuGet biblioteki MSAL .

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

    using Microsoft.Azure.Batch;
    using Microsoft.Azure.Batch.Auth;
    using Microsoft.Identity.Client;
    
  3. Odwołuje się do punktu końcowego firmy Microsoft Entra, w tym identyfikatora dzierżawy. Identyfikator dzierżawy można uzyskać na stronie Przegląd identyfikatora entra firmy Microsoft w witrynie Azure Portal.

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

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

    private const string BatchAccountUrl = "https://<myaccount>.<mylocation>.batch.azure.com";
    
  6. Określ identyfikator aplikacji (klienta) dla aplikacji. Identyfikator aplikacji można pobrać ze strony Przegląd aplikacji w witrynie Azure Portal.

    private const string ClientId = "<application-id>";
    
  7. Określ identyfikator URI przekierowania podany podczas rejestrowania aplikacji.

    private const string RedirectUri = "https://<redirect-uri>";
    
  8. Napisz metodę wywołania zwrotnego, aby uzyskać token uwierzytelniania z identyfikatora Entra firmy Microsoft. Poniższy przykład wywołuje bibliotekę MSAL w celu uwierzytelnienia użytkownika, który wchodzi w interakcję z aplikacją. Metoda MSAL IConfidentialClientApplication.AcquireTokenByAuthorizationCode monituje użytkownika o podanie poświadczeń. Aplikacja będzie kontynuowana po podaniu poświadczeń przez użytkownika.

    Parametr authorizationCode to kod autoryzacji uzyskany z serwera autoryzacji po uwierzytelnieniu użytkownika. WithRedirectUri Określa identyfikator 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ę przy użyciu następującego kodu, zastępując <authorization-code> element kodem autoryzacji uzyskanym z serwera autoryzacji. Zakres .default zapewnia, że użytkownik ma uprawnienia dostępu do wszystkich zakresów zasobu.

    
    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 kolejnych operacji względem 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żywanie jednostki usługi Microsoft Entra z usługą Batch .NET

Aby uwierzytelnić się przy użyciu jednostki usługi z platformy .NET usługi Batch:

  1. Zainstaluj platformę .NET usługi Azure Batch i pakiety NuGet biblioteki MSAL .

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

    using Microsoft.Azure.Batch;
    using Microsoft.Azure.Batch.Auth;
    using Microsoft.Identity.Client;
    
  3. Odwołuje się do punktu końcowego firmy Microsoft Entra, w tym identyfikatora dzierżawy. W przypadku korzystania z jednostki usługi należy podać punkt końcowy specyficzny dla dzierżawy. Identyfikator dzierżawy można uzyskać na stronie Przegląd identyfikatora entra firmy Microsoft w witrynie Azure Portal.

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

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

    private const string BatchAccountUrl = "https://<myaccount>.<mylocation>.batch.azure.com";
    
  6. Określ identyfikator aplikacji (klienta) dla aplikacji. Identyfikator aplikacji można pobrać ze strony Przegląd aplikacji w witrynie Azure Portal.

    private const string ClientId = "<application-id>";
    
  7. Określ klucz tajny skopiowany z witryny Azure Portal.

    private const string ClientKey = "<secret-key>";
    
  8. Napisz metodę wywołania zwrotnego, aby uzyskać token uwierzytelniania z identyfikatora Entra firmy Microsoft. Następująca metoda ConfidentialClientApplicationBuilder.Create wywołuje bibliotekę MSAL do uwierzytelniania nienadzorowanego.

    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ę przy użyciu następującego kodu. Zakres .default zapewnia, że aplikacja ma uprawnienia dostępu do wszystkich zakresów zasobu.

       var token = await GetAccessToken(new string[] { "BatchResourceId/.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 kolejnych operacji względem usługi Batch:

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

Przykład kodu: używanie jednostki usługi Microsoft Entra z usługą Batch Python

Aby uwierzytelnić się przy użyciu jednostki usługi z usługi Batch w języku Python:

  1. Zainstaluj moduły azure-batch i azure-common Python.

  2. Odwołuj się do modułów:

    from azure.batch import BatchServiceClient
    from azure.common.credentials import ServicePrincipalCredentials
    
  3. Aby użyć jednostki usługi, podaj punkt końcowy specyficzny dla dzierżawy. Identyfikator dzierżawy można pobrać ze strony przeglądu identyfikatora entra firmy Microsoft lub strony Właściwości w witrynie Azure Portal.

    TENANT_ID = "<tenant-id>"
    
  4. Odwołanie do punktu końcowego zasobu usługi Batch:

    RESOURCE = "https://batch.core.windows.net/"
    
  5. Odwołuj się do konta usługi Batch:

    BATCH_ACCOUNT_URL = "https://<myaccount>.<mylocation>.batch.azure.com"
    
  6. Określ identyfikator aplikacji (klienta) dla aplikacji. Identyfikator aplikacji można pobrać ze strony Przegląd aplikacji w witrynie Azure Portal.

    CLIENT_ID = "<application-id>"
    
  7. Określ klucz tajny skopiowany z witryny Azure Portal:

    SECRET = "<secret-key>"
    
  8. Utwórz obiekt ServicePrincipalCredentials:

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

        batch_client = BatchServiceClient(
        credentials,
        batch_url=BATCH_ACCOUNT_URL
    )
    

Aby zapoznać się z przykładem tworzenia klienta usługi Batch uwierzytelnionego przy użyciu tokenu usługi Microsoft Entra, zobacz przykład Wdrażanie obrazu niestandardowego usługi Azure Batch przy użyciu skryptu języka Python.

Następne kroki