Autenticare i servizi di Azure Batch con Microsoft Entra ID

Azure Batch supporta l'autenticazione con Microsoft Entra ID, il servizio di gestione delle identità e della directory basato sul cloud multi-tenant di Microsoft. Azure usa Microsoft Entra ID per autenticare i propri clienti, amministratori dei servizi e utenti dell'organizzazione.

Questo articolo descrive due modi per usare l'autenticazione di Microsoft Entra con Azure Batch:

  • L'autenticazione integrata autentica un utente che interagisce con un'applicazione. L'applicazione raccoglie le credenziali di un utente e usa tali credenziali per autorizzare l'accesso alle risorse batch.

  • Un'entità servizio autentica un'applicazione automatica. L'entità servizio definisce i criteri e le autorizzazioni per l'applicazione e rappresenta l'applicazione per accedere alle risorse batch in fase di esecuzione.

Per altre informazioni sull'ID Microsoft Entra, vedere la documentazione di Microsoft Entra.

Raccogliere gli endpoint per l'autenticazione

Per autenticare le applicazioni Batch con Microsoft Entra ID, è necessario includere l'endpoint Microsoft Entra e l'endpoint della risorsa Batch nel codice.

Endpoint Microsoft Entra

L'endpoint dell'autorità Microsoft Entra di base è https://login.microsoftonline.com/. Per eseguire l'autenticazione con Microsoft Entra ID, usare questo endpoint con l'ID tenant che identifica il tenant di Microsoft Entra da usare per l'autenticazione:

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

È possibile ottenere l'ID tenant dalla pagina principale di Microsoft Entra ID nel portale di Azure. È anche possibile selezionare Proprietà nel riquadro di spostamento sinistro e visualizzare l'ID tenant nella pagina Proprietà.

Screenshot of the Tenant ID in the Azure portal.

Importante

  • L'endpoint Microsoft Entra specifico del tenant è necessario quando si esegue l'autenticazione tramite un'entità servizio.

  • Quando si esegue l'autenticazione usando l'autenticazione integrata, è consigliabile usare l'endpoint specifico del tenant, ma facoltativo. È anche possibile usare l'endpoint comune di Microsoft Entra per fornire un'interfaccia generica di raccolta delle credenziali quando non viene fornito un tenant specifico. L'endpoint comune è https://login.microsoftonline.com/common.

Per altre informazioni sugli endpoint di Microsoft Entra, vedere Autenticazione e autorizzazione.

Endpoint di risorse Batch

Usare l'endpoint https://batch.core.windows.net/ della risorsa Batch per acquisire un token per l'autenticazione delle richieste al servizio Batch.

Registrare l'applicazione con un tenant

Il primo passaggio nell'uso dell'autenticazione di Microsoft Entra consiste nel registrare l'applicazione in un tenant di Microsoft Entra. Dopo aver registrato l'applicazione, è possibile chiamare Microsoft Authentication Library (MSAL) dal codice. MSAL fornisce un'API per l'autenticazione con Microsoft Entra ID dall'applicazione. La registrazione dell'applicazione è necessaria se si usa l'autenticazione integrata o un'entità servizio.

Quando si registra l'applicazione, si forniscono informazioni sull'applicazione all'ID Microsoft Entra. Microsoft Entra ID fornisce quindi un ID applicazione, detto anche ID client, che si usa per associare l'applicazione all'ID Microsoft Entra in fase di esecuzione. Per altre informazioni sull'ID applicazione, vedere Oggetti applicazione e entità servizio in Microsoft Entra ID.

Per registrare l'applicazione Batch, seguire la procedura descritta in Registrare un'applicazione.

Dopo aver registrato l'applicazione, è possibile visualizzare l'ID applicazione (client) nella pagina Panoramica dell'applicazione.

Screenshot of the Application ID shown in the Azure portal.

Configurare l'autenticazione integrata

Per eseguire l'autenticazione con l'autenticazione integrata, è necessario concedere all'applicazione l'autorizzazione per connettersi all'API del servizio Batch. Questo passaggio consente all'applicazione di usare Microsoft Entra ID per autenticare le chiamate all'API del servizio Batch.

