Поделиться через


Проверка подлинности пакетных служб Azure с помощью Microsoft Entra ID

Azure Batch поддерживает аутентификацию с помощью Microsoft Entra ID, мультитенантной облачной службы каталогов и управления идентификацией Microsoft. Azure использует Microsoft Entra ID для аутентификации своих клиентов, администраторов служб и пользователей организации.

В этой статье описываются два способа использования аутентификации Microsoft Entra с Azure Batch.

  • Встроенная проверка подлинности выполняет проверку подлинности пользователя, взаимодействующего с приложением. Приложение собирает учетные данные пользователя и использует эти учетные данные для проверки подлинности доступа к ресурсам пакетной службы.

  • Субъект-служба выполняет проверку подлинности автоматического приложения. Сервисный принципал определяет политику и разрешения для приложения и предоставляет приложению доступ к ресурсам службы пакетной обработки во время выполнения.

Дополнительные сведения об идентификаторе Microsoft Entra см. в документации по Microsoft Entra.

Сбор конечных точек для аутентификации

Чтобы выполнить проверку подлинности пакетных приложений с помощью идентификатора Microsoft Entra ID, необходимо включить конечную точку Microsoft Entra и конечную точку ресурса пакетной службы в код.

Конечная точка Microsoft Entra

Базовый адрес авторитетного узла Microsoft Entra — https://login.microsoftonline.com/. Чтобы пройти проверку подлинности с помощью Microsoft Entra ID, используйте эту конечную точку с идентификатором арендатора, который идентифицирует арендатора Microsoft Entra, используемого для проверки подлинности.

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

Идентификатор арендатора можно получить на главной странице Microsoft Entra ID в портале Azure. Вы также можете выбрать Свойства в области навигации слева и увидеть идентификатор арендатора на странице Свойства.

Снимок экрана идентификатора арендатора в портале Azure.

Внимание

  • Конечная точка Microsoft Entra, специфичная для арендатора, требуется при аутентификации с помощью учетной записи службы.

  • При аутентификации с использованием интегрированной аутентификации рекомендуется использовать конечную точку для конкретного клиента, но это необязательно. Вы также можете использовать общую конечную точку Microsoft Entra для предоставления универсального интерфейса сбора учетных данных, если определенный клиент не указан. Общая конечная точка выглядит так: https://login.microsoftonline.com/common.

Дополнительные сведения о конечных точках Microsoft Entra см. в статье "Проверка подлинности и авторизация".

Конечная точка пакетного ресурса

Используйте конечную точку ресурса Batch https://batch.core.windows.net/, чтобы получить токен для аутентификации запросов к службе Batch.

Регистрация приложения в клиенте

Первым шагом в использовании проверки подлинности Microsoft Entra является регистрация приложения в клиенте Microsoft Entra. После регистрации приложения вы можете вызвать библиотеку проверки подлинности Майкрософт (MSAL) из кода. MSAL предоставляет API для проверки подлинности с помощью идентификатора Microsoft Entra из приложения. Регистрация приложения обязательна, независимо от того, используете ли вы встроенную проверку подлинности или служебный принципал.

При регистрации приложения вы предоставляете сведения о приложении идентификатору Microsoft Entra. Затем идентификатор Microsoft Entra предоставляет идентификатор приложения, который также называется идентификатором клиента, который используется для связывания приложения с идентификатором Microsoft Entra во время выполнения. Для получения дополнительных сведений об идентификаторе приложения см. раздел "Объекты приложения и объектов-службы в Microsoft Entra ID".

Чтобы зарегистрировать пакетное приложение, следуйте инструкциям в Регистрация приложения.

После регистрации приложения вы увидите идентификатор приложения (клиента) на странице обзора приложения.

Снимок экрана идентификатора приложения, показанного на портале Azure.

Настройка интегрированной проверки подлинности

Чтобы выполнить проверку подлинности с помощью встроенной проверки подлинности, необходимо предоставить приложению разрешение на подключение к API пакетной службы. Этот шаг позволяет приложению использовать идентификатор Microsoft Entra для проверки подлинности вызовов API пакетной службы.

После регистрации приложения выполните следующие действия, чтобы предоставить приложению доступ к пакетной службе:

  1. В портал Azure найдите и выберите регистрацию приложений.
  2. На странице Регистрация приложений выберите приложение.
  3. На странице приложения выберите разрешения API в области навигации слева.
  4. На странице Разрешения API выберите Добавить разрешение.
  5. На странице Запрос API разрешений выберите Azure Batch.
  6. На странице Azure Batch, в разделе Выбор разрешений, установите флажок рядом с user_impersonation, а затем нажмите Добавить разрешения.

На странице разрешений API теперь указано, что приложение Microsoft Entra имеет доступ как к Microsoft Graph, так и к Azure Batch. Разрешения предоставляются Microsoft Graph автоматически при регистрации приложения с идентификатором Microsoft Entra.

Настройка субъекта-службы

