Azure Batch-services verifiëren met Microsoft Entra-id

Azure Batch biedt ondersteuning voor verificatie met Microsoft Entra ID, de directory- en identiteitsbeheerservice van Microsoft met meerdere tenants. Azure gebruikt Microsoft Entra ID om zijn eigen klanten, servicebeheerders en organisatiegebruikers te verifiëren.

In dit artikel worden twee manieren beschreven om Microsoft Entra-verificatie te gebruiken met Azure Batch:

  • Geïntegreerde verificatie verifieert een gebruiker die interactie heeft met een toepassing. De toepassing verzamelt de referenties van een gebruiker en gebruikt deze referenties om toegang tot Batch-resources te autoriseren.

  • Een service-principal verifieert een toepassing zonder toezicht. De service-principal definieert het beleid en de machtigingen voor de toepassing en vertegenwoordigt de toepassing voor toegang tot Batch-resources tijdens runtime.

Zie de Microsoft Entra-documentatie voor meer informatie over Microsoft Entra-id.

Eindpunten verzamelen voor verificatie

Als u Batch-toepassingen wilt verifiëren met Microsoft Entra-id, moet u het Microsoft Entra-eindpunt en het Batch-resource-eindpunt in uw code opnemen.

Microsoft Entra-eindpunt

Het basiseindpunt van Microsoft Entra-instantie is https://login.microsoftonline.com/. Als u wilt verifiëren met Microsoft Entra ID, gebruikt u dit eindpunt met de tenant-id die de Microsoft Entra-tenant identificeert die moet worden gebruikt voor verificatie:

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

U kunt uw tenant-id ophalen op de hoofdpagina van Microsoft Entra ID in Azure Portal. U kunt ook Eigenschappen selecteren in het linkernavigatievenster en de tenant-idbekijken op de pagina Eigenschappen.

Screenshot of the Tenant ID in the Azure portal.

Belangrijk

  • Het tenantspecifieke Microsoft Entra-eindpunt is vereist wanneer u zich verifieert met behulp van een service-principal.

  • Wanneer u verifieert met behulp van geïntegreerde verificatie, wordt het tenantspecifieke eindpunt aanbevolen, maar optioneel. U kunt ook het algemene Microsoft Entra-eindpunt gebruiken om een algemene interface voor het verzamelen van referenties te bieden wanneer er geen specifieke tenant is opgegeven. Het algemene eindpunt is https://login.microsoftonline.com/common.

Zie Verificatie versus autorisatie voor meer informatie over Microsoft Entra-eindpunten.

Batch-resource-eindpunt

Gebruik het Batch-resource-eindpunt https://batch.core.windows.net/ om een token te verkrijgen voor het verifiëren van aanvragen bij de Batch-service.

Uw toepassing registreren bij een tenant

De eerste stap bij het gebruik van Microsoft Entra-verificatie is het registreren van uw toepassing in een Microsoft Entra-tenant. Zodra u uw toepassing hebt geregistreerd, kunt u de Microsoft Authentication Library (MSAL) aanroepen vanuit uw code. MsAL biedt een API voor verificatie met Microsoft Entra-id vanuit uw toepassing. Het registreren van uw toepassing is vereist, ongeacht of u geïntegreerde verificatie of een service-principal gebruikt.

Wanneer u uw toepassing registreert, geeft u informatie over uw toepassing op bij Microsoft Entra ID. Microsoft Entra-id biedt vervolgens een toepassings-id, ook wel een client-id genoemd, die u gebruikt om uw toepassing tijdens runtime te koppelen aan Microsoft Entra-id. Zie Toepassings- en service-principalobjecten in Microsoft Entra-id voor meer informatie over de toepassings-id.

Volg de stappen bij Een toepassing registreren om uw Batch-toepassing te registreren.

Nadat u uw toepassing hebt geregistreerd, ziet u de toepassings-id (client) op de overzichtspagina van de toepassing.

Screenshot of the Application ID shown in the Azure portal.

Geïntegreerde verificatie configureren

Als u wilt verifiëren met geïntegreerde verificatie, moet u uw toepassing toestemming geven om verbinding te maken met de Batch-service-API. Met deze stap kan uw toepassing Microsoft Entra ID gebruiken voor het verifiëren van aanroepen naar de Batch-service-API.

