Autenticar serviços do Azure Batch com o Microsoft Entra ID

O Azure Batch dá suporte à autenticação com o Microsoft Entra ID, o serviço de gerenciamento de identidades e diretório baseado em nuvem multilocatário da Microsoft. O Azure usa o Microsoft Entra ID para autenticar seus próprios clientes, administradores de serviço e usuários organizacionais.

Este artigo descreve duas maneiras de usar a autenticação do Microsoft Entra com o Azure Batch:

  • A autenticação integrada autentica um usuário que está interagindo com um aplicativo. O aplicativo reúne as credenciais de um usuário e usa essas credenciais para autorizar o acesso aos recursos do Batch.

  • Uma entidade de serviço autentica um aplicativo autônomo. A entidade de serviço define a política e as permissões para o aplicativo e representa o aplicativo para acessar recursos em lote em tempo de execução.

Para obter mais informações sobre o Microsoft Entra ID, consulte a documentação do Microsoft Entra.

Reunir pontos de extremidade para autenticação

Para autenticar aplicativos em lote com o Microsoft Entra ID, você precisa incluir o ponto de extremidade do Microsoft Entra e o ponto de extremidade do recurso Batch em seu código.

Ponto de extremidade do Microsoft Entra

O ponto de extremidade de autoridade base do Microsoft Entra é https://login.microsoftonline.com/. Para autenticar com a ID do Microsoft Entra, use este ponto de extremidade com a ID do locatário que identifica o locatário do Microsoft Entra a ser usado para autenticação:

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

Você pode obter sua ID de locatário na página principal do Microsoft Entra ID no portal do Azure. Você também pode selecionar Propriedades na navegação à esquerda e ver a ID do locatário na página Propriedades.

Screenshot of the Tenant ID in the Azure portal.

Importante

  • O ponto de extremidade do Microsoft Entra específico do locatário é necessário quando você se autentica usando uma entidade de serviço.

  • Quando você se autentica usando a autenticação integrada, o ponto de extremidade específico do locatário é recomendado, mas opcional. Você também pode usar o ponto de extremidade comum do Microsoft Entra para fornecer uma interface genérica de coleta de credenciais quando um locatário específico não é fornecido. O parâmetro de avaliação comum é https://login.microsoftonline.com/common.

Para obter mais informações sobre pontos de extremidade do Microsoft Entra, consulte Autenticação versus autorização.

Ponto de extremidade de recurso em lote

Use o ponto de extremidade https://batch.core.windows.net/ do recurso Batch para adquirir um token para autenticar solicitações para o serviço Batch.

Registe a sua candidatura junto de um inquilino

A primeira etapa para usar a autenticação do Microsoft Entra é registrar seu aplicativo em um locatário do Microsoft Entra. Depois de registrar seu aplicativo, você pode chamar a Biblioteca de Autenticação da Microsoft (MSAL) a partir do seu código. O MSAL fornece uma API para autenticação com o Microsoft Entra ID do seu aplicativo. O registro do aplicativo é necessário se você usar a autenticação integrada ou uma entidade de serviço.

Ao registrar seu aplicativo, você fornece informações sobre seu aplicativo para o Microsoft Entra ID. Em seguida, o Microsoft Entra ID fornece uma ID de aplicativo, também chamada de ID de cliente, que você usa para associar seu aplicativo à ID do Microsoft Entra em tempo de execução. Para obter mais informações sobre a ID do aplicativo, consulte Objetos da entidade de aplicativo e serviço na ID do Microsoft Entra.

Para registar a sua candidatura em lote, siga os passos em Registar uma candidatura.

Depois de registrar seu aplicativo, você pode ver o ID do aplicativo (cliente) na página Visão geral do aplicativo.

Screenshot of the Application ID shown in the Azure portal.

Configurar autenticação integrada

Para autenticar com autenticação integrada, você precisa conceder permissão ao seu aplicativo para se conectar à API de serviço em lote. Esta etapa permite que seu aplicativo use o Microsoft Entra ID para autenticar chamadas para a API de serviço em lote.

