在 ARM 模板中引用 Azure AD 服务主体 ID
Posted
技术标签:
【中文标题】在 ARM 模板中引用 Azure AD 服务主体 ID【英文标题】:Referencing an Azure AD service principal ID within an ARM template 【发布时间】:2021-11-09 02:22:44 【问题描述】:有没有办法通过内置的 ARM 模板函数获取 Azure AD 服务主体 ID?我正在寻找与 Get-AzADServicePrincipal -DisplayName "Azure Service Fabric Resource Provider"
等效的 ARM 并画一个空白。
上下文:我正在关注a tutorial on deploying a Service Fabric managed cluster using an existing load balancer,本教程要求您运行 powershell 命令以获取资源提供者的服务主体 ID,然后在 ARM 模板中对所述 ID 进行硬编码。此 ID 预计因租户而异,同一模板将部署到多个租户。
【问题讨论】:
不,您无法从 ARM 获取 AAD 对象。这些是不同的 API。最适合您的选择是将 SP ID 作为 ARM 模板的参数传递。 【参考方案1】:对于某些 Azure 资源,您可以使用 reference
template function with the full
parameter 检索身份属性。
但是,在 ARM 中没有检索服务主体 ID 的通用方法。 Get-AzADServicePrincipal
powershell cmdlet 需要 Azure AD 图形权限,目前无法授予用户在 ARM 模板中分配的 MSI。
【讨论】:
【参考方案2】:我们可以将资源提供者命名空间用作 Microsoft.ServiceFabric
另外,可以通过下面的方式来获取principal id,只需要传递几个参数。
[reference(concat(resourceId('Microsoft.Web/sites', variables('uniqueResourceNameBase')), '/providers/Microsoft.ManagedIdentity/Identities/default'), '2015-08-31-PREVIEW').principalId]
参考模板如下:
"type": "Microsoft.KeyVault/vaults",
"name": "[variables('uniqueResourceNameBase')]",
"apiVersion": "2016-10-01",
"location": "[resourceGroup().location]",
"properties":
"sku":
"family": "A",
"name": "standard"
,
"tenantId": "[subscription().tenantid]",
"accessPolicies": [
"tenantId": "[subscription().tenantid]",
"objectId": "[reference(concat(resourceId('Microsoft.Web/sites', variables('uniqueResourceNameBase')), '/providers/Microsoft.ManagedIdentity/Identities/default'), '2015-08-31-PREVIEW').principalId]",
"permissions":
"keys": [],
"secrets": [
"get"
],
"certificates": []
],
"enabledForDeployment": false,
"enabledForDiskEncryption": false,
"enabledForTemplateDeployment": false
,
"dependsOn": [
"[resourceId('Microsoft.Web/sites', variables('uniqueResourceNameBase'))]"
]
注意:根据您的要求修改资源提供者命名空间和参数。
【讨论】:
以上是关于在 ARM 模板中引用 Azure AD 服务主体 ID的主要内容,如果未能解决你的问题,请参考以下文章
在 Service Fabric AD 应用程序上分配服务主体管理员角色
如何使用 Azure ARM 模板将 VM 部署到资源组“A”并引用资源组“B”中的现有密钥保管库?