如何为Synapse Pipeline运行指定身份(SP/UAMI等)及权限问题咨询
问题描述
我在受控企业环境中使用Synapse Spark Pools,查询AAD的权限有限,但能创建用户分配托管标识(UAMI)并分配给资源。直接创建Spark作业定义从ADLS读取数据时,作业以我的身份(tim.davies@work.com)作为提交者,因为我有数据存储的rx权限,运行正常。但通过Pipeline调用该Spark作业定义时出现授权错误,查看Spark应用列表发现Pipeline用了一个陌生的UUID作为提交者(不是Synapse工作区系统托管标识或我创建的UAMI,且没法查询AAD获取详情)。想知道能不能为Pipeline指定明确的UAMI运行,或者有其他权限管理方案?
解决方案
1. 给Pipeline指定UAMI运行
你可以按以下步骤配置:
- 先确认已创建好目标UAMI,并且把这个UAMI添加到Synapse工作区的「托管标识」选项卡中(用户分配的标识列表里)
- 给该UAMI授予ADLS存储的
Storage Blob Data Reader(对应你的rx权限)等必要权限 - 编辑Pipeline,在「属性」面板的「托管标识」下拉框里选中你创建的UAMI
- 保存后重新运行Pipeline,此时Spark作业会以这个UAMI身份提交,应该能解决授权问题
2. 排查Pipeline默认使用的标识
Pipeline默认会用Synapse工作区的系统托管标识(SAMI),你可以核对下:
- 查看Synapse工作区系统托管标识的对象ID,和Spark应用列表里的UUID对比,如果匹配,说明是用了SAMI,给SAMI加上ADLS的相应权限就行
- 如果UUID不匹配SAMI,大概率是企业环境的特殊配置(比如权限代理)导致的,这种情况优先用指定UAMI的方案绕开
3. 权限验证注意事项
- 给UAMI/SAMI加完IAM权限后,等几分钟再测试,因为权限同步可能有延迟
- 如果Spark作业只需要读取ADLS里的特定容器或文件夹,可以在对应层级单独配置权限,缩小权限范围,更符合受控环境的要求
内容的提问来源于stack exchange,提问作者timdadev
相关产品推荐
相关产品推荐