Nadat u uw toepassing hebt geregistreerd, volgt u deze stappen om de toepassing toegang te verlenen tot de Batch-service:

  1. Zoek en selecteer app-registraties in Azure Portal.
  2. Selecteer uw toepassing op de pagina App-registraties.
  3. Selecteer API-machtigingen in de linkernavigatiebalk op de pagina van uw toepassing.
  4. Selecteer Een machtiging toevoegen op de pagina API-machtigingen.
  5. Selecteer Azure Batch op de pagina Api-machtigingen aanvragen.
  6. Schakel op de pagina Azure Batch onder Machtigingen selecteren het selectievakje naast user_impersonation in en selecteer vervolgens Machtigingen toevoegen.

Op de pagina API-machtigingen ziet u nu dat uw Microsoft Entra-toepassing toegang heeft tot Zowel Microsoft Graph als Azure Batch. Machtigingen worden automatisch aan Microsoft Graph verleend wanneer u een app registreert bij Microsoft Entra-id.

Een service-principal configureren

Als u een toepassing wilt verifiëren die zonder toezicht wordt uitgevoerd, gebruikt u een service-principal. Wanneer uw toepassing wordt geverifieerd met behulp van een service-principal, worden zowel de toepassings-id als een geheime sleutel naar Microsoft Entra-id verzonden.

Nadat u uw toepassing hebt geregistreerd, volgt u deze stappen in Azure Portal om een service-principal te configureren:

  1. Vraag een geheim aan voor uw toepassing.
  2. Wijs op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC) toe aan uw toepassing.

Een geheim aanvragen voor uw toepassing

Volg deze stappen om de geheime sleutel te maken en te kopiëren die u in uw code wilt gebruiken:

  1. Zoek en selecteer app-registraties in Azure Portal.
  2. Selecteer uw toepassing op de pagina App-registraties.
  3. Selecteer certificaten en geheimen in de linkernavigatiebalk op de pagina van uw toepassing.
  4. Selecteer Nieuw clientgeheim op de pagina Certificaten en geheimen.
  5. Voer op de pagina Een clientgeheim toevoegen een beschrijving in en selecteer een verloopperiode voor het geheim.
  6. Selecteer Toevoegen om het geheim te maken en weer te geven op de pagina Certificaten en geheimen .
  7. Kopieer de geheime waarde naar een veilige plaats, omdat u deze niet meer kunt openen nadat u deze pagina hebt verlaten. Als u geen toegang meer hebt tot uw sleutel, kunt u een nieuwe genereren.

Azure RBAC toewijzen aan uw toepassing

Volg deze stappen om een Azure RBAC-rol toe te wijzen aan uw toepassing. Raadpleeg Azure-rollen toewijzen met de Azure Portal voor informatie over het toewijzen van rollen.

  1. Navigeer in Azure Portal naar het Batch-account dat uw toepassing gebruikt.
  2. Selecteer Toegangsbeheer (IAM) in de linkernavigatie.
  3. Selecteer Op de pagina Toegangsbeheer (IAM) de optie Roltoewijzing toevoegen.
  4. Selecteer op de pagina Roltoewijzing toevoegen het tabblad Rol en selecteer vervolgens de rol Inzender of Lezer voor uw app.
  5. Selecteer het tabblad Leden en selecteer Leden selecteren onder Leden.
  6. Zoek in het scherm Leden selecteren uw toepassing en selecteer deze en selecteer vervolgens Selecteren.
  7. Selecteer Beoordelen en toewijzen op de pagina Roltoewijzing toevoegen.

Uw toepassing moet nu worden weergegeven op het tabblad Roltoewijzingen van de pagina Toegangsbeheer (IAM) van het Batch-account.

Een aangepaste rol toewijzen

Een aangepaste rol verleent gedetailleerde machtigingen aan een gebruiker voor het verzenden van taken, taken en meer. U kunt aangepaste rollen gebruiken om te voorkomen dat gebruikers bewerkingen uitvoeren die van invloed zijn op de kosten, zoals het maken van pools of het wijzigen van knooppunten.

U kunt een aangepaste rol gebruiken om machtigingen te verlenen of te weigeren voor een Microsoft Entra-gebruiker, -groep of -service-principal voor de volgende Azure Batch RBAC-bewerkingen:

  • 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, voor elke leesbewerking
  • Microsoft.Batch/batchAccounts/listKeys/action, voor elke bewerking

Aangepaste rollen zijn voor gebruikers die zijn geverifieerd door Microsoft Entra-id, niet voor de referenties van het gedeelde Sleutelaccount van Batch. De Referenties van het Batch-account geven volledige machtigingen voor het Batch-account. Voor taken die gebruikmaken van autopool zijn machtigingen op poolniveau vereist.

