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


Использование секретов учетных данных аутентификации в заданиях Azure Machine Learning

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

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

Azure Key Vault предоставляет безопасное хранилище и получение секретов. Из этой статьи вы узнаете, как получить секреты, хранящиеся в хранилище ключей, из задания обучения, выполняемого в вычислительном кластере.

Внимание

Используйте клиентскую библиотеку Azure Key Vault Secrets для Python для хранения и извлечения секретов. Пакет SDK машинного обучения Azure версии 2 предоставляет сведения о рабочей области, необходимые для подключения к хранилищу ключей.

Предварительные требования

Перед выполнением действий, описанных в этой статье, убедитесь, что выполнены следующие необходимые условия:

Совет

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

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

  • Python 3.10 или более поздней версии. Для azure-keyvault-secrets пакетов azure-identity требуется Python 3.9 или более поздней версии, но рекомендуется использовать Python 3.10 или более поздней версии.

  • Рабочая область Машинного обучения Azure. Если у вас нет одного, выполните действия, описанные в статье "Создание ресурсов", чтобы приступить к созданию.

  • Один Azure Key Vault. Если вы использовали статью Создание ресурсов для начала работы, чтобы создать свою рабочую область, для вас было создано хранилище ключей. Вы также можете создать отдельный экземпляр хранилища ключей, используя информацию из статьи Быстрое начало: Создание хранилища ключей.

    Совет

    Вам не нужно использовать то же хранилище ключей, что и рабочая область.

  • (Необязательно) Вычислительный кластер Azure Machine Learning настроен для использования управляемого удостоверения. Кластер можно настроить для управляемого удостоверения, которое назначается системой или пользователем.

  • Если ваше задание выполняется в вычислительном кластере, предоставьте управляемому удостоверению для вычислительного кластера доступ к секретам, хранящимся в хранилище ключей. Или, если задание выполняется на бессерверных вычислениях, предоставьте управляемому удостоверению, указанному для задания, доступ к секретам. Метод, используемый для предоставления доступа, зависит от настройки хранилища ключей:

    • Управление доступом на основе ролей в Azure (Azure RBAC): при настройке Azure RBAC добавьте управляемое удостоверение в роль пользователя секретов Key Vault вашего хранилища ключей Azure.
    • Политика доступа к Azure Key Vault. При настройке использования политик доступа добавьте новую политику, которая предоставляет операцию получения секретов и назначьте ее управляемому удостоверению.
  • Секретное значение, хранящееся в Key Vault. Это значение можно получить с помощью ключа. Дополнительные сведения см. в разделе "Быстрый старт: Настройка и извлечение секрета из Azure Key Vault".

    Совет

    Ссылка для быстрого старта ведет к шагам использования Python SDK для Azure Key Vault. В оглавлении в левой области ссылки на другие способы задания ключа.

Получение URL-адреса хранилища ключей

При создании рабочей области Машинного обучения Azure хранилище ключей по умолчанию подготавливается вместе с ним. Используйте MLClient для получения URL-адреса хранилища программным способом:

from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential

subscription_id = "<subscription-id>"
resource_group = "<resource-group>"
workspace_name = "<workspace-name>"

ml_client = MLClient(
    DefaultAzureCredential(),
    subscription_id=subscription_id,
    resource_group_name=resource_group,
    workspace_name=workspace_name,
)

workspace = ml_client.workspaces.get(workspace_name)
key_vault_arm_id = workspace.key_vault
vault_name = key_vault_arm_id.split("/")[-1]
vault_url = f"https://{vault_name}.vault.azure.net/"
print(vault_url)  # https://<your-vault-name>.vault.azure.net/

Затем вы можете передать это vault_url значение в задание обучения в качестве переменной среды, как показано в приведенных ниже примерах.

Совет

Вы также можете найти URL-адрес хранилища ключей на портале Azure , перейдя в рабочую область и выбрав "Обзор". Хранилище ключей отображается в свойствах рабочей области.

получение секретов;

Вы можете получить секреты во время обучения двумя способами:

  • Используйте управляемую идентичность, ассоциированную с вычислительным ресурсом, на котором выполняется обучение.
  • Используйте свою идентификацию, чтобы вычислительные ресурсы выполняли задание от вашего имени.
  1. Добавьте пакеты azure-keyvault-secrets и azure-identity в среду машинного обучения Azure, которую вы используете для обучения модели. Например, добавьте их в файл conda, используемый для сборки среды.

    Используйте эту среду для создания образа Docker, выполняемого заданием обучения в вычислительном кластере.

  2. В вашем учебном коде используйте Azure Identity SDK и клиентскую библиотеку Key Vault, чтобы получить учетные данные управляемого удостоверения и аутентифицироваться в хранилище ключей. Переменная KEY_VAULT_URL среды передается заданию во время отправки (см. шаг 3).

    import os
    from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential
    from azure.keyvault.secrets import SecretClient
    
    try:
        credential = DefaultAzureCredential()
        credential.get_token("https://management.azure.com/.default")
    except Exception:
        credential = InteractiveBrowserCredential()
    
    vault_url = os.environ["KEY_VAULT_URL"]
    secret_client = SecretClient(vault_url=vault_url, credential=credential)
    

    Совет

    В рабочей среде задайте переменной среды AZURE_TOKEN_CREDENTIALS значение ManagedIdentityCredential, чтобы ограничить DefaultAzureCredential цепочку только учетными данными управляемого удостоверения. Это изменение улучшает время запуска и уменьшает неоднозначность.

  3. После проверки подлинности используйте клиентскую библиотеку Key Vault для получения секрета, предоставив ключ, связанный с секретом.

    secret = secret_client.get_secret("secret-name")
    print(secret.value)
    
  4. При отправке задания обучения передайте URL-адрес хранилища ключей в качестве переменной среды. Используйте значение vault_url, извлеченное в операции получения URL-адреса хранилища ключей.

    from azure.ai.ml import command
    
    job = command(
        code="./src",
        command="python train.py",
        environment="AzureML-sklearn-1.0-ubuntu20.04-py38-cpu:1",
        compute="cpu-cluster",
        environment_variables={"KEY_VAULT_URL": vault_url},
    )
    
    ml_client.jobs.create_or_update(job)
    

Пример отправки задания обучения с использованием пакета Azure Machine Learning Python SDK версии 2 см. в разделе "Обучение моделей с использованием Python SDK версии 2".