如何解决Synapse Notebook运行及管道输出明文泄露密钥问题
Synapse 管道与Notebook密钥明文泄露修复方案
管道侧配置调整
- 所有涉及密钥流转的活动(包括Key Vault取密钥活动、调用Synapse Notebook的活动、中间做参数处理的Set Variable/Append Variable活动),全部同时勾选安全输入、安全输出选项,不要仅给Web活动开启安全输出。只要活动输入、输出载荷中包含密钥字段,两个安全开关必须全部开启,否则活动的运行日志会明文记录载荷内容。
- 所有承载密钥的管道参数、管道变量必须设置为
SecureString类型,禁止使用普通String类型存储密钥值。普通String类型不受安全输出规则保护,哪怕上游开启了安全配置,赋值给普通变量时仍会被明文写入运行日志。 - 简化密钥传递链路:从Key Vault取出的密钥值直接通过表达式透传给Notebook活动的对应参数,不要通过普通变量、其他活动输出做中转,传递表达式直接写
@activity('你的Key Vault取密钥活动名').output.value即可,不要在表达式里拼接密钥和其他明文字符串。
Notebook侧配置调整
- 接收密钥的参数必须放在标记为参数单元格的独立单元格内,禁止在参数单元格内编写
print、display类输出语句,也不要把密钥值赋值给会被其他单元格全局引用且默认输出的变量。 - 关闭Notebook运行时的参数自动记录配置:Synapse底层通过papermill执行Notebook任务,默认会自动把所有传入参数的键值对打印在自动生成的运行时参数单元格中,你可以在Notebook的会话配置里把
记录参数输入、自动捕获参数单元格输出的开关关闭,从根源避免参数被明文打在运行单元格里。 - 代码逻辑中使用密钥时,仅在需要鉴权的代码块内本地调用密钥变量,不要把密钥值写入临时表、日志打印语句、异常返回信息中;如果需要做连通性校验,仅返回成功/失败的状态标识,不要输出完整连接串、密码字段。
兜底权限配置
- 收敛运行日志查看权限:普通开发者仅授予管道、Notebook的运行状态查看权限,完整运行输出、单元格详情的查看权限仅开放给工作区管理员,避免普通开发者通过运行历史看到明文密钥。
- Key Vault侧仅给Synapse工作区托管身份授予对应密钥的get权限,不要给普通开发者开放Key Vault的密钥读取、列表权限,从权限层阻断开发者直接接触密钥的路径。
注意:如果历史运行记录中已经存在明文密钥的日志,需要第一时间轮换对应密钥,同时清理敏感运行记录,避免存量日志造成密钥泄露。
内容的提问来源于stack exchange,提问作者user13442358
相关产品推荐
相关产品推荐