Dopo aver registrato l'applicazione, seguire questa procedura per concedere all'applicazione l'accesso al servizio Batch:

  1. Nella portale di Azure cercare e selezionare Registrazioni app.
  2. Nella pagina Registrazioni app selezionare l'applicazione.
  3. Nella pagina dell'applicazione selezionare Autorizzazioni API nel riquadro di spostamento a sinistra.
  4. Nella pagina Autorizzazioni API selezionare Aggiungi un'autorizzazione.
  5. Nella pagina Richiedi autorizzazioni API selezionare Azure Batch.
  6. Nella pagina Azure Batch, in Seleziona autorizzazioni selezionare la casella di controllo accanto a user_impersonation e quindi selezionare Aggiungi autorizzazioni.

La pagina Autorizzazioni API mostra ora che l'applicazione Microsoft Entra ha accesso sia a Microsoft Graph che ad Azure Batch. Le autorizzazioni vengono concesse automaticamente a Microsoft Graph quando si registra un'app con Microsoft Entra ID.

Configurare un'entità servizio

Per autenticare un'applicazione in esecuzione automatica, usare un'entità servizio. Quando l'applicazione esegue l'autenticazione usando un'entità servizio, invia sia l'ID applicazione che una chiave privata a Microsoft Entra ID.

Dopo aver registrato l'applicazione, seguire questa procedura nel portale di Azure per configurare un'entità servizio:

  1. Richiedere un segreto per l'applicazione.
  2. Assegnare il controllo degli accessi in base al ruolo di Azure all'applicazione.

Richiedere un segreto per l'applicazione

Seguire questa procedura per creare e copiare la chiave privata da usare nel codice:

  1. Nella portale di Azure cercare e selezionare Registrazioni app.
  2. Nella pagina Registrazioni app selezionare l'applicazione.
  3. Nella pagina dell'applicazione selezionare Certificati e segreti nel riquadro di spostamento a sinistra.
  4. Nella pagina Certificati e segreti selezionare Nuovo segreto client.
  5. Nella pagina Aggiungi un segreto client immettere una descrizione e selezionare un periodo di scadenza per il segreto.
  6. Selezionare Aggiungi per creare il segreto e visualizzarlo nella pagina Certificati e segreti .
  7. Copiare il valore del segreto in un luogo sicuro, perché non sarà possibile accedervi di nuovo dopo aver lasciato questa pagina. Se si perde l'accesso alla chiave, è possibile generarne uno nuovo.

Assegnare il controllo degli accessi in base al ruolo di Azure all'applicazione

Seguire questa procedura per assegnare un ruolo controllo degli accessi in base al ruolo di Azure all'applicazione. Per i passaggi dettagliati, vedere Assegnare ruoli di Azure usando il portale di Azure.

  1. Nella portale di Azure passare all'account Batch usato dall'applicazione.
  2. Selezionare Controllo di accesso (IAM) nel riquadro di spostamento a sinistra.
  3. Nella pagina Controllo di accesso (IAM) selezionare Aggiungi assegnazione di ruolo.
  4. Nella pagina Aggiungi assegnazione di ruolo selezionare la scheda Ruolo e quindi selezionare il ruolo Collaboratore o Lettore per l'app.
  5. Selezionare la scheda Membri e selezionare Seleziona membri in Membri.
  6. Nella schermata Seleziona membri cercare e selezionare l'applicazione e quindi selezionare Seleziona.
  7. Selezionare Rivedi e assegna nella pagina Aggiungi assegnazione di ruolo.

L'applicazione dovrebbe ora essere visualizzata nella scheda Assegnazioni di ruolo della pagina Controllo di accesso (IAM) dell'account Batch.

Assegnare un ruolo personalizzato

Un ruolo personalizzato concede l'autorizzazione granulare a un utente per l'invio di processi, attività e altro ancora. È possibile usare ruoli personalizzati per impedire agli utenti di eseguire operazioni che influiscono sui costi, ad esempio la creazione di pool o la modifica di nodi.

È possibile usare un ruolo personalizzato per concedere o negare le autorizzazioni a un utente, un gruppo o un'entità servizio Di Microsoft Entra per le operazioni di Controllo degli accessi in base al ruolo di Azure Batch seguenti:

  • 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, per qualsiasi operazione di lettura
  • Microsoft.Batch/batchAccounts/listKeys/action, per qualsiasi operazione

I ruoli personalizzati sono destinati agli utenti autenticati dall'ID Microsoft Entra, non per le credenziali dell'account della chiave condivisa batch. Le credenziali dell'account Batch forniscono l'autorizzazione completa all'account Batch. I processi che usano il pool automatico richiedono autorizzazioni a livello di pool.