Depois de registrar seu aplicativo, siga estas etapas para conceder ao aplicativo acesso ao serviço Batch:

  1. No portal do Azure, pesquise e selecione registros de aplicativos.
  2. Na página Registos de aplicações, selecione a sua aplicação.
  3. Na página do seu aplicativo, selecione Permissões de API na navegação à esquerda.
  4. Na página Permissões da API, selecione Adicionar uma permissão.
  5. Na página Solicitar permissões de API, selecione Lote do Azure.
  6. Na página Lote do Azure, em Selecionar permissões, marque a caixa de seleção ao lado de user_impersonation e selecione Adicionar permissões.

A página de permissões da API agora mostra que seu aplicativo Microsoft Entra tem acesso ao Microsoft Graph e ao Azure Batch. As permissões são concedidas ao Microsoft Graph automaticamente quando você registra um aplicativo com o Microsoft Entra ID.

Configurar um principal de serviço

Para autenticar um aplicativo executado sem supervisão, use uma entidade de serviço. Quando seu aplicativo é autenticado usando uma entidade de serviço, ele envia a ID do aplicativo e uma chave secreta para a ID do Microsoft Entra.

Depois de registrar seu aplicativo, siga estas etapas no portal do Azure para configurar uma entidade de serviço:

  1. Solicite um segredo para a sua candidatura.
  2. Atribua o controle de acesso baseado em função do Azure (Azure RBAC) ao seu aplicativo.

Solicite um segredo para a sua candidatura

Siga estas etapas para criar e copiar a chave secreta a ser usada em seu código:

  1. No portal do Azure, pesquise e selecione registros de aplicativos.
  2. Na página Registos de aplicações, selecione a sua aplicação.
  3. Na página do seu aplicativo, selecione Certificados & segredos na navegação à esquerda.
  4. Na página Certificados & segredos, selecione Novo segredo do cliente.
  5. Na página Adicionar um segredo do cliente, insira uma descrição e selecione um período de expiração para o segredo .
  6. Selecione Adicionar para criar o segredo e exibi-lo na página Certificados & segredos .
  7. Copie o valor secreto para um local seguro, porque você não poderá acessá-lo novamente depois de sair desta página. Se perder o acesso à sua chave, pode gerar uma nova.

Atribuir o RBAC do Azure ao seu aplicativo

Siga estas etapas para atribuir uma função RBAC do Azure ao seu aplicativo. Para obter etapas detalhadas, consulte Atribuir funções do Azure usando o portal do Azure.

  1. No portal do Azure, navegue até a conta Batch que seu aplicativo usa.
  2. Selecione Controle de acesso (IAM) na navegação à esquerda.
  3. Na página Controle de acesso (IAM), selecione Adicionar atribuição de função.
  4. Na página Adicionar atribuição de função, selecione a guia Função e selecione a função Colaborador ou Leitor para seu aplicativo.
  5. Selecione a guia Membros e selecione Selecionar membros em Membros.
  6. No ecrã Selecionar membros , procure e selecione a sua aplicação e, em seguida, selecione Selecionar.
  7. Selecione Rever + atribuir na página Adicionar atribuição de função.

Seu aplicativo agora deve aparecer na guia Atribuições de função da página Controle de acesso (IAM) da conta em lote.

Atribuir uma função personalizada

Uma função personalizada concede permissão granular a um usuário para enviar trabalhos, tarefas e muito mais. Você pode usar funções personalizadas para impedir que os usuários executem operações que afetam o custo, como criar pools ou modificar nós.

Você pode usar uma função personalizada para conceder ou negar permissões a um usuário, grupo ou entidade de serviço do Microsoft Entra para as seguintes operações RBAC do Lote do Azure:

  • 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/certificados/gravação
  • Microsoft.Batch/batchAccounts/certificates/delete
  • Microsoft.Batch/batchAccounts/certificates/read
  • Microsoft.Batch/batchAccounts/read, para qualquer operação de leitura
  • Microsoft.Batch/batchAccounts/listKeys/action, para qualquer operação

As funções personalizadas são para usuários autenticados pela ID do Microsoft Entra, não para as credenciais da conta de chave compartilhada em lote. As credenciais da conta Batch dão permissão total à conta Batch. Os trabalhos que usam o pool automático exigem permissões no nível do pool.

