You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure Machine Learning Service管道中安全使用密钥与凭据

解答你的Azure ML Pipeline机密管理问题

我来帮你梳理清楚这些关于Azure Machine Learning Pipeline中安全管理机密的疑问,逐一解答如下:

关于环境变量在AML Pipeline中的可用性

你提到的“Conda不支持传递环境变量,导致本地的环境变量方式在Pipeline里失效”这个认知有一定道理,但不是完全绝对:

  • 本地环境的系统环境变量确实不会自动同步到AML Pipeline的计算目标(比如Compute Cluster)中,因为这些计算资源是独立的云端环境,和本地环境隔离。
  • 不过你依然可以在AML中设置环境变量——比如通过RunConfiguration或者Environment对象来定义计算环境的环境变量,但不推荐用这种方式存储敏感信息,因为环境变量可能会在某些运行日志或环境配置中暴露,安全性不如专门的机密管理工具。

AML Workspace自动创建的Key Vault正是你需要的工具

完全正确!每个Azure Machine Learning Workspace在创建时,都会自动创建并关联一个Azure Key Vault实例(名字一般是Workspace名称加上一串随机后缀)。这个Key Vault就是专门为AML Workspace设计的敏感信息存储容器,不管是数据库密码、API密钥、连接字符串还是其他类型的机密,都可以安全存在这里,完美匹配你的需求。

如何使用AML关联的Key Vault管理机密

使用这个Key Vault的流程非常清晰,分三步走:

1. 往Key Vault里添加机密

你有两种方式添加:

  • Azure门户操作:找到Workspace对应的Key Vault,进入「机密」选项卡,点击「生成/导入」,输入机密的名称和值,保存即可(注意机密名称最好有辨识度,比如sql-db-password、openai-api-key)。
  • AML SDK操作:如果需要代码化管理,可以用SDK直接添加:
    from azureml.core import Workspace
    
    # 加载Workspace配置(本地需要有config.json)
    ws = Workspace.from_config()
    # 获取默认关联的Key Vault
    keyvault = ws.get_default_keyvault()
    # 添加机密
    keyvault.set_secret(name="sql-db-password", value="your-secure-password-here")
    

2. 在Pipeline脚本中安全获取机密

在你的数据准备、训练等脚本里,不需要明文写密码,只要通过AML SDK从Key Vault拉取即可:

from azureml.core import Workspace

ws = Workspace.from_config()
keyvault = ws.get_default_keyvault()
# 获取指定机密
db_password = keyvault.get_secret(name="sql-db-password")
# 接下来就可以用这个密码连接数据库或者其他服务了

3. 确保计算目标有访问权限

默认情况下,AML自带的Compute Cluster、Compute Instance等计算资源会被自动授予访问这个Key Vault的权限,不需要额外配置。但如果是你自己创建的外部计算资源,就得去Key Vault的「访问策略」里,给该计算资源的服务主体添加「获取机密」的权限。

其他安全管理机密的备选方法

除了Key Vault,还有几种场景化的安全方案:

  • 使用AML Datastore:对于数据库、存储账户这类数据源,可以创建AML Datastore,连接凭据会自动存在Key Vault里。在Pipeline中直接调用Datastore来访问数据,完全不需要在脚本里处理敏感信息。
  • 使用SecretParameter:定义Pipeline Step时,用SecretParameter来传递机密,这样参数值不会被记录在Pipeline的运行日志或历史记录里,避免泄露:
    from azureml.pipeline.core import SecretParameter
    
    # 定义机密参数
    api_secret = SecretParameter(name="openai-api-key")
    # 在Step中使用这个参数,脚本里通过命令行参数获取即可
    
  • 安全设置环境变量:如果你习惯用环境变量的方式,可以在AML的Environment对象中设置,但值从Key Vault获取,再把这个环境关联到你的Pipeline Step:
    from azureml.core import Environment
    
    ws = Workspace.from_config()
    keyvault = ws.get_default_keyvault()
    env = Environment.get(ws, name="your-custom-environment")
    # 从Key Vault获取值,设置为环境变量
    env.environment_variables["OPENAI_API_KEY"] = keyvault.get_secret(name="openai-api-key")
    

补充:Azure SQL数据库的推荐处理方式

正如你补充说明的,对于Azure SQL数据库的连接,强烈推荐使用DataTransferStep。它可以直接关联AML的Azure SQL Datastore,而Datastore的连接凭据已经安全存在Key Vault中,全程不需要在脚本里写任何敏感信息,示例代码如下:

from azureml.pipeline.steps import DataTransferStep
from azureml.core.datastore import Datastore

ws = Workspace.from_config()
# 获取预先创建好的Azure SQL Datastore
sql_datastore = Datastore.get(ws, name="my-sql-datastore")
# 创建数据迁移Step
transfer_step = DataTransferStep(
    name="load-sql-data",
    source_datastore=sql_datastore,
    source_query="SELECT * FROM customer_data",
    target_datastore=ws.get_default_datastore(),
    target_path="sql_imported_data/",
    compute_target="your-compute-cluster"
)

内容的提问来源于stack exchange,提问作者Arvid Bärnhielm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:58:45