如何以编程方式为Azure Data Factory分配用户分配托管标识
为Azure Data Factory编程分配用户分配托管标识的实现方案
给ADF绑定用户分配托管标识(UAMI)的核心逻辑是更新ADF资源本身的identity属性,将目标UAMI的资源ID加入ADF的托管标识关联列表,这步操作完全可以通过自动化方式实现,不需要手动进入控制台操作。以下是几种常用实现方式:
方式1:ARM/Bicep模板部署(推荐,可与后续凭据、链接服务部署流程合并)
如果本身就用ARM模板部署后续的凭据、链接服务,直接把ADF资源的标识配置更新合并到同一模板做增量部署即可,不需要单独拆分步骤。
ARM模板中ADF资源的配置片段如下:
{ "type": "Microsoft.DataFactory/factories", "apiVersion": "2018-06-01", "name": "[parameters('adfName')]", "location": "[parameters('location')]", "identity": { "type": "SystemAssigned,UserAssigned", "userAssignedIdentities": { "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('targetUamiName'))]": {} } } // 其余ADF原有配置保持不变即可 }
注意:如果ADF此前已经开启系统分配托管标识,
type字段必须保留SystemAssigned值,否则增量部署时会删除原有系统分配托管标识;如果不需要保留系统标识,直接将type设为UserAssigned即可。
ADF资源更新部署完成后,再顺序部署凭据、Synapse链接服务资源,就不会触发"The referenced user assigned managed identity in the credential is not associated with the factory"报错。
方式2:Azure CLI 脚本实现
轻量脚本场景下直接调用CLI更新命令即可:
# 登录并指定目标订阅 az login az account set --subscription "<订阅ID>" # 为现有ADF绑定目标UAMI az datafactory update \ --name "<ADF实例名称>" \ --resource-group "<ADF所在资源组名称>" \ --assign-identity "/subscriptions/<订阅ID>/resourceGroups/<UAMI所在资源组名称>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<UAMI名称>"
如果需要同时保留系统分配托管标识,在命令末尾追加--assign-identity [system]参数即可。
方式3:Azure PowerShell 实现
使用Az模块的ADF更新命令完成绑定:
# 登录并指定目标订阅 Connect-AzAccount Set-AzContext -SubscriptionId "<订阅ID>" # 获取目标UAMI资源 $targetUami = Get-AzUserAssignedIdentity -ResourceGroupName "<UAMI所在资源组名称>" -Name "<UAMI名称>" # 更新ADF标识配置 Update-AzDataFactoryV2 -ResourceGroupName "<ADF所在资源组名称>" -Name "<ADF实例名称>" -IdentityType "SystemAssigned,UserAssigned" -UserAssignedIdentity $targetUami.Id
方式4:REST API 调用实现
自定义代码场景下可直接调用Azure资源管理REST接口完成更新:
- 先获取Azure AD访问令牌,令牌权限范围设置为
https://management.azure.com/.default - 向ADF资源端点发送PATCH请求:
PATCH https://management.azure.com/subscriptions/{订阅ID}/resourceGroups/{ADF资源组名}/providers/Microsoft.DataFactory/factories/{ADF实例名}?api-version=2018-06-01 - 请求体示例:
{ "identity": { "type": "UserAssigned", "userAssignedIdentities": { "/subscriptions/{订阅ID}/resourceGroups/{UAMI资源组名}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{UAMI名称}": {} } } }
注意事项
- 上述任意操作执行完成后,建议等待10-20秒再部署后续的凭据、链接服务资源,避免ADF侧标识配置同步延迟触发报错。
- 绑定完成后不需要额外做其他ADF侧配置,创建凭据时直接引用已绑定的UAMI资源ID即可正常连接Synapse。
内容的提问来源于stack exchange,提问作者Adam Łepkowski
相关产品推荐
相关产品推荐

