Authentifier les services Azure Batch avec l’ID Microsoft Entra

Azure Batch prend en charge l’authentification avec Microsoft Entra ID, le service de gestion des identités et des annuaires multilocataires de Microsoft. Azure utilise l’ID Microsoft Entra pour authentifier ses propres clients, administrateurs de service et utilisateurs organisationnels.

Cet article décrit deux façons d’utiliser l’authentification Microsoft Entra avec Azure Batch :

  • L’authentification intégrée authentifie un utilisateur qui interagit avec une application. L’application collecte les informations d’identification d’un utilisateur et les utilise pour autoriser l’accès aux ressources Batch.

  • Un principal de service authentifie une application sans assistance. Le principal de service définit la stratégie et les autorisations pour l’application, et représente l’application pour accéder aux ressources Batch au moment de l’exécution.

Pour plus d’informations sur l’ID Microsoft Entra, consultez la documentation Microsoft Entra.

Collecter des points de terminaison pour l’authentification

Pour authentifier les applications Batch avec l’ID Microsoft Entra, vous devez inclure le point de terminaison Microsoft Entra et le point de terminaison de ressource Batch dans votre code.

Point de terminaison Microsoft Entra

Le point de terminaison d’autorité Microsoft Entra de base est https://login.microsoftonline.com/. Pour vous authentifier avec l’ID Microsoft Entra, utilisez ce point de terminaison avec l’ID de locataire qui identifie le locataire Microsoft Entra à utiliser pour l’authentification :

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

Vous pouvez obtenir votre ID de locataire à partir de la page principale microsoft Entra ID dans le portail Azure. Vous pouvez également sélectionner Propriétés dans le volet de navigation gauche et voir l’ID de locataire dans la page Propriétés.

Screenshot of the Tenant ID in the Azure portal.

Important

  • Le point de terminaison Microsoft Entra spécifique au locataire est requis lorsque vous vous authentifiez à l’aide d’un principal de service.

  • Quand vous vous authentifiez avec l’authentification intégrée, le point de terminaison propre au locataire est recommandé, mais facultatif. Vous pouvez également utiliser le point de terminaison commun Microsoft Entra pour fournir une interface de collecte d’informations d’identification générique lorsqu’un locataire spécifique n’est pas fourni. Le point de terminaison commun est https://login.microsoftonline.com/common.

Pour plus d’informations sur les points de terminaison Microsoft Entra, consultez Authentification etd’autorisation .

Point de terminaison de ressource Batch

Utilisez le point de terminaison de ressource Batch https://batch.core.windows.net/ pour obtenir un jeton d’authentification des demandes sur le service Batch.

Inscrire votre application avec un client

La première étape de l’utilisation de l’authentification Microsoft Entra consiste à inscrire votre application dans un locataire Microsoft Entra. Dès que vous inscrivez votre application, vous pouvez appeler la Bibliothèque d’authentification Microsoft (MSAL) à partir de votre code. MSAL fournit une API pour l’authentification auprès de Microsoft Entra ID à partir de votre application. L’inscription de votre application est nécessaire si vous utilisez l’authentification intégrée ou un principal de service.

Lorsque vous inscrivez votre application, vous fournissez des informations sur votre application à Microsoft Entra ID. Microsoft Entra ID fournit ensuite un ID d’application , également appelé ID client, que vous utilisez pour associer votre application à l’ID Microsoft Entra au moment de l’exécution. Pour plus d’informations sur l’ID d’application, consultez objets application et principal de service dans Microsoft Entra ID.

Pour inscrire votre application Batch, suivez les étapes décrites dans Inscrire une application.

Après avoir inscrit votre application, vous pouvez voir l’ID d’application (client) dans la page Vue d’ensemble de l’application.

Screenshot of the Application ID shown in the Azure portal.

Configurer l’authentification intégrée

Pour vous authentifier avec l’authentification intégrée, vous devez autoriser votre application à se connecter à l’API du service Batch. Cette étape permet à votre application d’utiliser l’ID Microsoft Entra pour authentifier les appels à l’API de service Batch.