Notitie

Bepaalde roltoewijzingen moeten worden opgegeven in het actions veld, terwijl andere in het dataActions veld moeten worden opgegeven. Zie Bewerkingen van de Azure-resourceprovider voor meer informatie.

In het volgende voorbeeld ziet u een aangepaste azure Batch-roldefinitie:

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

        ]
      }
    ]
  }
}

Zie Aangepaste Azure-rollen voor meer informatie over het maken van een aangepaste rol.

Codevoorbeelden

De codevoorbeelden in deze sectie laten zien hoe u kunt verifiëren met Microsoft Entra ID met behulp van geïntegreerde verificatie of met een service-principal. In de codevoorbeelden worden .NET en Python gebruikt, maar de concepten zijn vergelijkbaar voor andere talen.

Notitie

Een Microsoft Entra-verificatietoken verloopt na één uur. Wanneer u een langlevend BatchClient-object gebruikt, kunt u het beste een token ophalen van MSAL op elke aanvraag om ervoor te zorgen dat u altijd een geldig token hebt.

Hiervoor schrijft u in .NET een methode waarmee het token wordt opgehaald uit De Microsoft Entra-id en geeft u die methode door aan een BatchTokenCredentials-object als gemachtigde. Elke aanvraag bij de Batch-service roept de gedelegeerde methode aan om ervoor te zorgen dat er een geldig token wordt opgegeven. Standaard worden tokens in de cache van MSAL opgeslagen, zodat een nieuw token alleen wordt opgehaald uit Microsoft Entra wanneer dat nodig is. Zie Beveiligingstokens voor meer informatie over tokens in Microsoft Entra ID.

Codevoorbeeld: Geïntegreerde Microsoft Entra-verificatie gebruiken met Batch .NET

Verificatie met geïntegreerde verificatie vanuit Batch .NET:

  1. Installeer azure Batch .NET en de MSAL NuGet-pakketten.

  2. Declareer de volgende using instructies in uw code:

    using Microsoft.Azure.Batch;
    using Microsoft.Azure.Batch.Auth;
    using Microsoft.Identity.Client;
    
  3. Verwijs naar het Microsoft Entra-eindpunt, inclusief de tenant-id. U kunt uw tenant-id ophalen via de overzichtspagina van Microsoft Entra-id in Azure Portal.

    private const string AuthorityUri = "https://login.microsoftonline.com/<tenant-id>";
    
  4. Raadpleeg het Resource-eindpunt van de Batch-service:

    private const string BatchResourceUri = "https://batch.core.windows.net/";
    
  5. Raadpleeg uw Batch-account:

    private const string BatchAccountUrl = "https://<myaccount>.<mylocation>.batch.azure.com";
    
  6. Geef de toepassings-id (client) op voor uw toepassing. U kunt de toepassings-id ophalen op de overzichtspagina van uw toepassing in Azure Portal.

    private const string ClientId = "<application-id>";
    
  7. Geef de omleidings-URI op die u hebt opgegeven toen u de toepassing registreerde.

    private const string RedirectUri = "https://<redirect-uri>";
    
  8. Schrijf een callback-methode om het verificatietoken van Microsoft Entra ID te verkrijgen. In het volgende voorbeeld wordt MSAL aanroepen om een gebruiker te verifiëren die interactie heeft met de toepassing. De methode MSAL IConfidentialClientApplication.AcquireTokenByAuthorizationCode vraagt de gebruiker om zijn referenties. De toepassing wordt uitgevoerd zodra de gebruiker referenties heeft opgegeven.

    De parameter authorizationCode is de autorisatiecode die is verkregen van de autorisatieserver nadat de gebruiker is geverifieerd. WithRedirectUri geeft de omleidings-URI op waarnaar de autorisatieserver de gebruiker na verificatie omleidt.

    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. Roep deze methode aan met de volgende code, waarbij u vervangt <authorization-code> door de autorisatiecode die is verkregen van de autorisatieserver. Het .default bereik zorgt ervoor dat de gebruiker gemachtigd is om toegang te krijgen tot alle bereiken voor de resource.

    
    var token = await GetTokenUsingAuthorizationCode("<authorization-code>", "RedirectUri", new string[] { "BatchResourceUri/.default" });
    
  10. Maak een BatchTokenCredentials-object dat de gedelegeerde als parameter neemt. Gebruik deze referenties om een BatchClient-object te openen. Gebruik vervolgens het BatchClient-object voor volgende bewerkingen op basis van de Batch-service:

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

