Dela via


Autentisera Azure Batch-tjänster med Microsoft Entra-ID

Azure Batch stöder autentisering med Microsoft Entra ID, Microsofts molnbaserade katalog- och identitetshanteringstjänst för flera klientorganisationer. Azure använder Microsoft Entra-ID för att autentisera sina egna kunder, tjänstadministratörer och organisationsanvändare.

I den här artikeln beskrivs två sätt att använda Microsoft Entra-autentisering med Azure Batch:

  • Integrerad autentisering autentiserar en användare som interagerar med ett program. Programmet samlar in en användares autentiseringsuppgifter och använder dessa autentiseringsuppgifter för att autentisera åtkomsten till Batch-resurser.

  • Ett huvudnamn för tjänsten autentiserar ett obevakat program. Tjänstens huvudnamn definierar principen och behörigheterna för programmet och representerar programmet för att få åtkomst till Batch-resurser vid körning.

Mer information om Microsoft Entra-ID finns i Microsoft Entra-dokumentationen.

Samla in slutpunkter för autentisering

Om du vill autentisera Batch-program med Microsoft Entra-ID måste du inkludera Microsoft Entra-slutpunkten och Batch-resursslutpunkten i koden.

Microsoft Entra-slutpunkt

Microsoft Entra-utfärdarens basslutpunkt är https://login.microsoftonline.com/. Om du vill autentisera med Microsoft Entra-ID använder du den här slutpunkten med det klient-ID som identifierar Microsoft Entra-klientorganisationen som ska användas för autentisering:

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

Du kan hämta ditt klient-ID från huvudsidan för Microsoft Entra-ID i Azure-portalen. Du kan också välja Egenskaper i det vänstra navigeringsfältet och se klientorganisations-ID :t på sidan Egenskaper .

Skärmbild av klientorganisations-ID:t i Azure-portalen.

Viktigt!

  • Den klientspecifika Microsoft Entra-slutpunkten krävs när du autentiserar med hjälp av tjänstens huvudnamn.

  • När du autentiserar med hjälp av integrerad autentisering rekommenderas den klientspecifika slutpunkten, men valfritt. Du kan också använda microsoft entra common endpoint för att tillhandahålla ett allmänt gränssnitt för insamling av autentiseringsuppgifter när en specifik klientorganisation inte tillhandahålls. Den gemensamma slutpunkten är https://login.microsoftonline.com/common.

Mer information om Microsoft Entra-slutpunkter finns i Autentisering kontra auktorisering.

Batch-resursslutpunkt

Använd Batch-resursslutpunkten https://batch.core.windows.net/ för att hämta en token för autentisering av begäranden till Batch-tjänsten.

Registrera ditt program med en klientorganisation

Det första steget i att använda Microsoft Entra-autentisering är att registrera ditt program i en Microsoft Entra-klientorganisation. När du har registrerat ditt program kan du anropa Microsoft Authentication Library (MSAL) från din kod. MSAL tillhandahåller ett API för autentisering med Microsoft Entra-ID från ditt program. Registrering av ditt program krävs oavsett om du använder integrerad autentisering eller ett huvudnamn för tjänsten.

När du registrerar ditt program anger du information om ditt program till Microsoft Entra-ID. Microsoft Entra-ID tillhandahåller sedan ett program-ID, även kallat ett klient-ID, som du använder för att associera ditt program med Microsoft Entra-ID vid körning. Mer information om program-ID finns i Program- och tjänsthuvudnamnsobjekt i Microsoft Entra-ID.

Om du vill registrera ditt Batch-program följer du stegen i Registrera ett program.

När du har registrerat ditt program kan du se program-ID:t (klient) på programmets översiktssida.

Skärmbild av program-ID som visas i Azure-portalen.

Konfigurera integrerad autentisering

Om du vill autentisera med integrerad autentisering måste du ge programmet behörighet att ansluta till Batch-tjänst-API:et. Det här steget gör att ditt program kan använda Microsoft Entra-ID för att autentisera anrop till Batch-tjänst-API:et.