Après avoir inscrit votre application, suivez ces étapes pour accorder à l’application l’accès au service Batch :

  1. Dans le portail Azure, recherchez et sélectionnez inscriptions d’applications.
  2. Dans la page Inscriptions d’applications, sélectionnez votre application.
  3. Dans la page de votre application, sélectionnez Autorisations d’API dans le volet de navigation gauche.
  4. Dans la page API autorisées, sélectionnez Ajouter une autorisation.
  5. Dans la page Demander des autorisations d’API, sélectionnez Azure Batch.
  6. Dans la page Azure Batch, sous Sélectionner des autorisations, cochez la case à côté de user_impersonation, puis sélectionnez Ajouter des autorisations.

La page autorisations de l’API indique maintenant que votre application Microsoft Entra a accès à microsoft Graph et Azure Batch. Les autorisations sont accordées automatiquement à Microsoft Graph lorsque vous inscrivez une application avec l’ID Microsoft Entra.

Configurer un principal du service

Pour authentifier une application qui s’exécute sans assistance, vous utilisez un principal de service. Lorsque votre application s’authentifie à l’aide d’un principal de service, elle envoie à la fois l’ID d’application et une clé secrète à l’ID Microsoft Entra.

Après avoir inscrit votre application, suivez ces étapes dans le portail Azure pour configurer un principal de service :

  1. Demandez un secret pour votre application.
  2. Attribuer un contrôle d’accès en fonction du rôle Azure (Azure RBAC) à votre application

Demander un secret pour votre application

Suivez ces étapes pour créer et copier la clé secrète à utiliser dans votre code :

  1. Dans le portail Azure, recherchez et sélectionnez inscriptions d’applications.
  2. Dans la page Inscriptions d’applications, sélectionnez votre application.
  3. Dans la page de votre application, sélectionnez Certificats et secrets dans le volet de navigation gauche.
  4. Dans la page Certificats et secrets , sélectionnez Nouveau secret client.
  5. Dans la page Ajouter un secret client, entrez une description et sélectionnez une période d’expiration pour le secret.
  6. Sélectionnez Ajouter pour créer le secret et l’afficher dans la page Certificats &secrets .
  7. Copiez la valeur du secret en lieu sûr, car vous n’y avez plus accès quand vous quittez cette page. Si vous perdez l’accès à votre clé, vous pouvez en générer une nouvelle.

Attribuer un contrôle Azure RBAC à votre application

Suivez ces étapes pour attribuer un rôle RBAC Azure à votre application. Pour connaître la procédure détaillée, consultez Attribuer des rôles Azure à l’aide du portail Azure.

  1. Dans le portail Azure, accédez au compte Batch utilisé par votre application.
  2. Dans le menu de navigation de gauche, sélectionnez Contrôle d’accès (IAM) .
  3. Sur la page Contrôle d’accès (IAM), sélectionnez Ajout de l’attribution de rôle.
  4. Dans la page Ajouter une attribution de rôle, sélectionnez l’onglet Rôle, puis sélectionnez le rôle Contributeur ou Lecteur pour votre application.
  5. Sélectionnez l’onglet Membres, puis Sélectionner des membres sous Membres.
  6. Dans l’écran Sélectionner des membres, recherchez et sélectionnez votre application, puis sélectionnez Sélectionner.
  7. Sélectionnez Vérifier + attribuer dans la page Ajouter une attribution de rôle.

Votre application doit maintenant s’afficher sous l’onglet Attributions de rôle de la page Contrôle d’accès (IAM) du compte Batch.

Attribuer un rôle personnalisé

Un rôle personnalisé accorde une autorisation précise à un utilisateur pour l’envoi de travaux, de tâches, etc. Vous pouvez utiliser des rôles personnalisés pour empêcher les utilisateurs d’effectuer des opérations qui affectent le coût, comme la création de pools ou la modification de nœuds.

Vous pouvez utiliser un rôle personnalisé pour accorder ou refuser des autorisations à un utilisateur, un groupe ou un principal de service Microsoft Entra pour les opérations RBAC Azure Batch suivantes :

  • 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, pour toutes les opérations de lecture
  • Microsoft.Batch/batchAccounts/listKeys/action, pour toutes les opérations

Les rôles personnalisés sont pour les utilisateurs authentifiés par l’ID Microsoft Entra, et non pour les informations d’identification du compte de clé partagée Batch. Les informations d’identification du compte Batch donnent des autorisations complètes sur le compte Batch. Les travaux qui utilisent le pool automatique nécessitent des autorisations au niveau du pool.

Notes

