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

Azure Synapse中隐藏与检索密钥的配置及访问方法

Azure Synapse 读取密钥实现对等Databricks配置方案

mssparkutils.credentials.getSecret() 是Synapse Spark环境读取受保护密钥的标准正确方法,不需要像Databricks那样做集群级的密钥挂载配置,但需要完成AKV(Azure Key Vault)关联和权限配置,针对你使用的my_new_pool Spark池,完整配置流程如下:

前置配置步骤

  • 将原Databricks中使用的所有密钥(比如example_client_id对应的实体值)存入Azure Key Vault,Synapse没有内置独立的集群密钥存储,所有受保护密钥统一从AKV拉取。
  • 在Synapse Studio的「管理-链接服务」中,新建指向你存储密钥的AKV的链接服务,测试连通后发布配置。
  • 给my_new_pool的运行身份分配AKV密钥读取权限:如果池使用工作区托管标识,就到AKV的访问控制页给该托管标识分配「密钥用户」角色;如果使用自定义服务主体,给对应主体分配同权限即可,不需要把单个密钥逐一绑定到池的配置项中。

实现和Databricks一致的调用体验

你之前写的mssparkutils.credentials.getSecret("example_client_id")缺少必填的AKV链接服务参数,正确的基础调用语法是:

# 第一个参数为你之前创建的AKV链接服务名称,第二个参数为AKV中存储的密钥名
client_id = mssparkutils.credentials.getSecret("akv_link_service_name", "example_client_id")

如果要完全对齐Databricks里spark.conf.get("spark.example_client_id")的调用逻辑,不需要修改原有业务代码的话,只需要在作业/Notebook初始化阶段加一行注入配置即可:

# 将密钥注入Spark配置,全程密钥明文不会出现在日志或输出中,默认自动脱敏
spark.conf.set("spark.example_client_id", mssparkutils.credentials.getSecret("akv_link_service_name", "example_client_id"))

# 后续原有代码可直接复用,和Databricks环境调用逻辑完全一致
client_id = spark.conf.get("spark.example_client_id")

常见问题说明

  • 不需要像Databricks那样把密钥逐一挂载绑定到my_new_pool的配置中:只要池的运行身份有AKV读取权限,就能拉取所有有权访问的密钥,同一个AKV链接服务可以被工作区下所有授权的Spark池复用,不需要重复配置。
  • 不要直接把密钥明文写到Spark池的自定义Spark配置项里:这类配置是明文存储的,存在泄露风险。如果不想每个Notebook都写初始化注入代码,可以把密钥注入逻辑封装为公共启动脚本,配置为my_new_pool的池级启动脚本,池启动时自动执行注入,所有跑在该池上的作业都可以直接通过spark.conf.get()读取对应密钥。
  • 密钥安全:mssparkutils.credentials.getSecret()返回的结果默认做了全链路脱敏,打印输出、日志记录时都会被替换为[REDACTED],和Databricks的密钥保护逻辑一致。

内容的提问来源于stack exchange,提问作者Nate

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:15:35