Настройка проверки подлинности для ресурсов и рабочих процессов Машинного обучения Azure

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение машинного обучения Azure CLI версии 2 (current)Python SDK azure-ai-ml версии 2 (current)

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

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

  • Субъект-служба: вы создаете учетную запись субъекта-службы в идентификаторе Microsoft Entra ID и используете ее для проверки подлинности или получения маркера. Субъект-служба используется, когда требуется автоматизированный процесс для проверки подлинности в службе без вмешательства пользователя. Например, сценарий непрерывной интеграции и развертывания, который проводит обучение и тестирование модели при каждом изменении кода обучения.

  • Сеанс Azure CLI. Для проверки подлинности используется активный сеанс Azure CLI. Расширение Azure CLI для Машинного обучения (расширение ml или CLI версии 2) — это средство командной строки для работы с Машинным обучением Azure. Вы можете входить в Azure с помощью Azure CLI на локальной рабочей станции, не сохраняя учетные данные в коде Python и не запрашивая проверку подлинности пользователя. Аналогичным образом можно повторно использовать те же скрипты, что и в рамках конвейеров непрерывной интеграции и развертывания, при проверке подлинности Azure CLI с помощью удостоверения субъекта-службы.

  • Управляемое удостоверение. При использовании пакета SDK для Машинного обучения Azure на вычислительном экземпляре или на виртуальной машине Azure можно использовать управляемое удостоверение для Azure. Этот рабочий процесс позволяет виртуальной машине подключаться к рабочей области с помощью управляемого удостоверения без хранения учетных данных в коде Python или запроса проверки подлинности у пользователя. Вычислительные кластеры Машинного обучения Azure можно настроить для использования управляемого удостоверения для доступа к рабочей области во время обучения моделей.

Независимо от используемого рабочего процесса проверки подлинности, для определения уровня доступа (авторизации), разрешенного для ресурсов, используется управление доступом на основе ролей Azure (Azure RBAC). Например, администратор или процесс автоматизации может иметь доступ к созданию вычислительного экземпляра, но не использовать его, в то время как специалист по обработке и анализу данных может использовать его, но не может удалить или создать его. Дополнительные сведения см. в разделе Управление рабочей областью Машинного обучения Azure.

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

Необходимые компоненты

ИД Microsoft Entra

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

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

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

Использование интерактивной проверки подлинности

ОБЛАСТЬ ПРИМЕНЕНИЯ: Пакет SDK для Python azure-ai-ml версии 2 (current)

Интерактивная проверка подлинности использует пакет Идентификации Azure для Python. В большинстве примеров для доступа к вашим учетным данным используется DefaultAzureCredential. При необходимости маркер запрашивается с поочередным использованием нескольких удостоверений (EnvironmentCredential, , ManagedIdentityCredential, SharedTokenCacheCredential, VisualStudioCodeCredential, AzureCliCredential, AzurePowerShellCredential). Когда одно из них предоставляет маркер, процесс останавливается. Дополнительные сведения см. в справочных сведениях о классе DefaultAzureCredential.

Ниже приведен пример использования DefaultAzureCredential для проверки подлинности. В случае сбоя проверки подлинности с помощью DefaultAzureCredential используется резервная проверка подлинности через веб-браузер.

from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential

try:
    credential = DefaultAzureCredential()
    # Check if given credential can get token successfully.
    credential.get_token("https://management.azure.com/.default")
except Exception as ex:
    # Fall back to InteractiveBrowserCredential in case DefaultAzureCredential not work
    # This will open a browser page for
    credential = InteractiveBrowserCredential()

После создания объекта учетных данных класс MLClient используется для подключения к рабочей области. Например, в следующем коде используется метод from_config() для загрузки сведений о подключении:

from azure.ai.ml import MLClient
try:
    ml_client = MLClient.from_config(credential=credential)
except Exception as ex:
    # NOTE: Update following workspace information to contain
    #       your subscription ID, resource group name, and workspace name
    client_config = {
        "subscription_id": "<SUBSCRIPTION_ID>",
        "resource_group": "<RESOURCE_GROUP>",
        "workspace_name": "<AZUREML_WORKSPACE_NAME>",
    }

    # write and reload from config file
    import json, os

    config_path = "../.azureml/config.json"
    os.makedirs(os.path.dirname(config_path), exist_ok=True)
    with open(config_path, "w") as fo:
        fo.write(json.dumps(client_config))
    ml_client = MLClient.from_config(credential=credential, path=config_path)

print(ml_client)

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

