如何在ARM模板中为托管身份分配应用程序角色

时间:2020-07-24 19:56:52

标签: azure-active-directory azure-resource-manager azure-rbac

我有以下情况。
我的应用程序注册定义了一组应用程序角色
我通过ARM模板动态部署了具有系统分配的受管理身份的规模集。
在部署期间,我想将该身份分配给上面定义的特定应用程序角色之一

我使用以下资源更新部署模板

   {
            "type": "Microsoft.Authorization/roleAssignments",
            "apiVersion": "2017-09-01",
            "name": "<random Guid>",
            "dependsOn": [
                "[concat('Microsoft.Compute/virtualMachineScaleSets/', '<scaleset name>')]"
            ],
            "properties": {
                
                "roleDefinitionId": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', '<app role guid>')]",
                "principalId": "[reference(resourceId('Microsoft.Compute/virtualMachineScaleSets', '<scaleset name>'), '2019-07-01', 'Full').Identity.principalId]",
                "scope": "[resourceGroup().id]"
            }
}

但是部署失败,但出现以下异常

The specified role definition with ID '<app role guid>' does not exist.

我的假设是,应用程序角色定义ID的格式不正确,但是我在ARM模板中找不到这种方法分配的任何示例。

这甚至有可能吗?

1 个答案:

答案 0 :(得分:2)

这是您如何执行此操作的示例 https://docs.microsoft.com/en-us/azure/role-based-access-control/role-assignments-template#new-service-principal

您将需要添加一个principalType的Serviceprincipal,这是因为根据文档,创建新的serviceprincipal时很容易会有延迟,因此如果不这样做,它将失败。

编辑:对不起,我没有意识到您正在尝试进行应用角色分配。 我认为手臂模板当前不支持此功能。您可以使用roleassignment分配的rbac角色不是应用程序角色。例如。您目前无法在Arm模板中分配应用程序角色,而只能为内置于Azure资源中的角色创建的Azure不分配给应用程序或Azure广告角色。 供参考https://github.com/MicrosoftDocs/azure-docs/issues/51914#issuecomment-612867662

您可能能够解决并执行类似操作的唯一方法可能是通过部署脚本,该脚本在可能的情况下在arm模板中运行powershell命令。