如何使用 Arm 模板在应用服务中获取主体 ID?

Nir*_*ole 1 azure azure-active-directory azure-resource-manager azure-web-app-service

嗨,我正在编写 ARM 模板来部署我的应用程序服务。我想在我的 arm 模板中创建系统标识。在应用程序服务臂模板部分,我有以下代码。

"identity": {
                "principalId": "[reference(variables('identity_resource_id'), '2017-12-01', 'Full').identity.principalId]",
                "tenantId": "[parameters('tenantId')]",
                "type": "SystemAssigned"
            }
Run Code Online (Sandbox Code Playgroud)

然后在可变部分我添加

"appServiceNameFrontEnd": "[concat(variables('defaultConvention'),'03-','FrontEnd')]"
"identity_resource_id": "[concat(resourceId('Microsoft.Web/sites', variables('appServiceNameFrontEnd')), '/providers/Microsoft.ManagedIdentity/Identities/default')]"
Run Code Online (Sandbox Code Playgroud)

每当我尝试运行它时,我都会收到以下错误

##[错误]部署模板验证失败:'1'行和'10436'列的模板资源'FrontEnd'无效:此位置不需要模板函数'reference'。请参阅 https://aka.ms/arm-template-expressions了解使用详情..

有人可以帮助我如何获得系统分配的身份吗?任何帮助将不胜感激。谢谢

juu*_*nas 7

您不能为系统分配的身份指定 id。有效的模板是:

"identity": {
    "type": "SystemAssigned"
}
Run Code Online (Sandbox Code Playgroud)

租户 ID 将始终是链接到订阅的租户。如果你在其他地方需要它,你可以使用[subscription().tenantId]. 要在其他地方访问系统分配标识的 objectId,您可以使用例如:

"objectId": "[reference(resourceId('Microsoft.Web/sites', variables('appServiceNameFrontEnd')), '2016-08-01', 'Full').identity.principalId]",
Run Code Online (Sandbox Code Playgroud)

(请记住将应用服务指定为对资源的依赖,以便仅在应用服务部署后才部署它)