Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
本文介绍如何在训练作业中安全使用机密。 身份验证信息(例如用户名和密码)是机密。 例如,如果连接到外部数据库来查询训练数据,则需要将用户名和密码传递到远程作业上下文。 将此类值编码为明文中的训练脚本是不安全的,因为该过程会暴露机密。
相反,你的 Azure 机器学习工作区有一个称为 Azure Key Vault 的关联资源。 使用此密钥保管库,可通过 Azure 机器学习 Python SDK 中的一组 API 安全将机密传递给远程作业。
使用机密的标准流程是:
- 在本地计算机上,登录到 Azure 并连接到你的工作区。
- 在本地计算机上,在“工作区密钥保管库”中设置机密。
- 提交远程作业。
- 在远程作业中,从密钥保管库获取机密并使用它。
设置机密
在 Azure 机器学习中,Keyvault 类包含用于设置机密的方法。 在本地 Python 会话中,首先获取对工作区密钥保管库的引用,然后使用 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 生成机密)或从交互式用户输入中获取机密值。
你可以使用 list_secrets()
方法列出机密名称,此方法还有一个批处理版本 set_secrets(),允许你一次设置多个机密。
重要
使用 list_secrets()
只会列出使用 Azure 机器学习 SDK 通过 set_secret()
或 set_secrets()
创建的机密。 不会列出由 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(),用于同时访问多个机密。