Condividi tramite


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:

  • Autenticazione integrata autentica un utente che interagisce con un'applicazione. L'applicazione raccoglie le credenziali dell'utente e le usa per autenticare l'accesso alle risorse di Batch.

  • Un'entità servizio autentica un'applicazione senza intervento dell'utente. 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 su Microsoft Entra ID, 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 di 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 a sinistra e visualizzare l'ID tenant nella pagina Proprietà.

Screenshot dell'ID tenant nel portale di Azure.

Importante

  • L'endpoint Microsoft Entra specifico per il tenant è obbligatorio 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 la scelta è facoltativa. È 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 delle risorse Batch https://batch.core.windows.net/ per acquisire un token per autenticare le 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 la 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 danno informazioni sull'applicazione a Microsoft Entra ID. Microsoft Entra ID fornisce quindi un ID applicazione, detto anche ID client, da usare per associare l'applicazione a Microsoft Entra ID in fase di esecuzione. Per altre informazioni sull'ID applicazione, vedere Oggetti applicazione ed 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 dell'ID applicazione visualizzato nel portale di Azure.

Configurare l'autenticazione integrata

Per eseguire l'autenticazione con l'autenticazione integrata, è necessario concedere le autorizzazioni per l'applicazione 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. Nel 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 Richiedere autorizzazioni API selezionare Azure Batch.
  6. Nella pagina Azure Batch, in Seleziona le 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 autentica con un'entità servizio, invia l'ID dell'applicazione e una chiave privata a Microsoft Entra ID.

Dopo aver registrato l'applicazione, seguire questi passaggi 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. Nel 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 una posizione sicura, poiché non sarà possibile accedervi nuovamente dopo aver chiuso la pagina. Se si perde l'accesso alla chiave, è possibile generarne una nuova.

Assegnare un 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 la procedura dettagliata, vedere Assegnare ruoli di Azure usando il portale di Azure.

  1. Nel 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 da Microsoft Entra ID, non per le credenziali dell'account della chiave condivisa batch. Le credenziali dell'account Batch forniscono le autorizzazioni complete per l'account Batch. I processi che usano il pool automatico richiedono autorizzazioni a livello di pool.

Nota

Alcune assegnazioni di ruolo devono essere specificate nel campo actions, mentre altre devono essere specificate nel campo dataActions. 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 mediante 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 recuperi il token da Microsoft Entra ID e passi 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 da Microsoft Entra solo quando necessario. Per altre informazioni sui token in Microsoft Entra ID, vedere Token di sicurezza.

Esempio di codice: uso dell'autenticazione integrata di Microsof Entra con .NET di Batch

Per eseguire l'autenticazione integrata da Batch .NET:

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

  2. Dichiarare le istruzioni using seguenti 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 nel portale di Azure.

    private const string ClientId = "<application-id>";
    
  7. Specificare l'URI di reindirizzamento indicato 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 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: uso di un'entità servizio Microsoft Entra con Batch .NET

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

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

  2. Dichiarare le istruzioni using seguenti 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 indicare 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 nel 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[] { $"{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 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: uso di un'entità servizio Microsoft Entra con Batch Python

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

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

  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 o Proprietà di Microsoft Entra ID nel 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 nel 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 operazioni successive sul servizio Batch.

        batch_client = BatchServiceClient(
        credentials,
        batch_url=BATCH_ACCOUNT_URL
    )
    

Per un esempio di Python sulla creazione di un client di Batch autenticato tramite token di Microsoft Entra, vedere l'esempio Distribuzione di un'immagine personalizzata di Azure Batch con uno script Python.

Passaggi successivi