Чтобы аутентифицировать приложение, которое работает без вмешательства пользователя, необходимо использовать служебный принципал. Когда ваше приложение проходит проверку подлинности с помощью учетной записи службы, оно отправляет как идентификатор приложения, так и секретный ключ в Microsoft Entra ID.

После регистрации приложения выполните следующие действия в портале Azure, чтобы настроить учетную запись службы.

  1. Запросите секрет для приложения.
  2. Назначьте приложению управление доступом на основе ролей Azure (Azure RBAC).

Запрос секрета для приложения

Выполните следующие действия, чтобы создать и скопировать секретный ключ для использования в коде:

  1. В портал Azure найдите и выберите регистрацию приложений.
  2. На странице Регистрация приложений выберите приложение.
  3. На странице приложения выберите сертификаты и секреты в области навигации слева.
  4. На странице "Сертификаты и секреты" выберите новый секрет клиента.
  5. На странице "Добавление секрета клиента" введите описание и выберите срок действия секрета.
  6. Выберите "Добавить ", чтобы создать секрет и отобразить его на странице "Сертификаты и секреты ".
  7. Скопируйте значение секрета в безопасное место, так как после выхода из этой страницы вы не сможете получить доступ к нему снова. Если вы теряете доступ к ключу, вы можете создать новый.

Назначьте Azure RBAC вашему приложению

Выполните следующие действия, чтобы назначить роль Azure RBAC приложению. Дополнительные сведения см. в разделе «Ролевое управление доступом для службы Azure Batch».

  1. В портале Azure перейдите к учетной записи Batch, которую использует ваше приложение.
  2. Выберите Управление доступом (IAM) в области навигации слева.
  3. На странице управления доступом (IAM) выберите " Добавить назначение роли".
  4. На странице "Добавление назначения ролей" выберите вкладку "Роль", а затем выберите одну из встроенных ролей RBAC для Azure Batch для вашего приложения.
  5. Перейдите на вкладку "Члены" и выберите " Выбрать участников " в разделе "Участники".
  6. На экране "Выбор участников" найдите и выберите приложение, а затем нажмите кнопку "Выбрать".
  7. Выберите "Рецензирование и назначение" на странице "Добавление назначения роли".

Теперь ваше приложение должно отображаться на вкладке Назначения ролей на странице Управление доступом (IAM) учетной записи пакетной обработки.

Примеры кода

Примеры кода в этом разделе показывают, как аутентифицироваться с Microsoft Entra ID, используя встроенную аутентификацию или учетную запись службы. Примеры кода используют .NET и Python, но основные понятия аналогичны другим языкам.

Примечание.

Срок действия токена проверки подлинности Microsoft Entra истекает через один час. При использовании долго существующего объекта BatchClient рекомендуется получать токен из MSAL для каждого запроса, чтобы гарантировать, что вы всегда имеете действительный токен.

Для этого в .NET напишите метод, который извлекает маркер из идентификатора Microsoft Entra ID, и передайте этот метод в объект BatchTokenCredentials в качестве делегата. Каждый запрос к пакетной службе вызывает метод делегата, чтобы убедиться, что указан допустимый токен. По умолчанию msAL кэширует маркеры, поэтому новый маркер извлекается из Microsoft Entra только при необходимости. Дополнительные сведения о токенах в идентификаторе Microsoft Entra см. в разделе Токены безопасности.

Пример кода. Использование интегрированной проверки подлинности Microsoft Entra с пакетной службой .NET

Чтобы выполнить аутентификацию с помощью встроенной аутентификации из Batch .NET, выполните приведенные действия.

  1. Установите пакеты Azure Batch .NET и MSAL NuGet.

  2. Объявите следующие using инструкции в коде:

    using Microsoft.Azure.Batch;
    using Microsoft.Azure.Batch.Auth;
    using Microsoft.Identity.Client;
    
  3. Ссылка на конечную точку Microsoft Entra, включая идентификатор арендатора. Вы можете получить идентификатор арендатора на странице Обзор идентификатора Microsoft Entra в портале Azure.

    private const string AuthorityUri = "https://login.microsoftonline.com/<tenant-id>";
    
  4. Укажите ссылку на конечную точку ресурса пакетной службы:

    private const string BatchResourceUri = "https://batch.core.windows.net/";
    
  5. Укажите ссылку на учетную запись пакетной службы:

    private const string BatchAccountUrl = "https://<myaccount>.<mylocation>.batch.azure.com";
    
  6. Укажите идентификатор клиента вашего приложения. Идентификатор приложения можно получить на странице Обзор приложения на портале Azure.

    private const string ClientId = "<application-id>";
    
  7. Укажите URI перенаправления, предоставленный при регистрации приложения.

    private const string RedirectUri = "https://<redirect-uri>";
    
  8. Напишите метод обратного вызова для получения маркера проверки подлинности из идентификатора Microsoft Entra. В следующем примере msAL вызывается для проверки подлинности пользователя, взаимодействующего с приложением. Метод MSAL IConfidentialClientApplication.AcquireTokenByAuthorizationCode запрашивает у пользователя учетные данные. Приложение продолжается после того, как пользователь предоставит учетные данные.

    Параметр authorizationCode — это код авторизации, полученный от сервера авторизации после проверки подлинности пользователя. WithRedirectUri указывает URI перенаправления, на который сервер авторизации перенаправляет пользователя после проверки подлинности.

    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. Вызовите этот метод со следующим кодом, заменив <authorization-code> код авторизации, полученный с сервера авторизации. Область .default гарантирует, что у пользователя есть разрешение на доступ ко всем областям ресурса.

    
    var token = await GetTokenUsingAuthorizationCode("<authorization-code>", "RedirectUri", new string[] { "BatchResourceUri/.default" });
    
  10. Создайте объект BatchTokenCredentials, который принимает делегат в качестве параметра. Используйте эти учетные данные, чтобы открыть объект BatchClient. Затем используйте объект BatchClient для последующих операций со службой пакетов.

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

