使用角色分配增量重新部署 ARM 模板会引发错误

Incremental redeployment of an ARM Template with Role Assignments throws an error

如果我使用 Azure Pipelines 对包含角色分配的 ARM 模板进行 'Incremental' 'Resource Group' 范围部署,似乎我无法 rerun/redeploy 管道而不会收到错误在角色分配资源上:

RoleAssignmentUpdateNotPermitted: Tenant ID, application ID, principal ID, and scope are not allowed to be updated.

这看起来是一个明显的问题,必须有一个共同的解决方法? 我应该将角色分配分解成一个单独的模板,并可能删除并重新创建每个部署的角色分配?

Incremental redeployment of an ARM Template with Role Assignments throws an error

正如你所说,这是一个显而易见的问题。对于相同的范围或资源,您只能将相同的角色分配给服务主体一次。

因此,现有的角色分配与您尝试通过此模板创建的名称相同,最终会出现“RoleAssignmentUpdateNotPermitted”的错误。

要解决这个问题,我们需要确保每次部署到不同的资源组时使用不同的 GUID 进行角色分配,但同时要确保在部署到同一资源组时使用相同的 GUID .

我们可以使用guid功能!它接受一个或多个用于计算哈希的字符串,非常类似于 uniquestring 函数;只有这个生成 GUID 格式的字符串:

{
  "type": "Microsoft.Authorization/roleAssignments",
  "name": "[guid(resourceGroup().id, 'monitoringUsers')]"
}

您可以参考文档 Defining RBAC Role Assignments in ARM Templates 了解更多详情。