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

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

Рекомендуемый способ аутентификации приложений пакетная служба Azure — использовать клиентскую библиотеку Azure Identity client library, которая предоставляет классы аутентификации на основе токенов (например, DefaultAzureCredential, ManagedIdentityCredential, ClientSecretCredential и InteractiveBrowserCredential), которые работают единообразно независимо от того, где выполняется приложение: локально, в Azure или в локальной инфраструктуре. Общие сведения о рекомендуемых стратегиях проверки подлинности см. в следующих статье:

В этой статье описаны два распространенных сценария проверки подлинности пакетная служба Azure с помощью Microsoft Entra ID:

  • Встроенная (интерактивная) проверка подлинности выполняет проверку подлинности пользователя, взаимодействующего с приложением. Используйте учетные данные, такие как InteractiveBrowserCredential или DefaultAzureCredential (которые могут выполнять цепочку через входы средств разработчика, такие как Azure CLI, Visual Studio и Visual Studio Code).

  • Проверка подлинности с помощью субъекта-службы или управляемого идентификатора используется для проверки подлинности приложения, работающего без участия пользователя. Используйте учетные данные, такие как ManagedIdentityCredential для приложений, размещенных в Azure, или ClientSecretCredential / ClientCertificateCredential для приложений, прошедших проверку подлинности с помощью секрета или сертификата зарегистрированного приложения.

Дополнительные сведения об идентификаторе 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. После регистрации приложения вы можете использовать в своем коде учетные данные из библиотеки Azure Identity для получения токенов Microsoft Entra для службы Batch. Регистрация приложения требуется для потоков конфиденциальных клиентов (субъекта-службы) и для любого интерактивного потока, требующего регистрации приложения для конкретного клиента.

Tip

Если код использует DefaultAzureCredential и выполняет вход с помощью средства разработчика (Azure CLI, Azure PowerShell, Visual Studio или Visual Studio Code) или управляемого удостоверения, вам не нужно зарегистрировать отдельное приложение— учетные данные используют удостоверение, уже настроенное в этой среде.

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

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

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

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

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

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

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

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

На странице разрешений API теперь указано, что приложение Microsoft Entra имеет доступ как к Microsoft Graph, так и к пакетная служба Azure. Разрешения предоставляются 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».

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

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

Примеры кода

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

Примечание.

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

Tip

Для большинства сценариев используйте DefaultAzureCredential. Он автоматически пробует несколько методов аутентификации (управляемая идентичность, переменные среды, входы через инструменты разработчика и т. д.), поэтому один и тот же код работает как локально во время разработки, так и в Azure или в локальной инфраструктуре. Сведения о выборе подходящих учетных данных см. в разделе Аутентификация приложений .NET и Аутентификация приложений Python.

Пример кода: аутентификация в пакетная служба Azure с помощью .NET

