在使用新的MSI特性部署Microsoft.Web资源时,所创建用户的principleId GUID在部署后可见。下面的屏幕截图显示了ARM模板中的结构。

以后在管道中获取此GUID以便能够在(例如) Data Lake Store中分配访问权限的最佳方式是什么?
是否可以使用任何现有的ARM模板函数来执行此操作?
发布于 2017-09-27 09:04:57
我自己也在努力解决这个问题。对我有效的解决方案是在评论here中找到的。
从本质上讲,您可以创建一个变量,以MSI支持创建的资源为目标。然后,您可以使用该变量获取特定的tenantId和principalId值。不是很理想,但它是有效的。在我的示例中,我正在为Function App配置Key Vault权限。
要创建该变量,请使用以下语法。
"variables": {
"identity_resource_id": "[concat(resourceId('Microsoft.Web/sites', variables('appName')), '/providers/Microsoft.ManagedIdentity/Identities/default')]"
}要获取tenantId和principalId的实际值,请使用以下语法引用它们:
{
"tenantId": "[reference(variables('identity_resource_id'), '2015-08-31-PREVIEW').tenantId]",
"objectId": "[reference(variables('identity_resource_id'), '2015-08-31-PREVIEW').principalId]"
}希望这篇文章能帮助任何遇到同样问题的人!
发布于 2017-09-19 01:19:17
下面是一些示例模板:https://github.com/rashidqureshi/MSI-Samples,它展示了a)如何授予RBAC对ARM资源的访问权限b)如何使用MSI为keyvault创建访问策略
发布于 2021-02-09 20:50:55
有获取身份信息的new way。您可以直接从支持Azure资源的托管标识的资源中获取它们(过去的托管服务标识)。
{
"tenantId": "[reference(resourceId('Microsoft.Web/sites', variables('serviceAppName')),'2019-08-01', 'full').identity.tenantId]",
"objectId": "[reference(resourceId('Microsoft.Web/sites', variables('serviceAppName')),'2019-08-01', 'full').identity.principalId]",
}您还可以获取其他资源组或/和订阅中资源的主体Id。ResourceId支持可选参数:
"tenantId": "[reference(resourceId(variables('resourceGroup'), 'Microsoft.Web/sites', variables('serviceAppName')),'2019-08-01', 'full').identity.tenantId]",或
"tenantId": "[reference(resourceId(variables('subscription'), variables('resourceGroup'), 'Microsoft.Web/sites', variables('serviceAppName')),'2019-08-01', 'full').identity.tenantId]",https://stackoverflow.com/questions/46278046
复制相似问题