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


Использование секретов учетных данных для проверки подлинности в обучающих заданиях Машинного обучения Azure

ОБЛАСТЬ ПРИМЕНЕНИЯ: Пакет SDK для Python версии 1

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

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

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

  1. На локальном компьютере войдите в Azure и подключитесь к рабочей области.
  2. На локальном компьютере задайте секрет в Key Vault рабочей области.
  3. Отправьте удаленное задание.
  4. В удаленном задании получите секрет из Key Vault и используйте его.

Настройка секретов

В Машинном обучении Azure класс Keyvault содержит методы для настройки секретов. В локальном сеансе Python сначала получите ссылку на Key Vault вашей рабочей области, а затем используйте метод set_secret(), чтобы задать секрет по имени и значению. Метод set_secret обновляет значение секрета, если такое имя уже существует.

from azureml.core import Workspace
from azureml.core import Keyvault
import os


ws = Workspace.from_config()
my_secret = os.environ.get("MY_SECRET")
keyvault = ws.get_default_keyvault()
keyvault.set_secret(name="mysecret", value = my_secret)

Не помещайте значение секрета в код Python, так как оно небезопасно для хранения его в файле в виде ясного текста. Вместо этого получите значение секрета из переменной среды, например Azure DevOps build secret, или из интерактивных данных, введенных пользователем.

Вы можете перечислить имена секретов с помощью list_secrets() метода, а также пакетную версию set_secrets(), которая позволяет задать несколько секретов одновременно.

Внимание

Использование list_secrets() будет перечислять только секреты, созданные set_secret() с помощью пакета set_secrets() SDK для Машинное обучение Azure. Не будут перечислены секреты, созданные с помощью средств, отличных от пакета SDK. Например, в списке не будет секрета, созданного с помощью портала Azure или Azure PowerShell.

Вы можете использовать get_secret() для получения значения секрета из хранилища ключей, независимо от того, как он был создан. Таким образом, вы можете получить секреты, которые не перечислены в list_secrets().

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

Для получения значения секрета по имени в локальном коде вы можете использовать метод get_secret().

Для заданий, отправленных Experiment.submit, используйте метод get_secret() с классом Run. Так как отправленный запуск осведомлен о своей рабочей области, этот метод сокращает создание экземпляра рабочей области и напрямую возвращает значение секрета.

# Code in submitted job
from azureml.core import Experiment, Run

run = Run.get_context()
secret_value = run.get_secret(name="mysecret")

Будьте внимательны, чтобы не раскрыть значение секрета, написав или напечатав его.

Существует также пакетная версия, get_secrets() для доступа к нескольким секретам одновременно.