Certaines attributions de rôle doivent être spécifiées dans le champ actions, tandis que d’autres doivent être spécifiées dans le champ dataActions. Pour plus d’informations, consultez Opérations du fournisseur de ressources Azure.

L’exemple suivant montre une définition de rôle personnalisée 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":[

        ]
      }
    ]
  }
}

Pour des informations concernant la création d’un rôle personnalisé, consultez Rôles personnalisés Azure.

Exemples de code

Les exemples de code de cette section montrent comment s’authentifier auprès de Microsoft Entra ID à l’aide de l’authentification intégrée ou d’un principal de service. Les exemples de code utilisent .NET et Python, mais les concepts sont similaires pour d’autres langages.

Remarque

Un jeton d’authentification Microsoft Entra expire après une heure. Quand vous utilisez un objet BatchClient de longue durée, il est préférable d’obtenir un jeton de MSAL pour chaque demande afin d’avoir toujours un jeton valide.

Pour ce faire dans .NET, écrivez une méthode qui récupère le jeton à partir de Microsoft Entra ID et transmettez cette méthode à un BatchTokenCredentials objet en tant que délégué. Chaque demande au service Batch appelle la méthode déléguée pour garantir qu’un jeton valide est fourni. Par défaut, MSAL met en cache les jetons. Par conséquent, un nouveau jeton est récupéré à partir de Microsoft Entra-only si nécessaire. Pour plus d’informations sur les jetons dans Microsoft Entra ID, consultez jetons de sécurité.

Exemple de code : Utiliser l’authentification intégrée Microsoft Entra avec Batch .NET

Pour vous authentifier avec l’authentification intégrée à partir de Batch .NET :

  1. Installez les packages NuGet Azure Batch .NET et MSAL.

  2. Déclarez les instructions using suivantes dans votre code :

    using Microsoft.Azure.Batch;
    using Microsoft.Azure.Batch.Auth;
    using Microsoft.Identity.Client;
    
  3. Référencez le point de terminaison Microsoft Entra, y compris l’ID de locataire. Vous pouvez obtenir votre ID de locataire à partir de l’ID Microsoft Entra Vue d’ensemble page dans le portail Azure.

    private const string AuthorityUri = "https://login.microsoftonline.com/<tenant-id>";
    
  4. Référencez le point de terminaison de ressource de service Batch :

    private const string BatchResourceUri = "https://batch.core.windows.net/";
    
  5. Référencez votre compte Batch :

    private const string BatchAccountUrl = "https://<myaccount>.<mylocation>.batch.azure.com";
    
  6. Spécifiez l’ID d’application (client) de votre application. Vous pouvez obtenir l’ID d’application à partir de la page Vue d’ensemble de votre application dans le portail Azure.

    private const string ClientId = "<application-id>";
    
  7. Spécifiez l’URI de redirection que vous avez fourni quand vous avez inscrit l’application.

    private const string RedirectUri = "https://<redirect-uri>";
    
  8. Écrivez une méthode de rappel pour acquérir le jeton d’authentification à partir de l’ID Microsoft Entra. L’exemple suivant appelle MSAL pour authentifier un utilisateur qui interagit avec l’application. La méthode MSAL IConfidentialClientApplication.AcquireTokenByAuthorizationCode invite l’utilisateur à fournir ses informations d’identification. L’application continue une fois que l’utilisateur a fourni des informations d’identification.

    Le paramètre authorizationCode est le code d’autorisation obtenu auprès du serveur d’autorisation après l’authentification de l’utilisateur. WithRedirectUri spécifie l’URI de redirection vers lequel le serveur d’autorisation redirige l’utilisateur après l’authentification.

    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. Appelez cette méthode avec le code suivant, en remplaçant <authorization-code> par le code d’autorisation obtenu auprès du serveur d’autorisation. L’étendue .default garantit que l’utilisateur est autorisé à accéder à toutes les étendues de la ressource.

    
    var token = await GetTokenUsingAuthorizationCode("<authorization-code>", "RedirectUri", new string[] { "BatchResourceUri/.default" });
    
  10. Créez un objet BatchTokenCredentials qui prend le délégué comme paramètre. Utilisez ces informations d’identification pour ouvrir un objet BatchClient. Utilisez ensuite l’objet BatchClient pour les opérations suivantes sur le service Batch :

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