När du har registrerat ditt program följer du dessa steg för att ge programmet åtkomst till Batch-tjänsten:

  1. I Azure-portalen söker du efter och väljer appregistreringar.
  2. På sidan Appregistreringar väljer du ditt program.
  3. På programmets sida väljer du API-behörigheter i det vänstra navigeringsfältet.
  4. På sidan API-behörigheter väljer du Lägg till en behörighet.
  5. På sidan Api-behörigheter för begäran väljer du Azure Batch.
  6. På sidan Azure Batch , under Välj behörigheter, markerar du kryssrutan bredvid user_impersonation och väljer sedan Lägg till behörigheter.

Sidan API-behörigheter visar nu att ditt Microsoft Entra-program har åtkomst till både Microsoft Graph och Azure Batch. Behörigheter beviljas automatiskt till Microsoft Graph när du registrerar en app med Microsoft Entra-ID.

Konfigurera ett huvudnamn för tjänsten

Om du vill autentisera ett program som körs obevakat använder du tjänstens huvudnamn. När ditt program autentiseras med hjälp av ett huvudnamn för tjänsten skickar det både program-ID:t och en hemlig nyckel till Microsoft Entra-ID.

När du har registrerat ditt program följer du de här stegen i Azure-portalen för att konfigurera ett huvudnamn för tjänsten:

  1. Begär en hemlighet för ditt program.
  2. Tilldela rollbaserad åtkomstkontroll i Azure (Azure RBAC) till ditt program.

Begär en hemlighet för ditt program

Följ de här stegen för att skapa och kopiera den hemliga nyckel som ska användas i koden:

  1. I Azure-portalen söker du efter och väljer appregistreringar.
  2. På sidan Appregistreringar väljer du ditt program.
  3. På programmets sida väljer du Certifikat och hemligheter i det vänstra navigeringsfältet.
  4. På sidan Certifikat och hemligheter väljer du Ny klienthemlighet.
  5. På sidan Lägg till en klienthemlighet anger du en beskrivning och väljer en förfalloperiod för hemligheten.
  6. Välj Lägg till för att skapa hemligheten och visa den på sidan Certifikat och hemligheter .
  7. Kopiera det hemliga värdet till en säker plats eftersom du inte kommer åt det igen när du har lämnat den här sidan. Om du förlorar åtkomsten till din nyckel kan du generera en ny.

Tilldela Azure RBAC till ditt program

Följ de här stegen för att tilldela programmet en Azure RBAC-roll. Detaljerade steg finns i Tilldela Azure-roller med hjälp av Azure-portalen.

  1. I Azure-portalen navigerar du till det Batch-konto som programmet använder.
  2. Välj Åtkomstkontroll (IAM) i det vänstra navigeringsfältet.
  3. På sidan Åtkomstkontroll (IAM) väljer du Lägg till rolltilldelning.
  4. På sidan Lägg till rolltilldelning väljer du fliken Roll och väljer sedan rollen Deltagare eller Läsare för din app.
  5. Välj fliken Medlemmar och välj Välj medlemmar under Medlemmar.
  6. På skärmen Välj medlemmar söker du efter och väljer ditt program och väljer sedan Välj.
  7. Välj Granska + tilldela på sidan Lägg till rolltilldelning .

Ditt program bör nu visas på fliken Rolltilldelningar på sidan Åtkomstkontroll för Batch-kontot (IAM).

Tilldela en anpassad roll

En anpassad roll ger detaljerad behörighet till en användare för att skicka jobb, uppgifter med mera. Du kan använda anpassade roller för att förhindra att användare utför åtgärder som påverkar kostnaden, till exempel att skapa pooler eller ändra noder.

Du kan använda en anpassad roll för att bevilja eller neka behörigheter till en Microsoft Entra-användare, grupp eller tjänstens huvudnamn för följande Azure Batch RBAC-åtgärder:

  • 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 alla läsåtgärder
  • Microsoft.Batch/batchAccounts/listKeys/action, för alla åtgärder

Anpassade roller är för användare som autentiseras av Microsoft Entra-ID, inte för autentiseringsuppgifterna för det delade Batch-nyckelkontot. Autentiseringsuppgifterna för Batch-kontot ger fullständig behörighet till Batch-kontot. Jobb som använder automatisk pool kräver behörigheter på poolnivå.

