如何在 ARM 模板中获取用户分配身份的客户端 ID?

Posted

技术标签:

【中文标题】如何在 ARM 模板中获取用户分配身份的客户端 ID?【英文标题】:How to get client id of user assigned identity in an ARM template? 【发布时间】:2021-04-02 16:20:39 【问题描述】:

试图在 azure ARM 模板中获取用户分配的身份的 ClientID。

我使用此行,它适用于其他属性,但不适用于 clientid。

"USER_ASSIGNED_IDENTITY_CLIENT_ID": "[reference(variables('IdentityName'), '2018-11-30', 'full').clientId]"

我认为可以使用“完整”客户端 ID。客户端 ID 列在顶部的门户页面上,但不在属性列表中:(

这适用于用户分配的而非系统分配的身份。

有什么想法吗?

【问题讨论】:

【参考方案1】:

这行得通,

[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('IdentityName'))).clientId]

【讨论】:

【参考方案2】:

当您获得系统分配的身份主体 ID 时,您可以像这样使用reference

reference(variables('IdentityName'), '2018-11-30', 'full').identity.principalId

系统分配的身份不是一个单独的资源,所以它直接在身份中显示主体ID。但是用户分配的标识是 Azure 中存在的资源,所以它在标识中显示如下:

如果您获取资源标识并显示其客户端 ID,也许更合适。

更新

您可以获得所有用户分配的身份属性:

reference(variables('IdentityName'), '2018-11-30', 'full').identity.userAssignedIdentities

但是当你需要获取它的client id时,你需要使用resource id作为属性名。我认为你没有办法在模板中做到这一点。

【讨论】:

你是说在引用函数中我应该使用 ResourceID 而不是资源名称,如此处所示。 reference(resourceName or resourceIdentifier, [apiVersion], ['Full']) @WiredLessInTX 我不是这个意思。我的意思是获取信息的引用是正确的,但是您需要获取信息的属性,并且该属性取决于用户分配的身份。它是 Azure 中的一种资源。就像答案中显示的屏幕截图一样。 userAssignedIdentities的属性很难得到。 在查看用户身份本身的可用属性时,它没有我想要的客户端。除非你向我展示这条线的样子,否则我看不出你的回答有什么帮助。但是感谢您的尝试! @WiredLessInTX 它没有帮助吗?您想获取用户分配身份的客户端 ID,我已经向您展示了它在属性中的样子。 ClientID 不在属性列表中

以上是关于如何在 ARM 模板中获取用户分配身份的客户端 ID?的主要内容,如果未能解决你的问题,请参考以下文章

在ARM模板中为私有nuget feed添加身份验证

ARM - 如何从存储帐户获取访问密钥,以便稍后在模板中的 AppSettings 中使用?

如何在 Windows 窗体应用程序中获取 *** 用户的当前用户身份?

为具有身份验证的应用服务部署 ARM 模板时自动创建应用服务标识

如何配置 ActiveMQ 以将“匿名”用户和角色分配给未经身份验证的用户

如何获取Azure App Service的特定用户分配的托管服务标识的令牌?