Пример кода: Использование учетной записи службы Microsoft Entra с Batch .NET

Чтобы пройти проверку подлинности с помощью учетной записи службы в Batch .NET:

  1. Установите пакеты Azure Batch .NET и MSAL NuGet.

  2. Объявите следующие using инструкции в коде:

    using Microsoft.Azure.Batch;
    using Microsoft.Azure.Batch.Auth;
    using Microsoft.Identity.Client;
    
  3. Ссылка на конечную точку Microsoft Entra, включая идентификатор арендатора. При использовании субъекта-службы необходимо предоставить конечную точку для конкретного клиента. Вы можете получить идентификатор арендатора на странице Обзор идентификатора Microsoft Entra в портале Azure.

    private const string AuthorityUri = "https://login.microsoftonline.com/<tenant-id>";
    
  4. Укажите ссылку на конечную точку ресурса пакетной службы:

    private const string BatchResourceUri = "https://batch.core.windows.net/";
    
  5. Укажите ссылку на учетную запись пакетной службы:

    private const string BatchAccountUrl = "https://<myaccount>.<mylocation>.batch.azure.com";
    
  6. Укажите идентификатор приложения (клиента) для приложения. Идентификатор приложения можно получить на странице Обзор вашего приложения в портале Azure.

    private const string ClientId = "<application-id>";
    
  7. Укажите секретный ключ, скопированный из портал Azure.

    private const string ClientKey = "<secret-key>";
    
  8. Напишите метод обратного вызова для получения токена аутентификации из Microsoft Entra ID. Следующий метод ConfidentialClientApplicationBuilder.Create вызывает MSAL для автоматической проверки подлинности.

    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. Вызовите этот метод с помощью следующего кода. Область .default гарантирует, что у приложения есть разрешение на доступ ко всем областям ресурса.

       var token = await GetAccessToken(new string[] { $"{BatchResourceUri}/.default" });
    
  10. Создайте объект BatchTokenCredentials, который принимает делегат в качестве параметра. Используйте эти учетные данные, чтобы открыть объект BatchClient. Затем используйте объект BatchClient для последующих операций в пакетной службе.

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

Пример кода: использование учётной записи службы Microsoft Entra с Batch, используя Python

Чтобы выполнить проверку подлинности с помощью учетной записи службы Python Batch, выполните следующие действия.

  1. Установите модули Python azure-batch и azure-common.

  2. Ссылка на модули:

    from azure.batch import BatchServiceClient
    from azure.common.credentials import ServicePrincipalCredentials
    
  3. Чтобы использовать субъект-службу, укажите конечную точку для конкретного клиента. Идентификатор клиента можно получить на странице обзора идентификатора microsoft Entra ID или на странице "Свойства" в портал Azure.

    TENANT_ID = "<tenant-id>"
    
  4. Укажите ссылку на конечную точку ресурса пакетной службы:

    RESOURCE = "https://batch.core.windows.net/"
    
  5. Укажите ссылку на учетную запись пакетной службы:

    BATCH_ACCOUNT_URL = "https://<myaccount>.<mylocation>.batch.azure.com"
    
  6. Укажите идентификатор (клиента) для вашего приложения. Идентификатор приложения можно получить на странице Общая информация вашего приложения в портале Azure.

    CLIENT_ID = "<application-id>"
    
  7. Укажите секретный ключ, скопированный на портале Azure:

    SECRET = "<secret-key>"
    
  8. Создайте объект ServicePrincipalCredentials.

    credentials = ServicePrincipalCredentials(
        client_id=CLIENT_ID,
        secret=SECRET,
        tenant=TENANT_ID,
        resource=RESOURCE
    )
    
  9. Используйте учетные данные служебного принципала, чтобы открыть объект BatchServiceClient. Затем используйте объект BatchServiceClient для последующих операций со службой пакетной обработки.

        batch_client = BatchServiceClient(
        credentials,
        batch_url=BATCH_ACCOUNT_URL
    )
    

Пример создания клиента пакетной службы, прошедшего проверку подлинности с помощью маркера Microsoft Entra, см. в примере скрипта Python для развертывания пакетная служба Azure пользовательского образа.

Следующие шаги