Kommentar

Vissa rolltilldelningar måste anges i fältet actions , medan andra måste anges i fältet dataActions . Mer information finns i Åtgärder för Azure-resursprovider.

I följande exempel visas en anpassad rolldefinition för 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":[

        ]
      }
    ]
  }
}

Mer information om hur du skapar en anpassad roll finns i Anpassade Azure-roller.

Kodexempel

Kodexemplen i det här avsnittet visar hur du autentiserar med Microsoft Entra-ID med hjälp av integrerad autentisering eller med ett huvudnamn för tjänsten. Kodexemplen använder .NET och Python, men begreppen är liknande för andra språk.

Kommentar

En Microsoft Entra-autentiseringstoken upphör att gälla efter en timme. När du använder ett långlivade BatchClient-objekt är det bäst att hämta en token från MSAL på varje begäran för att säkerställa att du alltid har en giltig token.

Om du vill göra detta i .NET skriver du en metod som hämtar token från Microsoft Entra-ID och skickar metoden till ett BatchTokenCredentials-objekt som ombud. Varje begäran till Batch-tjänsten anropar ombudsmetoden för att säkerställa att en giltig token tillhandahålls. Som standard cachelagrar MSAL token, så en ny token hämtas endast från Microsoft Entra när det behövs. Mer information om token i Microsoft Entra-ID finns i Säkerhetstoken.

Kodexempel: Använd Microsoft Entra-integrerad autentisering med Batch .NET

Så här autentiserar du med integrerad autentisering från Batch .NET:

  1. Installera Azure Batch .NET och MSAL NuGet-paketen.

  2. Deklarera följande using instruktioner i koden:

    using Microsoft.Azure.Batch;
    using Microsoft.Azure.Batch.Auth;
    using Microsoft.Identity.Client;
    
  3. Referera till Microsoft Entra-slutpunkten, inklusive klientorganisations-ID:t. Du kan hämta ditt klient-ID från sidan Översikt över Microsoft Entra-ID i Azure-portalen.

    private const string AuthorityUri = "https://login.microsoftonline.com/<tenant-id>";
    
  4. Referera till Batch-tjänstens resursslutpunkt:

    private const string BatchResourceUri = "https://batch.core.windows.net/";
    
  5. Referera till ditt Batch-konto:

    private const string BatchAccountUrl = "https://<myaccount>.<mylocation>.batch.azure.com";
    
  6. Ange programmets (klient)-ID för ditt program. Du kan hämta program-ID:t från programmets översiktssida i Azure-portalen.

    private const string ClientId = "<application-id>";
    
  7. Ange den omdirigerings-URI som du angav när du registrerade programmet.

    private const string RedirectUri = "https://<redirect-uri>";
    
  8. Skriv en motringningsmetod för att hämta autentiseringstoken från Microsoft Entra-ID. I följande exempel anropas MSAL för att autentisera en användare som interagerar med programmet. Metoden MSAL IConfidentialClientApplication.AcquireTokenByAuthorizationCode uppmanar användaren att ange sina autentiseringsuppgifter. Programmet fortsätter när användaren har tillgång till autentiseringsuppgifter.

    Parametern authorizationCode är auktoriseringskoden som hämtas från auktoriseringsservern när användaren har autentiserats. WithRedirectUri anger den omdirigerings-URI som auktoriseringsservern omdirigerar användaren till efter autentiseringen.

    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. Anropa den här metoden med följande kod och ersätt <authorization-code> med auktoriseringskoden som hämtas från auktoriseringsservern. Omfånget .default säkerställer att användaren har behörighet att komma åt alla omfång för resursen.

    
    var token = await GetTokenUsingAuthorizationCode("<authorization-code>", "RedirectUri", new string[] { "BatchResourceUri/.default" });
    
  10. Skapa ett BatchTokenCredentials-objekt som tar ombudet som en parameter. Använd dessa autentiseringsuppgifter för att öppna ett BatchClient-objekt . Använd sedan BatchClient-objektet för efterföljande åtgärder mot Batch-tjänsten:

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

Kodexempel: Använd ett Microsoft Entra-tjänsthuvudnamn med Batch .NET

