Использование секретов учетных данных для проверки подлинности в обучающих заданиях Машинного обучения Azure
ОБЛАСТЬ ПРИМЕНЕНИЯ: Пакет SDK для Python версии 1
Из этой статьи вы узнаете, как безопасно использовать секреты в обучающих заданиях. Сведения проверки подлинности, такие как имя пользователя и пароль, являются секретами. Например, при подключении к внешней базе данных для запроса обучающих данных необходимо передать имя пользователя и пароль в контекст удаленного задания. Включение таких значений в сценарии обучения в виде открытого текста не является безопасным, так как секрет может быть раскрыт.
Вместо этого в рабочей области Машинного обучения Azure есть связанный ресурс, называемый Azure Key Vault. Это хранилище Key Vault применяется для безопасной передачи секретов в удаленные задания с помощью различных API из пакета SDK Машинного обучения Azure для Python.
Стандартный поток использования секретов выглядит следующим образом.
- На локальном компьютере войдите в Azure и подключитесь к рабочей области.
- На локальном компьютере задайте секрет в Key Vault рабочей области.
- Отправьте удаленное задание.
- В удаленном задании получите секрет из 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() для доступа к нескольким секретам одновременно.