Чтобы использовать субъект-службу, необходимо сначала создать субъект-службу. Затем предоставьте ей доступ к рабочей области. Как упоминалось ранее, используется управление доступом на основе ролей Azure (Azure RBAC), поэтому необходимо также решить, какой доступ следует предоставить субъекту-службе.

Важно!

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

Причина предоставления минимального доступа заключается в том, что субъект-служба использует пароль для проверки подлинности, а пароль может храниться как часть скрипта автоматизации. При утечке пароля наличие минимального доступа, необходимого для выполнения конкретных задач, позволяет избежать вредоносного использования субъекта-службы.

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

Примечание.

Для выполнения всех этих действий требуются разрешения администратора подписки.

  1. Пройдите аутентификацию в подписке Azure.

    az login
    

    Если CLI сможет запустить браузер по умолчанию, он откроет в браузере страницу входа. Или откройте браузер и выполните инструкции из командной строки. В инструкции входит переход к https://aka.ms/devicelogin и ввод кода авторизации.

    Если у вас несколько подписок Azure, вы можете использовать команду az account set -s <subscription name or ID> для задания подписки. См. дополнительные сведения в статье Use multiple Azure subscriptions (Использование нескольких подписок Azure).

    Другие методы аутентификации см. в статье Вход с помощью Azure CLI.

  2. Создайте субъект-службу. В следующем примере создается субъект-служба с именем ml-auth:

    az ad sp create-for-rbac --json-auth --name ml-auth --role Contributor --scopes /subscriptions/<subscription id>
    

    Параметр --json-auth доступен в версиях >Azure CLI = 2.51.0. Версии до этого использования --sdk-auth.

    Результатом будет файл JSON, который будет выглядеть примерно так: Запишите значения в полях clientId, clientSecret и tenantId, поскольку они понадобятся для выполнения других действий в этой статье.

    {
        "clientId": "your-client-id",
        "clientSecret": "your-client-secret",
        "subscriptionId": "your-sub-id",
        "tenantId": "your-tenant-id",
        "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
        "resourceManagerEndpointUrl": "https://management.azure.com",
        "activeDirectoryGraphResourceId": "https://graph.windows.net",
        "sqlManagementEndpointUrl": "https://management.core.windows.net:5555",
        "galleryEndpointUrl": "https://gallery.azure.com/",
        "managementEndpointUrl": "https://management.core.windows.net"
    }
    
  3. Получите сведения для субъекта-службы, используя значение clientId, возвращенное на предыдущем шаге:

    az ad sp show --id your-client-id
    

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

    {
        "accountEnabled": "True",
        "addIns": [],
        "appDisplayName": "ml-auth",
        ...
        ...
        ...
        "objectId": "your-sp-object-id",
        "objectType": "ServicePrincipal"
    }
    
  4. Сведения о предоставлении доступа к рабочей области и другим ресурсам, используемым Машинным обучением Azure, см. в следующих статьях:

    Важно!

    Доступ владельца позволяет субъекту-службе выполнять практически любую операцию в рабочей области. Он используется в этом документе, чтобы продемонстрировать, как предоставить доступ. В рабочей среде Майкрософт рекомендует предоставить субъекту-службе минимальный доступ, необходимый для выполнения ее задачи. Сведения о создании пользовательской роли с доступом, необходимым для вашего сценария, см. в разделе Управление доступом к рабочей области Машинного обучения Azure.

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

Важно!

Управляемое удостоверение поддерживается только при использовании пакета SDK Машинное обучение Azure из виртуальной машины Azure, Машинное обучение Azure вычислительного кластера или вычислительного экземпляра.

Управляемое удостоверение с виртуальной машиной

  1. Включите назначенное системой управляемое удостоверение для ресурсов Azure на виртуальной машине.

  2. Перейдите в свою рабочую область на портале Azure и выберите Контроль доступа (IAM).

  3. Выберите Добавить и Добавить назначение ролей, чтобы открыть страницу для добавления назначения роли.

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

Управляемое удостоверение с вычислительным кластером

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

Управляемое удостоверение с вычислительным экземпляром

Дополнительные сведения см. в разделе "Настройка управляемого удостоверения для вычислительного экземпляра".

Использование аутентификации субъекта-службы

ОБЛАСТЬ ПРИМЕНЕНИЯ: Пакет SDK для Python azure-ai-ml версии 2 (current)

При проверке подлинности с помощью субъекта-службы используется пакет Идентификации Azure для Python. Класс DefaultAzureCredential ищет следующие переменные среды и использует значения при проверке подлинности в качестве субъекта-службы:

  • AZURE_CLIENT_ID — идентификатор клиента, возвращаемый при создании субъекта-службы.
  • AZURE_TENANT_ID — идентификатор арендатора, возвращаемый при создании субъекта-службы.
  • AZURE_CLIENT_SECRET — пароль или учетные данные, созданные для субъекта-службы.

