Как использовать секретные ключи в конвейерах службы машинного обучения Azure - PullRequest
0 голосов
/ 09 января 2019

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

Локально, я использую переменные среды для использования секретных паролей и ключей, но, насколько мне известно, это невозможно в инфраструктуре конвейера, поскольку Conda не поддерживает передачу переменных среды. Если кто-то может подтвердить или опровергнуть это, это будет полезно.

В службах машинного обучения Azure на портале Azure я обнаружил ресурс «хранилище ключей», который создается автоматически при создании ресурса «Рабочая область службы машинного обучения». Кажется, это именно то, что мне нужно. Это? И если да, то как мне его использовать?

Если ни одно из вышеперечисленных не решает мою проблему, есть ли другой способ безопасно использовать секретные пароли и ключи в моих сценариях, не записывая их в виде простого текста в сценариях?

РЕДАКТИРОВАТЬ: я понимаю, что мой вопрос сосредоточен на соединениях с базой данных. Однако на самом деле речь идет о любых видах секретов или паролей, а не только об учетных данных базы данных. Как указывалось в ответе, здесь стоит упомянуть, что соединения с базой данных SQL Azure можно (и нужно) решать с помощью DataTransferStep .

Ответы [ 2 ]

0 голосов
/ 20 мая 2019

Вместо использования переменных среды вы можете просто передать учетные данные с помощью параметра arguments:

pipeline_step = PythonScriptStep(
    script_name='train.py',
    arguments=['--keyvault_name', 'MyKV', '--secret_name', 'MyPW'], ...

И определить аргументы сценария в train.py следующим образом:

parser = argparse.ArgumentParser('train')
parser.add_argument('--keyvault_name')
parser.add_argument('--secret_name')
args = parser.parse_args()

Затем вы можете использовать переменные args.keyvault_name и args.secret_name в вашем скрипте. Вы можете использовать эти значения для считывания пароля из хранилища ключей. Конечно, вы должны сначала создать хранилище ключей и сохранить там пароль. Кроме того, вы также должны убедиться, что AML Workspace имеет разрешение на чтение секретов из хранилища ключей.

Конечно, вы также можете передать пароль в аргументе script в виде обычного текста, но это не рекомендуется.

0 голосов
/ 10 января 2019

Какую базу данных вы используете? Если это Azure SQL, вы можете использовать DataTransferStep вместо передачи секретов. Соответствующие классы:

DataTransferStep

DataReference

AzureSqlDataBaseDataStore

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...