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

O Lote do Azure dá suporte à autenticação com o Microsoft Entra ID O Azure AD (Azure Active Directory) é o serviço de gerenciamento de diretório e identidade multilocatário baseado em nuvem da Microsoft. O Azure usa o Microsoft Entra ID para autenticar seus clientes, administradores de serviços e usuários organizacionais.

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

  • 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 autenticar o acesso aos recursos do Lote.

  • 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 representar o aplicativo ao acessar recursos do Lote no runtime.

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

Coletar pontos de extremidade para autenticação

Para autenticar aplicativos do Lote com Microsoft Entra ID, você precisa incluir o ponto de extremidade do Microsoft Entra ID e o ponto de extremidade de recurso do Lote 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 o Microsoft Entra ID, use esse ponto de extremidade com a ID do locatário que identifica o locatário do Microsoft Entra ID 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 no painel de navegação esquerdo e ver a ID do Locatário na página Propriedades.

Captura de tela da ID do locatário no portal do Azure.

Importante

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

  • Quando você 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 de coleta de credenciais genérica quando um locatário específico não é fornecido. O ponto de extremidade 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 recursos do Lote

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

Registrar seu aplicativo em um locatário

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

Ao registrar o aplicativo, você fornece informações sobre ele ao Microsoft Entra ID. O Microsoft Entra ID, em seguida, fornece um ID do aplicativo (também chamado de ID do Cliente) que você usa para associar o aplicativo ao Microsoft Entra ID no runtime. Para obter mais informações sobre a ID do aplicativo, consulte objetos de aplicativo e entidade de serviço no Microsoft Entra ID.

Para registrar seu aplicativo do Lote, siga as etapas em Registrar um aplicativo.

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

Captura de tela da ID do aplicativo mostrada no portal do Azure.

Configurar a autenticação integrada

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

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

  1. No portal do Azure, pesquise e selecione Registros de aplicativo.
  2. Na página Registros de aplicativo, selecione seu aplicativo.
  3. Na página do aplicativo, selecione Permissões de API na navegação à esquerda.
  4. Na página Permissões de API, escolha 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, em seguida, selecione Adicionar permissões.

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

Configurar uma entidade de serviço

Para autenticar um aplicativo que é executado de forma autônoma, use uma entidade de serviço. Quando o aplicativo é autenticado com uma entidade de serviço, ele envia a ID do aplicativo e uma chave secreta para o Microsoft Entra ID.

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

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

Solicitar um segredo para o aplicativo

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 aplicativo.
  2. Na página Registros de aplicativo, selecione seu aplicativo.
  3. Na página do seu aplicativo, selecione Certificados e segredos na navegação à esquerda.
  4. Na página Certificados e 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 e segredos.
  7. Copie o segredo Valor para um local seguro, pois você não poderá acessá-lo novamente depois de sair da página. Se você perder o acesso à sua chave, poderá gerar uma nova.

Atribuir Azure RBAC ao seu aplicativo

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

  1. No portal do Azure, navegue para a conta do Lote usada pelo aplicativo.
  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, em seguida, selecione a função Colaborador ou Leitor para seu aplicativo.
  5. Selecione a guia Membros e selecione Selecionar membros em Membros.
  6. Na tela Selecionar membros, pesquise e selecione seu aplicativo e selecione Selecionar.
  7. Selecione Examinar + 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 do 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 a criação de pools ou a mudança de nós.

É possível 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 do 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/certificates/write
  • 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 pelo Microsoft Entra ID, não pelas credenciais de conta do Lote. As credenciais de conta do Lote dão permissão total para a conta do Lote. Os trabalhos que usam o pool automático exigem permissões no nível do pool.

Observação

Certas atribuições de função precisam ser definidas no campo actions, enquanto outras precisam ser especificadas no campo dataActions. 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 Lote do Azure:

{
 "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 mais informações sobre a criação de uma função personalizada, consulte Funções personalizadas do Azure.

Exemplos de código

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

Observação

Um token de autenticação do Microsoft Entra expirará 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, escrever um método que recupera o token do Microsoft Entra ID e passar esse método para um BatchTokenCredentials objeto como um delegado. Cada solicitação para o serviço de lote chama o método delegado para garantir que um token válido seja fornecido. Por padrão MSAL armazena em cache os tokens, para que um novo token é recuperado do Microsoft Entra somente quando necessário. Para mais informações sobre tokens no Microsoft Entra ID, confira Tokens de segurança.

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

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

  1. Instale o Lote do Azure .NET e os pacotes NuGet da MSAL.

  2. Declare as seguintes instruções using no 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. Referencie o ponto de extremidade de recursos do serviço do Lote:

    private const string BatchResourceUri = "https://batch.core.windows.net/";
    
  5. Referencie a conta do Lote:

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

    private const string ClientId = "<application-id>";
    
  7. Especifique o URI de redirecionamento que você inseriu ao registrar o aplicativo cliente.

    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 quando o usuário fornecer credenciais.

    O parâmetro authorizationCode é o código de autorização obtido do servidor de autorização após a autenticação do usuário. 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 escopo .default 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 use o delegado como um parâmetro. Use essas credenciais para abrir um objeto BatchClient. Em seguida, use esse objeto BatchClient para operações subsequentes no serviço do Lote:

    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 .NET do Lote

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

  1. Instale o Lote do Azure .NET e os pacotes NuGet da MSAL.

  2. Declare as seguintes instruções using no 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 ao 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. Referencie o ponto de extremidade de recursos do serviço do Lote:

    private const string BatchResourceUri = "https://batch.core.windows.net/";
    
  5. Referencie a conta do Lote:

    private const string BatchAccountUrl = "https://<myaccount>.<mylocation>.batch.azure.com";
    
  6. Especifique a ID do aplicativo (cliente) para seu aplicativo. Você pode obter a ID do aplicativo na página Visão geral do 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 método ConfidentialClientApplicationBuilder.Create a seguir 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 escopo .default garante que o aplicativo tenha permissão para acessar todos os escopos do recurso.

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

    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: usar uma entidade de serviço do Microsoft Entra com o Python do Lote

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

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

  2. Referencie 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 ou Propriedades do Microsoft Entra ID no portal do Azure.

    TENANT_ID = "<tenant-id>"
    
  4. Referencie o ponto de extremidade de recursos do serviço do Lote:

    RESOURCE = "https://batch.core.windows.net/"
    
  5. Referencie a conta do Lote:

    BATCH_ACCOUNT_URL = "https://<myaccount>.<mylocation>.batch.azure.com"
    
  6. Especifique a ID do aplicativo (cliente) para seu aplicativo. Você pode obter a ID do aplicativo na página Visão geral do 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 do Lote.

        batch_client = BatchServiceClient(
        credentials,
        batch_url=BATCH_ACCOUNT_URL
    )
    

Para obter um exemplo com Python de como criar um cliente do Lote autenticado usando um token do Microsoft Entra ID, consulte o exemplo Implantar imagem personalizada do Lote do Azure com um script Python.

Próximas etapas