Nota

Algumas atribuições de função precisam ser especificadas no campo, enquanto outras precisam ser especificadas no actionsdataActions campo. Para obter mais informações, consulte Operações do provedor de recursos do Azure.

O exemplo a seguir mostra uma definição de função personalizada do 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":[

        ]
      }
    ]
  }
}

Para obter mais informações sobre como criar uma função personalizada, consulte Funções personalizadas do Azure.

Exemplos de código

Os exemplos de código nesta seção mostram como autenticar com o Microsoft Entra ID usando a autenticação integrada ou com uma entidade de serviço. Os exemplos de código usam .NET e Python, mas os conceitos são semelhantes para outras linguagens.

Nota

Um token de autenticação do Microsoft Entra expira após uma hora. Quando você usa um objeto BatchClient de longa duração, é melhor obter um token da MSAL em cada solicitação para garantir que você sempre tenha um token válido.

Para fazer isso no .NET, escreva um método que recupere o token da ID do Microsoft Entra e passe esse método para um objeto BatchTokenCredentials como delegado. Cada solicitação para o serviço Batch chama o método delegado para garantir que um token válido seja fornecido. Por padrão, o MSAL armazena tokens em cache, para que um novo token seja recuperado somente do Microsoft Entra, quando necessário. Para obter mais informações sobre tokens no Microsoft Entra ID, consulte Tokens de segurança.

Exemplo de código: usar a autenticação integrada do Microsoft Entra com o Batch .NET

Para autenticar com autenticação integrada do Batch .NET:

  1. Instale o Azure Batch .NET e os pacotes MSAL NuGet.

  2. Declare as seguintes using instruções em seu código:

    using Microsoft.Azure.Batch;
    using Microsoft.Azure.Batch.Auth;
    using Microsoft.Identity.Client;
    
  3. Faça referência ao ponto de extremidade do Microsoft Entra, incluindo a ID do locatário. Você pode obter sua ID de locatário na página Visão geral do Microsoft Entra ID no portal do Azure.

    private const string AuthorityUri = "https://login.microsoftonline.com/<tenant-id>";
    
  4. Faça referência ao ponto de extremidade de recurso do serviço de lote:

    private const string BatchResourceUri = "https://batch.core.windows.net/";
    
  5. Faça referência à sua conta Batch:

    private const string BatchAccountUrl = "https://<myaccount>.<mylocation>.batch.azure.com";
    
  6. Especifique o ID do aplicativo (cliente) para seu aplicativo. Você pode obter a ID do aplicativo na página Visão geral do seu aplicativo no portal do Azure.

    private const string ClientId = "<application-id>";
    
  7. Especifique o URI de redirecionamento que você forneceu quando registrou o aplicativo.

    private const string RedirectUri = "https://<redirect-uri>";
    
  8. Escreva um método de retorno de chamada para adquirir o token de autenticação do Microsoft Entra ID. O exemplo a seguir chama o MSAL para autenticar um usuário que está interagindo com o aplicativo. O método MSAL IConfidentialClientApplication.AcquireTokenByAuthorizationCode solicita ao usuário suas credenciais. O aplicativo prossegue assim que o usuário fornece credenciais.

    O parâmetro authorizationCode é o código de autorização obtido do servidor de autorização depois que o usuário se autentica. WithRedirectUri especifica o URI de redirecionamento para o qual o servidor de autorização redireciona o usuário após a autenticação.

    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. Chame esse método com o código a seguir, substituindo <authorization-code> pelo código de autorização obtido do servidor de autorização. O .default escopo garante que o usuário tenha permissão para acessar todos os escopos do recurso.

    
    var token = await GetTokenUsingAuthorizationCode("<authorization-code>", "RedirectUri", new string[] { "BatchResourceUri/.default" });
    
  10. Construa um objeto BatchTokenCredentials que usa o delegado como um parâmetro. Use essas credenciais para abrir um objeto BatchClient . Em seguida, use o objeto BatchClient para operações subsequentes no serviço Batch:

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

