Настройка проверки подлинности для ресурсов и рабочих процессов Машинного обучения 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 можно использовать для дальнейшего управления или ограничения доступа к рабочей области для каждого рабочего процесса проверки подлинности. Например, администратор может разрешить доступ к рабочей области только с управляемых устройств.
Необходимые компоненты
Создайте рабочую область Машинного обучения Azure.
Настройте среду разработки или используйте Машинное обучение Azure вычислительный экземпляр и установите пакет SDK Машинное обучение Azure версии 2.
Установите интерфейс командной строки Azure.
Microsoft Entra ID
Все рабочие процессы проверки подлинности для рабочей области зависят от идентификатора 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. Чтобы создать субъект-службу и предоставить ей доступ к рабочей области, выполните следующие действия/
Примечание.
Для выполнения всех этих действий требуются разрешения администратора подписки.
Пройдите аутентификацию в подписке Azure.
az login
Если интерфейс командной строки может открыть браузер по умолчанию, он выполняет это и загружает страницу входа. Или откройте браузер и выполните инструкции из командной строки. В инструкции входит переход к https://aka.ms/devicelogin и ввод кода авторизации.
Если у вас несколько подписок Azure, вы можете использовать команду
az account set -s <subscription name or ID>
для задания подписки. См. дополнительные сведения в статье Use multiple Azure subscriptions (Использование нескольких подписок Azure).Другие методы аутентификации см. в статье Вход с помощью Azure CLI.
Создайте субъект-службу. В следующем примере создается субъект-служба с именем 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" }
Получите сведения для субъекта-службы, используя значение
clientId
, возвращенное на предыдущем шаге:az ad sp show --id your-client-id
Ниже приведен упрощенный пример выходных данных JSON из команды. Запишите значение в поле
objectId
, поскольку оно понадобится на следующем шаге.{ "accountEnabled": "True", "addIns": [], "appDisplayName": "ml-auth", ... ... ... "objectId": "your-sp-object-id", "objectType": "ServicePrincipal" }
Сведения о предоставлении доступа к рабочей области и другим ресурсам, используемым Машинным обучением Azure, см. в следующих статьях:
Внимание
Доступ владельца позволяет субъекту-службе выполнять практически любую операцию в рабочей области. Он используется в этом документе, чтобы продемонстрировать, как предоставить доступ. В рабочей среде Майкрософт рекомендует предоставить субъекту-службе минимальный доступ, необходимый для выполнения ее задачи. Сведения о создании пользовательской роли с доступом, необходимым для вашего сценария, см. в разделе Управление доступом к рабочей области Машинного обучения Azure.
Настройка управляемого удостоверения
Внимание
Управляемое удостоверение поддерживается только при использовании пакета SDK Машинное обучение Azure из виртуальной машины Azure, Машинное обучение Azure вычислительного кластера или вычислительного экземпляра.
Управляемое удостоверение с виртуальной машиной
Включите назначенное системой управляемое удостоверение для ресурсов Azure на виртуальной машине.
Перейдите в свою рабочую область на портале Azure и выберите Контроль доступа (IAM).
Выберите Добавить и Добавить назначение ролей, чтобы открыть страницу для добавления назначения роли.
Выберите роль, которую требуется назначить управляемому удостоверению. Например, читатель. Подробные инструкции см. в статье Назначение ролей 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 см. в следующих статьях:
- JavaScript — Миграция приложения JavaScript из ADAL.js в MSAL.js.
- Node.js — Миграция приложения Node.js с Библиотеки проверки подлинности Майкрософт на MSAL.
- Python — Руководство по миграции с Библиотеки проверки подлинности Майкрософт на MSAL для Python.
Используйте проверку подлинности с помощью управляемых удостоверений
ОБЛАСТЬ ПРИМЕНЕНИЯ: Пакет 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 для пользователей, входящих в рабочую область. Например, можно включить двухфакторную проверку подлинности или разрешить вход только с управляемых устройств. Ниже приведены идентификаторы приложений для условного доступа:
Application ID | Имя. | Примечание. |
---|---|---|
d7304df8-741f-47d3-9bc2-df0e24e2071f | веб-приложение Машинное обучение Azure Workbench | Студия машинного обучения Azure |
cb2ff863-7f30-4ced-ab89-a00194bcf6d9 | Приложение Azure AI Studio | Azure AI Studio |
Проверка субъекта-службы
Перед добавлением политики условного доступа убедитесь, что идентификатор приложения указан в разделе корпоративных приложений портал Azure:
Внимание
Чтобы выполнить действия, описанные в этом разделе, необходимо иметь идентификатор Microsoft Entra ID P2. Дополнительные сведения см. в разделе лицензирование Microsoft Entra.
Найдите корпоративные приложения в поле поиска в верхней части портала и выберите запись корпоративного приложения.
В корпоративных приложениях используйте поле поиска по имени приложения или идентификатору объекта для поиска записи, которую вы хотите использовать с условным доступом. Если появится запись, субъект-служба уже существует для идентификатора приложения. Пропустите остальные действия, описанные в этом разделе, и перейдите к разделу "Добавить условный доступ ".
Внимание
Единственным фильтром должно быть идентификатор приложения. Удалите любой другой фильтр, который может присутствовать.
Если запись не отображается, используйте следующий командлет Azure PowerShell для создания субъекта-службы для идентификатора приложения:
New-AzAdServicePrincipal -ApplicationId "application-ID"
Например,
New-AzADServicePrincipal -ApplicationId "d7304df8-741f-47d3-9bc2-df0e24e2071f"
.После создания субъекта-службы вернитесь в корпоративные приложения и убедитесь, что теперь можно найти идентификатор приложения. Список идентификаторов можно найти в разделе "Использование условного доступа ".
Добавление условного доступа
Чтобы использовать условный доступ, назначьте политику условного доступа идентификатору приложения. Если приложение не отображается в условном доступе, выполните действия, описанные в разделе "Проверка субъекта-службы ".