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

适用于:Python SDK azure-ai-ml v2(当前版本)

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

使用 Azure Key Vault 可以安全地存储和检索机密。 本文介绍如何从计算群集上运行的训练作业中检索存储在密钥保管库中的机密。

重要

Azure 机器学习 Python SDK v2 和用于机器学习的 Azure CLI 扩展 v2 不提供设置或获取机密的功能。 但本文中的信息会使用适用于 Python 的 Azure Key Vault 机密客户端库

先决条件

在按照本文中的步骤操作之前,请确保满足以下先决条件:

提示

本部分中的许多先决条件都需要对 Azure 订阅或包含资源的 Azure 资源组具有参与者、所有者或等效的访问权限。 你可能需要与 Azure 管理员联系,让他们执行这些操作。

  • Azure 订阅。 如果没有 Azure 订阅,请在开始前创建一个试用版订阅。 尝试试用版订阅

  • Azure 机器学习工作区。 如果没有,可以按照创建资源以开始使用一文中的步骤创建一个。

  • 一个 Azure Key Vault。 如果已按照创建资源以开始使用一文创建工作区,则已经创建了密钥保管库。 还可以使用快速入门:创建密钥保管库一文中的信息创建单独的密钥保管库实例。

    提示

    无需使用与工作区相同的密钥保管库。

  • (可选)配置为使用托管标识的 Azure 机器学习计算群集。 可以为系统分配的托管标识或用户分配的托管标识配置群集。

  • 如果作业会在计算群集上运行,请向计算群集的托管标识授予对密钥保管库中存储的机密的访问权限。 或者,如果作业会在无服务器计算上运行,则向为该作业指定的托管标识授予对机密的访问权限。 用于授予访问权限的方法取决于密钥保管库的配置方式:

  • 密钥保管库中存储的机密值。 然后,可以使用密钥检索此值。 有关详细信息,请参阅快速入门:在 Azure Key Vault 中设置和检索机密

    提示

    快速入门链接指向使用 Azure Key Vault Python SDK 的步骤。 左侧导航区域的目录中包含指向设置密钥的其他方法的链接。

获取机密

在训练过程中,有两种方法可以获取机密:

  • 使用与训练作业运行的计算资源关联的托管标识。
  • 通过让计算代表你运行作业来使用标识。
  1. azure-keyvault-secretsazure-identity 包添加到训练模型时使用的 Azure 机器学习环境。 例如,通过将这些包添加到用于生成环境的 conda 文件。

    环境用于生成训练作业在计算群集上运行的 Docker 映像。

  2. 在训练代码中,使用 Azure 标识 SDKKey Vault 库客户端库获取托管标识凭据,并向密钥保管库进行身份验证:

    from azure.identity import DefaultAzureCredential
    from azure.keyvault.secrets import SecretClient
    
    credential = DefaultAzureCredential()
    
    secret_client = SecretClient(vault_url="https://my-key-vault.vault.azure.cn/", credential=credential)
    
  3. 进行身份验证后,使用 Key Vault 客户端库通过提供关联的密钥来检索机密:

    secret = secret_client.get_secret("secret-name")
    print(secret.value)
    

有关使用 Azure 机器学习 Python SDK v2 提交训练作业的示例,请参阅使用 Python SDK v2 训练模型