如何在Azure机器学习服务管道中使用秘密密钥

时间:2019-01-09 11:41:30

标签: azure-machine-learning-studio azure-machine-learning-workbench

我正在使用Azure机器学习服务和pipeline functionality用于机器准备模型的数据准备,培训和测试。但是,在数据准备步骤中,我需要连接到数据库,并且想找到一种方法来传递我的秘密密码或密钥,而不必在脚本文件中以纯文本形式写入它们。

在本地,我使用环境变量来使用秘密密码和密钥,但是据我所知,在管道基础架构中这是不可能的,因为Conda不支持传递环境变量。如果任何人都可以确认或否认这一点,那将是有帮助的。

在Azure门户的Azure机器学习服务中,我找到了一个“密钥库”资源,该资源是在创建“机器学习服务工作区”资源时自动创建的。这似乎正是我所需要的。是吗?如果可以,我该如何使用它?

如果以上方法都不能解决我的问题,是否还有其他方法可以安全地在脚本中使用秘密密码和密钥,而无需在脚本中以纯文本形式编写密码和密钥?

编辑:我意识到我的问题非常关注数据库连接。但是,问题实际上是关于任何种类的秘密或密码,而不仅仅是数据库凭据。正如答案中指出的那样,在这里值得一提的是,可以(并且应该)使用DataTransferStep解决Azure SQL数据库连接。

3 个答案:

答案 0 :(得分:2)

除了使用环境变量,您还可以通过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_nameargs.secret_name。您可以使用这些值从Key Vault中读取密码。当然,您必须首先创建密钥库并在其中存储密码。此外,还必须确保AML Workspace有权从Key Vault中读取机密。

当然,您也可以在脚本参数中以纯文本形式传递密码,但这是不可取的。

答案 1 :(得分:1)

您使用哪种数据库?如果是Azure SQL,则可以使用DataTransferStep而不是传递秘密。相关的类是:

DataTransferStep

DataReference

AzureSqlDataBaseDataStore

答案 2 :(得分:1)

从Azure ML SDK版本1.0.57开始,现在支持通过azureml.core.keyvault.KeyVault对象将机密传递到远程运行:

请参见“在远程运行中使用机密”一节in this notebook