Så här autentiserar du med ett huvudnamn för tjänsten från Batch .NET:

  1. Installera Azure Batch .NET och MSAL NuGet-paketen.

  2. Deklarera följande using instruktioner i koden:

    using Microsoft.Azure.Batch;
    using Microsoft.Azure.Batch.Auth;
    using Microsoft.Identity.Client;
    
  3. Referera till Microsoft Entra-slutpunkten, inklusive klientorganisations-ID:t. När du använder tjänstens huvudnamn måste du ange en klientspecifik slutpunkt. Du kan hämta ditt klient-ID från sidan Översikt över Microsoft Entra-ID i Azure-portalen.

    private const string AuthorityUri = "https://login.microsoftonline.com/<tenant-id>";
    
  4. Referera till Batch-tjänstens resursslutpunkt:

    private const string BatchResourceUri = "https://batch.core.windows.net/";
    
  5. Referera till ditt Batch-konto:

    private const string BatchAccountUrl = "https://<myaccount>.<mylocation>.batch.azure.com";
    
  6. Ange programmets (klient)-ID för ditt program. Du kan hämta program-ID:t från programmets översiktssida i Azure-portalen.

    private const string ClientId = "<application-id>";
    
  7. Ange den hemliga nyckel som du kopierade från Azure-portalen.

    private const string ClientKey = "<secret-key>";
    
  8. Skriv en motringningsmetod för att hämta autentiseringstoken från Microsoft Entra-ID. Följande ConfidentialClientApplicationBuilder.Create-metod anropar MSAL för obevakad autentisering.

    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. Anropa den här metoden med hjälp av följande kod. Omfånget .default säkerställer att programmet har behörighet att komma åt alla omfång för resursen.

       var token = await GetAccessToken(new string[] { $"{BatchResourceUri}/.default" });
    
  10. Skapa ett BatchTokenCredentials-objekt som tar ombudet som en parameter. Använd dessa autentiseringsuppgifter för att öppna ett BatchClient-objekt . Använd sedan BatchClient-objektet för efterföljande åtgärder mot Batch-tjänsten:

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

Kodexempel: Använd ett Microsoft Entra-tjänsthuvudnamn med Batch Python

Så här autentiserar du med tjänstens huvudnamn från Batch Python:

  1. Installera azure-batch- och azure-common Python-modulerna.

  2. Referera till modulerna:

    from azure.batch import BatchServiceClient
    from azure.common.credentials import ServicePrincipalCredentials
    
  3. Om du vill använda tjänstens huvudnamn anger du en klientspecifik slutpunkt. Du kan hämta ditt klient-ID från sidan Översikt över Microsoft Entra-ID eller egenskaper i Azure-portalen.

    TENANT_ID = "<tenant-id>"
    
  4. Referera till Batch-tjänstens resursslutpunkt:

    RESOURCE = "https://batch.core.windows.net/"
    
  5. Referera till ditt Batch-konto:

    BATCH_ACCOUNT_URL = "https://<myaccount>.<mylocation>.batch.azure.com"
    
  6. Ange programmets (klient)-ID för ditt program. Du kan hämta program-ID:t från programmets översiktssida i Azure-portalen.

    CLIENT_ID = "<application-id>"
    
  7. Ange den hemliga nyckel som du kopierade från Azure-portalen:

    SECRET = "<secret-key>"
    
  8. Skapa ett ServicePrincipalCredentials-objekt :

    credentials = ServicePrincipalCredentials(
        client_id=CLIENT_ID,
        secret=SECRET,
        tenant=TENANT_ID,
        resource=RESOURCE
    )
    
  9. Använd autentiseringsuppgifterna för tjänstens huvudnamn för att öppna ett BatchServiceClient-objekt . Använd sedan BatchServiceClient-objektet för efterföljande åtgärder mot Batch-tjänsten.

        batch_client = BatchServiceClient(
        credentials,
        batch_url=BATCH_ACCOUNT_URL
    )
    

Ett Python-exempel på hur du skapar en Batch-klient som autentiseras med hjälp av en Microsoft Entra-token finns i Distribuera anpassad Azure Batch-avbildning med ett Python-skriptexempel.

Nästa steg