你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure 机器学习训练作业中使用身份验证凭据机密

适用于:适用于 Python 的 Azure 机器学习 SDK v1

重要

本文提供有关使用 Azure 机器学习 SDK v1 的信息。 自 2025 年 3 月 31 日起,SDK v1 已弃用,其支持将于 2026 年 6 月 30 日结束。 可以在该日期之前安装和使用 SDK v1。

建议在 2026 年 6 月 30 日之前过渡到 SDK v2。 有关 SDK v2 的详细信息,请参阅 什么是 Azure 机器学习 Python SDK v2SDK v2 参考

本文介绍如何在训练作业中安全使用机密。 身份验证信息(例如用户名和密码)是机密。 例如,如果连接到外部数据库来查询训练数据,则需要将用户名和密码传递到远程作业上下文。 将此类值编码为明文中的训练脚本是不安全的,因为该过程会暴露机密。

相反,你的 Azure 机器学习工作区有一个称为 Azure Key Vault 的关联资源。 使用此密钥保管库,可通过 Azure 机器学习 Python SDK 中的一组 API 安全将机密传递给远程作业。

使用机密的标准流程是:

  1. 在本地计算机上,登录到 Azure 并连接到你的工作区。
  2. 在本地计算机上,在“工作区密钥保管库”中设置机密。
  3. 提交远程作业。
  4. 在远程作业中,从密钥保管库获取机密并使用它。

设置机密

在 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(),用于同时访问多个机密。