Codevoorbeeld: Een Microsoft Entra-service-principal gebruiken met Batch .NET

Verifiëren met een service-principal vanuit Batch .NET:

  1. Installeer azure Batch .NET en de MSAL NuGet-pakketten.

  2. Declareer de volgende using instructies in uw code:

    using Microsoft.Azure.Batch;
    using Microsoft.Azure.Batch.Auth;
    using Microsoft.Identity.Client;
    
  3. Verwijs naar het Microsoft Entra-eindpunt, inclusief de tenant-id. Wanneer u een service-principal gebruikt, moet u een tenantspecifiek eindpunt opgeven. U kunt uw tenant-id ophalen via de overzichtspagina van Microsoft Entra-id in Azure Portal.

    private const string AuthorityUri = "https://login.microsoftonline.com/<tenant-id>";
    
  4. Raadpleeg het Resource-eindpunt van de Batch-service:

    private const string BatchResourceUri = "https://batch.core.windows.net/";
    
  5. Raadpleeg uw Batch-account:

    private const string BatchAccountUrl = "https://<myaccount>.<mylocation>.batch.azure.com";
    
  6. Geef de toepassings-id (client) op voor uw toepassing. U kunt de toepassings-id ophalen op de overzichtspagina van uw toepassing in Azure Portal.

    private const string ClientId = "<application-id>";
    
  7. Geef de geheime sleutel op die u hebt gekopieerd uit Azure Portal.

    private const string ClientKey = "<secret-key>";
    
  8. Schrijf een callback-methode om het verificatietoken van Microsoft Entra ID te verkrijgen. De volgende ConfidentialClientApplicationBuilder.Create-methode roept MSAL aan voor verificatie zonder toezicht.

    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. Roep deze methode aan met behulp van de volgende code. Het .default bereik zorgt ervoor dat de toepassing gemachtigd is voor toegang tot alle bereiken voor de resource.

       var token = await GetAccessToken(new string[] { "BatchResourceId/.default" });
    
  10. Maak een BatchTokenCredentials-object dat de gedelegeerde als parameter neemt. Gebruik deze referenties om een BatchClient-object te openen. Gebruik vervolgens het BatchClient-object voor volgende bewerkingen op basis van de Batch-service:

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

Codevoorbeeld: Een Microsoft Entra-service-principal gebruiken met Batch Python

Verifiëren met een service-principal vanuit Batch Python:

  1. Installeer de azure-batch - en Azure-common Python-modules.

  2. Naar de modules verwijzen:

    from azure.batch import BatchServiceClient
    from azure.common.credentials import ServicePrincipalCredentials
    
  3. Als u een service-principal wilt gebruiken, geeft u een tenantspecifiek eindpunt op. U kunt uw tenant-id ophalen op de pagina Overzicht van Microsoft Entra-id of de pagina Eigenschappen in Azure Portal.

    TENANT_ID = "<tenant-id>"
    
  4. Raadpleeg het Resource-eindpunt van de Batch-service:

    RESOURCE = "https://batch.core.windows.net/"
    
  5. Raadpleeg uw Batch-account:

    BATCH_ACCOUNT_URL = "https://<myaccount>.<mylocation>.batch.azure.com"
    
  6. Geef de toepassings-id (client) op voor uw toepassing. U kunt de toepassings-id ophalen op de overzichtspagina van uw toepassing in Azure Portal.

    CLIENT_ID = "<application-id>"
    
  7. Geef de geheime sleutel op die u hebt gekopieerd uit Azure Portal:

    SECRET = "<secret-key>"
    
  8. Een ServicePrincipalCredentials-object maken:

    credentials = ServicePrincipalCredentials(
        client_id=CLIENT_ID,
        secret=SECRET,
        tenant=TENANT_ID,
        resource=RESOURCE
    )
    
  9. Gebruik de referenties van de service-principal om een BatchServiceClient-object te openen. Gebruik vervolgens het BatchServiceClient-object voor volgende bewerkingen op basis van de Batch-service.

        batch_client = BatchServiceClient(
        credentials,
        batch_url=BATCH_ACCOUNT_URL
    )
    

Voor een Python-voorbeeld van het maken van een Batch-client die is geverifieerd met behulp van een Microsoft Entra-token, raadpleegt u de aangepaste installatiekopieën van Azure Batch implementeren met een Python-voorbeeldscript.

Volgende stappen