Exemplo de código: usar uma entidade de serviço do Microsoft Entra com o Batch .NET

Para autenticar com uma entidade de serviço do Batch .NET:

  1. Instale o Azure Batch .NET e os pacotes MSAL NuGet.

  2. Declare as seguintes using instruções em seu código:

    using Microsoft.Azure.Batch;
    using Microsoft.Azure.Batch.Auth;
    using Microsoft.Identity.Client;
    
  3. Faça referência ao ponto de extremidade do Microsoft Entra, incluindo a ID do locatário. Ao usar uma entidade de serviço, você deve fornecer um ponto de extremidade específico do locatário. Você pode obter sua ID de locatário na página Visão geral do Microsoft Entra ID no portal do Azure.

    private const string AuthorityUri = "https://login.microsoftonline.com/<tenant-id>";
    
  4. Faça referência ao ponto de extremidade de recurso do serviço de lote:

    private const string BatchResourceUri = "https://batch.core.windows.net/";
    
  5. Faça referência à sua conta Batch:

    private const string BatchAccountUrl = "https://<myaccount>.<mylocation>.batch.azure.com";
    
  6. Especifique o ID do aplicativo (cliente) para seu aplicativo. Você pode obter a ID do aplicativo na página Visão geral do seu aplicativo no portal do Azure.

    private const string ClientId = "<application-id>";
    
  7. Especifique a chave secreta que você copiou do portal do Azure.

    private const string ClientKey = "<secret-key>";
    
  8. Escreva um método de retorno de chamada para adquirir o token de autenticação do Microsoft Entra ID. O seguinte método ConfidentialClientApplicationBuilder.Create chama MSAL para autenticação autônoma.

    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. Chame esse método usando o código a seguir. O .default escopo garante que o aplicativo tenha permissão para acessar todos os escopos do recurso.

       var token = await GetAccessToken(new string[] { "BatchResourceId/.default" });
    
  10. Construa um objeto BatchTokenCredentials que usa o delegado como um parâmetro. Use essas credenciais para abrir um objeto BatchClient . Em seguida, use o objeto BatchClient para operações subsequentes no serviço Batch:

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

Exemplo de código: Use uma entidade de serviço do Microsoft Entra com o Batch Python

Para autenticar com uma entidade de serviço do Batch Python:

  1. Instale os módulos azure-batch e azure-common Python.

  2. Consulte os módulos:

    from azure.batch import BatchServiceClient
    from azure.common.credentials import ServicePrincipalCredentials
    
  3. Para usar uma entidade de serviço, forneça um ponto de extremidade específico do locatário. Você pode obter sua ID de locatário na página Visão Geral da ID do Microsoft Entra ou na página Propriedades no portal do Azure.

    TENANT_ID = "<tenant-id>"
    
  4. Faça referência ao ponto de extremidade de recurso do serviço de lote:

    RESOURCE = "https://batch.core.windows.net/"
    
  5. Faça referência à sua conta Batch:

    BATCH_ACCOUNT_URL = "https://<myaccount>.<mylocation>.batch.azure.com"
    
  6. Especifique o ID do aplicativo (cliente) para seu aplicativo. Você pode obter a ID do aplicativo na página Visão geral do seu aplicativo no portal do Azure.

    CLIENT_ID = "<application-id>"
    
  7. Especifique a chave secreta que você copiou do portal do Azure:

    SECRET = "<secret-key>"
    
  8. Crie um objeto ServicePrincipalCredentials :

    credentials = ServicePrincipalCredentials(
        client_id=CLIENT_ID,
        secret=SECRET,
        tenant=TENANT_ID,
        resource=RESOURCE
    )
    
  9. Use as credenciais da entidade de serviço para abrir um objeto BatchServiceClient . Em seguida, use o objeto BatchServiceClient para operações subsequentes no serviço Batch.

        batch_client = BatchServiceClient(
        credentials,
        batch_url=BATCH_ACCOUNT_URL
    )
    

Para obter um exemplo em Python de como criar um cliente Batch autenticado usando um token do Microsoft Entra, consulte o exemplo Deploying Azure Batch Custom Image with a Python Script.

Próximos passos