Nota

Alcune assegnazioni di ruolo devono essere specificate nel actions campo , mentre altre devono essere specificate nel dataActions campo . Per altre informazioni, vedere Operazioni del provider di risorse di Azure.

L'esempio seguente mostra una definizione di ruolo personalizzato di 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":[

        ]
      }
    ]
  }
}

Per altre informazioni sulla creazione di un ruolo personalizzato, vedere Ruoli personalizzati di Azure.

Esempi di codice

Gli esempi di codice in questa sezione illustrano come eseguire l'autenticazione con Microsoft Entra ID usando l'autenticazione integrata o con un'entità servizio. Gli esempi di codice usano .NET e Python, ma i concetti sono simili per altri linguaggi.

Nota

Un token di autenticazione Di Microsoft Entra scade dopo un'ora. Quando si usa un oggetto BatchClient di lunga durata, è consigliabile ottenere un token da MSAL in ogni richiesta per assicurarsi di avere sempre un token valido.

A tale scopo in .NET, scrivere un metodo che recupera il token dall'ID Microsoft Entra e passare tale metodo a un oggetto BatchTokenCredentials come delegato. Ogni richiesta al servizio Batch chiama il metodo delegato per assicurarsi che venga fornito un token valido. Per impostazione predefinita, MSAL memorizza nella cache i token, quindi un nuovo token viene recuperato solo da Microsoft Entra-only quando necessario. Per altre informazioni sui token in Microsoft Entra ID, vedere Token di sicurezza.

Esempio di codice: Usare l'autenticazione integrata di Microsoft Entra con Batch .NET

Per eseguire l'autenticazione con l'autenticazione integrata da Batch .NET:

  1. Installare Azure Batch .NET e i pacchetti NuGet MSAL.

  2. Dichiarare le istruzioni seguenti using nel codice:

    using Microsoft.Azure.Batch;
    using Microsoft.Azure.Batch.Auth;
    using Microsoft.Identity.Client;
    
  3. Fare riferimento all'endpoint Microsoft Entra, incluso l'ID tenant. È possibile ottenere l'ID tenant dalla pagina Panoramica di Microsoft Entra ID nel portale di Azure.

    private const string AuthorityUri = "https://login.microsoftonline.com/<tenant-id>";
    
  4. Riferimento all'endpoint delle risorse per il servizio Batch:

    private const string BatchResourceUri = "https://batch.core.windows.net/";
    
  5. Riferimento all'account Batch:

    private const string BatchAccountUrl = "https://<myaccount>.<mylocation>.batch.azure.com";
    
  6. Specificare l'ID applicazione (client) per l'applicazione. È possibile ottenere l'ID applicazione dalla pagina Panoramica dell'applicazione nella portale di Azure.

    private const string ClientId = "<application-id>";
    
  7. Specificare l'URI di reindirizzamento specificato al momento della registrazione dell'applicazione.

    private const string RedirectUri = "https://<redirect-uri>";
    
  8. Scrivere un metodo di callback per acquisire il token di autenticazione da Microsoft Entra ID. L'esempio seguente chiama MSAL per autenticare un utente che interagisce con l'applicazione. Il metodo MSAL IConfidentialClientApplication.AcquireTokenByAuthorizationCode richiede all'utente le proprie credenziali. L'applicazione procede dopo che l'utente fornisce le credenziali.

    Il parametro authorizationCode è il codice di autorizzazione ottenuto dal server di autorizzazione dopo l'autenticazione dell'utente. WithRedirectUri specifica l'URI di reindirizzamento a cui il server di autorizzazione reindirizza l'utente dopo l'autenticazione.

    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. Chiamare questo metodo con il codice seguente, sostituendo <authorization-code> con il codice di autorizzazione ottenuto dal server di autorizzazione. L'ambito .default garantisce che l'utente disponga dell'autorizzazione per accedere a tutti gli ambiti per la risorsa.

    
    var token = await GetTokenUsingAuthorizationCode("<authorization-code>", "RedirectUri", new string[] { "BatchResourceUri/.default" });
    
  10. Costruire un oggetto BatchTokenCredentials che accetta il delegato come parametro. Usare tali credenziali per aprire un oggetto BatchClient. Usare quindi l'oggetto BatchClient per le operazioni successive sul servizio Batch:

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

