首次运行系统分配的托管标识的Azure ARM角色分配失败

首次运行系统分配的托管标识的Azure ARM角色分配失败,azure,azure-resource-manager,azure-managed-identity,Azure,Azure Resource Manager,Azure Managed Identity,我的目标是部署一个具有系统管理标识和该标识的角色分配的逻辑应用程序。优选地,这在一个ARM模板中完成 我的安装程序第一次运行失败,但连续运行成功。如果我错了,请纠正我,但我认为这是因为角色分配的部署发生在逻辑应用程序的托管标识“就绪”之前,因此我在第一次部署模板时遇到以下错误。我在第二次部署模板时没有遇到此错误,可能是因为该标识当时已经存在 { “代码”:“部署失败”, “消息”:“至少一个资源部署操作失败。有关详细信息,请列出部署操作。请参阅。”https://aka.ms/DeployOpe

我的目标是部署一个具有系统管理标识和该标识的角色分配的逻辑应用程序。优选地,这在一个ARM模板中完成

我的安装程序第一次运行失败,但连续运行成功。如果我错了,请纠正我,但我认为这是因为角色分配的部署发生在逻辑应用程序的托管标识“就绪”之前,因此我在第一次部署模板时遇到以下错误。我在第二次部署模板时没有遇到此错误,可能是因为该标识当时已经存在

{
“代码”:“部署失败”,
“消息”:“至少一个资源部署操作失败。有关详细信息,请列出部署操作。请参阅。”https://aka.ms/DeployOperations 有关使用详情。”,
“详情”:[
{
“代码”:“PrincipalNotFound”,
“消息”:“主体***在目录***中不存在。”
}
]
}
我的模板(为简洁起见删除了逻辑应用程序定义)。在这种情况下,逻辑应用程序的标识需要访问位于另一个资源组中的存储帐户

{
“$schema”:”https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
“内容版本”:“1.0.0.0”,
“参数”:{
“logicAppName”:{
“类型”:“字符串”
},
“storageAccountResourceGroup”:{
“类型”:“字符串”
},
“storageAccountName”:{
“类型”:“字符串”
}
},
“变量”:{
“logicAppResourceId:“[resourceId('Microsoft.Logic/workflows',parameters('logicAppName'))]”,
“存储Blob数据贡献者”:“[subscriptionResourceId('Microsoft.Authorization/roleDefinitions','ba92f5b4-2d11-453d-a403-e96b0029c9fe')”
},
“资源”:[
{
“类型”:“Microsoft.Logic/workflows”,
“apiVersion”:“2017-07-01”,
“名称”:“[参数('logicAppName')]”,
“位置”:“[resourceGroup().location]”,
“身份”:{
“类型”:“系统分配”
},
“财产”:{
“状态”:“已启用”,
“定义”:{
...    
}
}
},
{
“类型”:“Microsoft.Resources/deployments”,
“名称”:“[concat('RoleAssignment-',parameters('logicAppName'))]”,
“apiVersion”:“2020-06-01”,
“资源组”:“[参数('storageAccountResourceGroup')]”,
“subscriptionId:“[subscription().subscriptionId]”,
“dependsOn”:[
“[参数('logicAppName')]”
],
“财产”:{
“模式”:“增量”,
“模板”:{
“$schema”:”https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
“内容版本”:“1.0.0.0”,
“资源”:[
{
“apiVersion”:“2018-09-01-preview”,
“类型”:“Microsoft.Storage/storageAccounts/providers/roleAssignments”,
“名称”:“[concat(parameters('storageAccountName'),'/Microsoft.Authorization/',guid(subscription().subscriptionId,parameters('logicAppName'))]”,
“财产”:{
“roleDefinitionId:“[variables('Storage Blob Data Contributor')”,
“principalId”:“[参考(变量('logicAppResourceId'),'2019-05-01','Full')。标识。principalId]”
}
}
]
}
}
}
]
}
正如您在模板中看到的,我在logic应用程序本身上添加了一个dependsOn。但这似乎不够

有人能解决这个问题吗

谢谢大家!

我在这里找到了答案:


添加
“principalType”:“ServicePrincipal”

尝试查看@KenWMSFT及其帮助方式。首先,类型应为“类型”:“Microsoft.Authorization/roleAssignments”,而不是“类型”:“Microsoft.Storage/storageAccounts/providers/roleAssignments”。用户似乎正在尝试更新存储帐户,而不是创建新的角色分配。该类型将作为“Microsoft.storage/storageAccounts/providers/roleAssignments”使用,这是扩展资源(此roleAssignment为)允许的语法之一。使用scope属性也可以: