如何在Azure DevOps部署中为Function App动态添加用户分配托管标识?
解决Azure Function用户分配托管标识动态配置问题
先修正ARM模板参数化错误
你提供的模板片段中,concat表达式缺少闭合括号,这是导致参数化失败的直接原因。ARM本身支持动态对象键的参数化写法,修改后的userAssignedIdentities部分如下:
"userAssignedIdentities": { "[concat('/subscriptions/', parameters('SubscriptionID'), '/resourcegroups/', parameters('ResourceGroup'),'/providers/Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('UserAssignedManagedEntityName'))]": {} }
部署时只需传入对应环境的SubscriptionID、ResourceGroup、UserAssignedManagedEntityName参数值,即可实现多环境的动态配置。
Azure DevOps部署期间动态配置的补充方案
如果需要在DevOps流程中更灵活地控制标识配置,可采用以下两种方式:
方式1:使用ARM模板变量替换
- 在ARM模板中给用户分配标识的键设置占位符:
"userAssignedIdentities": { "__USER_ASSIGNED_IDENTITY__": {} } - 在Azure DevOps的ARM模板部署任务中,开启「替换模板中的变量」选项,添加变量映射:
- 变量名:
__USER_ASSIGNED_IDENTITY__ - 值:
/subscriptions/$(SubscriptionID)/resourcegroups/$(ResourceGroup)/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$(UserAssignedManagedEntityName)
其中$(SubscriptionID)等变量可来自DevOps变量组或流水线变量,根据不同环境切换取值。
- 变量名:
方式2:部署后用Azure CLI添加
若不想修改现有模板,可在ARM部署完成后添加Azure CLI任务,动态追加用户分配标识:
- 先部署仅包含系统分配标识的Function App,模板中
identity部分改为:"identity": { "type": "SystemAssigned" } - 在Azure DevOps中添加Azure CLI任务,运行以下命令:
该命令会保留原有的系统分配标识,并添加指定的用户分配标识。az functionapp identity assign \ --resource-group $(ResourceGroup) \ --name $(FunctionAppName) \ --identities $(UserAssignedIdentityResourceId)$(UserAssignedIdentityResourceId)为对应环境的用户分配标识完整资源ID,通过DevOps变量传入即可。
内容的提问来源于stack exchange,提问作者wilson_smyth
相关产品推荐
相关产品推荐