Esempio di codice: usare un'entità servizio Microsoft Entra con Batch .NET

Per eseguire l'autenticazione con un'entità servizio da Batch .NET:

  1. Installare Azure Batch .NET e i pacchetti NuGet MSAL.

  2. Dichiarare le istruzioni seguenti using nel codice:

    using Microsoft.Azure.Batch;
    using Microsoft.Azure.Batch.Auth;
    using Microsoft.Identity.Client;
    
  3. Fare riferimento all'endpoint Microsoft Entra, incluso l'ID tenant. Quando si usa un'entità servizio, è necessario fornire un endpoint specifico del tenant. È possibile ottenere l'ID tenant dalla pagina Panoramica di Microsoft Entra ID nel portale di Azure.

    private const string AuthorityUri = "https://login.microsoftonline.com/<tenant-id>";
    
  4. Riferimento all'endpoint delle risorse per il servizio Batch:

    private const string BatchResourceUri = "https://batch.core.windows.net/";
    
  5. Riferimento all'account Batch:

    private const string BatchAccountUrl = "https://<myaccount>.<mylocation>.batch.azure.com";
    
  6. Specificare l'ID applicazione (client) per l'applicazione. È possibile ottenere l'ID applicazione dalla pagina Panoramica dell'applicazione nella portale di Azure.

    private const string ClientId = "<application-id>";
    
  7. Specificare la chiave privata copiata dal portale di Azure.

    private const string ClientKey = "<secret-key>";
    
  8. Scrivere un metodo di callback per acquisire il token di autenticazione da Microsoft Entra ID. Il metodo ConfidentialClientApplicationBuilder.Create seguente chiama MSAL per l'autenticazione automatica.

    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. Chiamare questo metodo usando il codice seguente. L'ambito .default garantisce che l'applicazione disponga dell'autorizzazione per accedere a tutti gli ambiti per la risorsa.

       var token = await GetAccessToken(new string[] { "BatchResourceId/.default" });
    
  10. Costruire un oggetto BatchTokenCredentials che accetta il delegato come parametro. Usare tali credenziali per aprire un oggetto BatchClient. Usare quindi l'oggetto BatchClient per le operazioni successive sul servizio Batch:

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

Esempio di codice: Usare un'entità servizio Microsoft Entra con Batch Python

Per eseguire l'autenticazione con un'entità servizio da Batch Python:

  1. Installare i moduli azure-batch e azure-common Python.

  2. Fare riferimento ai moduli:

    from azure.batch import BatchServiceClient
    from azure.common.credentials import ServicePrincipalCredentials
    
  3. Per usare un'entità servizio, specificare un endpoint specifico del tenant. È possibile ottenere l'ID tenant dalla pagina Panoramica di Microsoft Entra ID o proprietà nella portale di Azure.

    TENANT_ID = "<tenant-id>"
    
  4. Riferimento all'endpoint delle risorse per il servizio Batch:

    RESOURCE = "https://batch.core.windows.net/"
    
  5. Riferimento all'account Batch:

    BATCH_ACCOUNT_URL = "https://<myaccount>.<mylocation>.batch.azure.com"
    
  6. Specificare l'ID applicazione (client) per l'applicazione. È possibile ottenere l'ID applicazione dalla pagina Panoramica dell'applicazione nella portale di Azure.

    CLIENT_ID = "<application-id>"
    
  7. Specificare la chiave privata copiata dal portale di Azure:

    SECRET = "<secret-key>"
    
  8. Creare un oggetto ServicePrincipalCredentials:

    credentials = ServicePrincipalCredentials(
        client_id=CLIENT_ID,
        secret=SECRET,
        tenant=TENANT_ID,
        resource=RESOURCE
    )
    
  9. Usare le credenziali dell'entità servizio per aprire un oggetto BatchServiceClient. Usare quindi l'oggetto BatchServiceClient per le operazioni successive sul servizio Batch.

        batch_client = BatchServiceClient(
        credentials,
        batch_url=BATCH_ACCOUNT_URL
    )
    

Per un esempio python su come creare un client Batch autenticato usando un token Microsoft Entra, vedere l'esempio Deploying Azure Batch Custom Image with a Python Script (Distribuzione di un'immagine personalizzata di Azure Batch con uno script Python).

Passaggi successivi