В этом примере используется Azure.Compute.Batch вместе с библиотекой Azure.Identity.

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

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

    using Azure.Compute.Batch;
    using Azure.Core;
    using Azure.Identity;
    
  3. Укажите конечный URL-адрес учетной записи Batch:

    private const string BatchAccountUrl = "https://<myaccount>.<mylocation>.batch.azure.com";
    
  4. Создайте учетные данные и передайте их в конструктор BatchClient. Используйте клиент для последующих операций со службой Batch.

    Рекомендуется: DefaultAzureCredential — работает локально с учетными данными для входа в инструменты разработчика (Azure CLI, Visual Studio, Visual Studio Code) и автоматически использует управляемый идентификатор при запуске приложения в Azure:

    TokenCredential credential = new DefaultAzureCredential();
    
    BatchClient client = new BatchClient(new Uri(BatchAccountUrl), credential);
    
    await foreach (BatchJob job in client.GetJobsAsync())
    {
        Console.WriteLine(job.Id);
    }
    

    Интерактивный (интегрированный) вход — предлагает пользователю войти через системный браузер. Используйте это, когда приложение должно проходить проверку подлинности конкретного пользователя в интерактивном режиме:

    TokenCredential credential = new InteractiveBrowserCredential(
        new InteractiveBrowserCredentialOptions
        {
            TenantId = "<tenant-id>",
            ClientId = "<application-id>",      // optional; required only if you registered your own app
            RedirectUri = new Uri("http://localhost")
        });
    
    BatchClient client = new BatchClient(new Uri(BatchAccountUrl), credential);
    

    Субъект-служба (секрет клиента) — используется для автономных приложений, которые проходят аутентификацию с использованием секрета регистрации приложения:

    TokenCredential credential = new ClientSecretCredential(
        tenantId: "<tenant-id>",
        clientId: "<application-id>",
        clientSecret: "<client-secret>");
    
    BatchClient client = new BatchClient(new Uri(BatchAccountUrl), credential);
    

    Управляемое удостоверение — используйте, если приложение выполняется в ресурсе Azure (например, на виртуальной машине, в службе приложений или в контейнерном приложении), которому назначено управляемое удостоверение, назначаемое системой или пользователем:

    // System-assigned managed identity
    TokenCredential credential = new ManagedIdentityCredential();
    
    // Or, user-assigned managed identity
    // TokenCredential credential = new ManagedIdentityCredential(clientId: "<user-assigned-client-id>");
    
    BatchClient client = new BatchClient(new Uri(BatchAccountUrl), credential);
    

Пример кода: проверка подлинности в пакетная служба Azure из Python

В этом примере используется клиент azure-batch с учетными данными из библиотеки удостоверений Azure . Устаревший azure.common.credentials.ServicePrincipalCredentials класс устарел. Вместо этого используйте azure-identity учетные данные.

  1. Установите необходимые пакеты:

    pip install azure-batch azure-identity
    
  2. Укажите конечную точку учетной записи Batch и область ресурса Batch:

    BATCH_ACCOUNT_URL = "https://<myaccount>.<mylocation>.batch.azure.com"
    BATCH_SCOPE = "https://batch.core.windows.net/.default"
    
  3. Создайте учетные данные и передайте их в BatchServiceClient.

    Рекомендуется: DefaultAzureCredential — работает локально с входом через средства разработчика и автоматически использует управляемый идентификатор при запуске в Azure:

    from azure.batch import BatchServiceClient
    from azure.identity import DefaultAzureCredential
    
    credential = DefaultAzureCredential()
    
    batch_client = BatchServiceClient(
        credentials=credential,
        batch_url=BATCH_ACCOUNT_URL,
    )
    

    Интерактивный (интегрированный) вход — предлагает пользователю войти через системный браузер:

    from azure.batch import BatchServiceClient
    from azure.identity import InteractiveBrowserCredential
    
    credential = InteractiveBrowserCredential(
        tenant_id="<tenant-id>",
        client_id="<application-id>",  # optional; required only if you registered your own app
    )
    
    batch_client = BatchServiceClient(
        credentials=credential,
        batch_url=BATCH_ACCOUNT_URL,
    )
    

    Субъект-служба (секрет клиента) — используется для приложений, работающих без участия пользователя:

    from azure.batch import BatchServiceClient
    from azure.identity import ClientSecretCredential
    
    credential = ClientSecretCredential(
        tenant_id="<tenant-id>",
        client_id="<application-id>",
        client_secret="<client-secret>",
    )
    
    batch_client = BatchServiceClient(
        credentials=credential,
        batch_url=BATCH_ACCOUNT_URL,
    )
    

    Managed identity — используется при запуске приложения на ресурсе Azure с управляемым удостоверением:

    from azure.batch import BatchServiceClient
    from azure.identity import ManagedIdentityCredential
    
    # System-assigned managed identity
    credential = ManagedIdentityCredential()
    
    # Or, user-assigned managed identity
    # credential = ManagedIdentityCredential(client_id="<user-assigned-client-id>")
    
    batch_client = BatchServiceClient(
        credentials=credential,
        batch_url=BATCH_ACCOUNT_URL,
    )
    

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