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

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

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

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

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

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

Сбор конечных точек для проверки подлинности

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

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

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

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

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

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

Внимание

  • Конечная точка Microsoft Entra для конкретного клиента требуется при проверке подлинности с помощью субъекта-службы.

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

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

Конечная точка ресурса пакетной службы

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

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

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

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

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

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

Снимок экрана идентификатора приложения, показанного на портале 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.

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

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

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

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

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

Назначение Azure RBAC приложению

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

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

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

Назначение настраиваемой роли

Настраиваемая роль предоставляет детализированное разрешение пользователю на отправку заданий, задач и т. д. Пользовательские роли можно использовать для предотвращения операций, влияющих на затраты пользователей, таких как создание пулов или изменение узлов.

Пользовательскую роль можно использовать для предоставления или запрета разрешений пользователю Microsoft Entra, группе или субъекту-службе для следующих пакетная служба Azure операций RBAC:

  • 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 для любой операции чтения
  • Microsoft.Batch/batchAccounts/listKeys/action для любой операции

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

Примечание.

Некоторые назначения ролей должны быть указаны в actions поле, а другие должны быть указаны в dataActions поле. Дополнительные сведения см. в разделе Операции с поставщиками ресурсов Azure.

В следующем примере показано определение пользовательской роли пакетная служба 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":[

        ]
      }
    ]
  }
}

Дополнительные сведения о создании настраиваемой роли см. в статье Настраиваемые роли Azure.

Примеры кода

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

Примечание.

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

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

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

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

  1. Установите пакетная служба Azure .NET и пакеты NUGet MSAL.

  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 с пакетной службой .NET

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

  1. Установите пакетная служба Azure .NET и пакеты NUGet MSAL.

  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. Следующий метод 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 с пакетной службой Python

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

  1. Установите модули Python для пакетной службы Azure и Azure.

  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 пользовательского образа.

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