Совет

Во время разработки рассмотрите возможность использования пакета python-dotenv для задания этих переменных среды. Python-dotenv загружает переменные среды из файлов .env. Стандартный файл .gitignore для Python автоматически исключает файлы .env, чтобы не записывать их после изменения в какие-либо репозитории GitHub во время разработки.

В следующем примере демонстрируется использование python-dotenv для загрузки переменных среды из файла .env и последующее использование DefaultAzureCredential для создания объекта учетных данных:

from dotenv import load_dotenv

if ( os.environ['ENVIRONMENT'] == 'development'):
    print("Loading environment variables from .env file")
    load_dotenv(".env")

from azure.identity import DefaultAzureCredential

credential = DefaultAzureCredential()
# Check if given credential can get token successfully.
credential.get_token("https://management.azure.com/.default")

После создания объекта учетных данных класс MLClient используется для подключения к рабочей области. Например, в следующем коде используется метод from_config() для загрузки сведений о подключении:

try:
    ml_client = MLClient.from_config(credential=credential)
except Exception as ex:
    # NOTE: Update following workspace information to contain
    #       your subscription ID, resource group name, and workspace name
    client_config = {
        "subscription_id": "<SUBSCRIPTION_ID>",
        "resource_group": "<RESOURCE_GROUP>",
        "workspace_name": "<AZUREML_WORKSPACE_NAME>",
    }

    # write and reload from config file
    import json, os

    config_path = "../.azureml/config.json"
    os.makedirs(os.path.dirname(config_path), exist_ok=True)
    with open(config_path, "w") as fo:
        fo.write(json.dumps(client_config))
    ml_client = MLClient.from_config(credential=credential, path=config_path)

print(ml_client)

Субъект-службу также можно использовать для проверки подлинности для REST API Машинного обучения Azure. Вы используете поток предоставления учетных данных клиента Microsoft Entra ID, который разрешает вызовы службы к службе для проверки подлинности без головы в автоматизированных рабочих процессах.

Важно!

Если в настоящее время для получения учетных данных вы используете библиотеку проверки подлинности Azure Active Directory (ADAL), рекомендуется выполнить миграцию в библиотеку проверки подлинности Майкрософт (MSAL). Поддержка ADAL завершена 30 июня 2022 г.

Дополнительные сведения и примеры проверки подлинности с помощью MSAL см. в следующих статьях:

Используйте проверку подлинности с помощью управляемых удостоверений

ОБЛАСТЬ ПРИМЕНЕНИЯ: Пакет SDK для Python azure-ai-ml версии 2 (current)

При проверке подлинности с помощью управляемого удостоверения используется пакет Идентификации Azure для Python. Чтобы пройти проверку подлинности в рабочей области с виртуальной машины или вычислительного кластера, для которого настроено управляемое удостоверение, используйте класс DefaultAzureCredential. Этот класс автоматически определяет, используется ли управляемое удостоверение, и использует управляемое удостоверение для проверки подлинности в службах Azure.

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

from azure.identity import DefaultAzureCredential

credential = DefaultAzureCredential()
# Check if given credential can get token successfully.
credential.get_token("https://management.azure.com/.default")

try:
    ml_client = MLClient.from_config(credential=credential)
except Exception as ex:
    # NOTE: Update following workspace information to contain
    #       your subscription ID, resource group name, and workspace name
    client_config = {
        "subscription_id": "<SUBSCRIPTION_ID>",
        "resource_group": "<RESOURCE_GROUP>",
        "workspace_name": "<AZUREML_WORKSPACE_NAME>",
    }

    # write and reload from config file
    import json, os

    config_path = "../.azureml/config.json"
    os.makedirs(os.path.dirname(config_path), exist_ok=True)
    with open(config_path, "w") as fo:
        fo.write(json.dumps(client_config))
    ml_client = MLClient.from_config(credential=credential, path=config_path)

print(ml_client)

Использование условного доступа

Администратор может применять политики условного доступа Microsoft Entra для пользователей, входящих в рабочую область. Например, можно включить двухфакторную проверку подлинности или разрешить вход только с управляемых устройств. Чтобы использовать условный доступ для рабочих областей Машинное обучение Azure, назначьте политику условного доступа приложению с именем Машинное обучение Azure. Идентификатор приложения — 0736f41a-0425-bdb5-1563eff02385.

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