Exemple de code : Utiliser un principal de service Microsoft Entra avec Batch .NET

Pour s’authentifier avec un principal de service à partir de Batch .NET :

  1. Installez les packages NuGet Azure Batch .NET et MSAL.

  2. Déclarez les instructions using suivantes dans votre code :

    using Microsoft.Azure.Batch;
    using Microsoft.Azure.Batch.Auth;
    using Microsoft.Identity.Client;
    
  3. Référencez le point de terminaison Microsoft Entra, y compris l’ID de locataire. Quand vous utilisez un principal de service, vous devez fournir un point de terminaison propre au locataire. Vous pouvez obtenir votre ID de locataire à partir de l’ID Microsoft Entra Vue d’ensemble page dans le portail Azure.

    private const string AuthorityUri = "https://login.microsoftonline.com/<tenant-id>";
    
  4. Référencez le point de terminaison de ressource de service Batch :

    private const string BatchResourceUri = "https://batch.core.windows.net/";
    
  5. Référencez votre compte Batch :

    private const string BatchAccountUrl = "https://<myaccount>.<mylocation>.batch.azure.com";
    
  6. Spécifiez l’ID d’application (client) de votre application. Vous pouvez obtenir l’ID d’application à partir de la page Vue d’ensemble de votre application dans le portail Azure.

    private const string ClientId = "<application-id>";
    
  7. Spécifiez la clé secrète que vous avez copiée à partir du portail Azure.

    private const string ClientKey = "<secret-key>";
    
  8. Écrivez une méthode de rappel pour acquérir le jeton d’authentification à partir de l’ID Microsoft Entra. La méthode ConfidentialClientApplicationBuilder.Create suivante appelle MSAL pour l’authentification sans assistance.

    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. Appelez cette méthode avec le code suivant. L’étendue .default garantit que l’application est autorisée à accéder à toutes les étendues de la ressource.

       var token = await GetAccessToken(new string[] { "BatchResourceId/.default" });
    
  10. Créez un objet BatchTokenCredentials qui prend le délégué comme paramètre. Utilisez ces informations d’identification pour ouvrir un objet BatchClient. Utilisez ensuite l’objet BatchClient pour les opérations suivantes sur le service Batch :

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

Exemple de code : Utiliser un principal de service Microsoft Entra avec Batch Python

Pour s’authentifier avec un principal de service à partir de Batch Python :

  1. Installez les modules Python azure-batch et azure-common.

  2. Référencez les modules :

    from azure.batch import BatchServiceClient
    from azure.common.credentials import ServicePrincipalCredentials
    
  3. Pour utiliser un principal de service, fournissez un point de terminaison propre au locataire. Vous pouvez obtenir votre ID de locataire à partir de la page Vue d’ensemble de l’ID Microsoft Entra Vue d’ensemble ou page Propriétés dans le portail Azure.

    TENANT_ID = "<tenant-id>"
    
  4. Référencez le point de terminaison de ressource de service Batch :

    RESOURCE = "https://batch.core.windows.net/"
    
  5. Référencez votre compte Batch :

    BATCH_ACCOUNT_URL = "https://<myaccount>.<mylocation>.batch.azure.com"
    
  6. Spécifiez l’ID d’application (client) de votre application. Vous pouvez obtenir l’ID d’application à partir de la page Vue d’ensemble de votre application dans le portail Azure.

    CLIENT_ID = "<application-id>"
    
  7. Spécifiez la clé secrète que vous avez copiée à partir du portail Azure :

    SECRET = "<secret-key>"
    
  8. Créez un objet ServicePrincipalCredentials :

    credentials = ServicePrincipalCredentials(
        client_id=CLIENT_ID,
        secret=SECRET,
        tenant=TENANT_ID,
        resource=RESOURCE
    )
    
  9. Utilisez les informations d’identification du principal de service pour ouvrir un objet BatchServiceClient. Utilisez ensuite l’objet BatchServiceClient pour les opérations suivantes sur le service Batch.

        batch_client = BatchServiceClient(
        credentials,
        batch_url=BATCH_ACCOUNT_URL
    )
    

Pour obtenir un exemple Python de création d’un client Batch authentifié à l’aide d’un jeton Microsoft Entra, consultez la Déploiement d’une image personnalisée Azure Batch avec un exemple de script Python.

Étapes suivantes