在 ARM 模板中引用 Azure AD 服务主体 ID
Referencing an Azure AD service principal ID within an ARM template
有没有办法通过内置的 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预计会因租户而异,同一个模板会部署到多个租户。
我们可以使用 Resource Provider Namespace 作为 Microsoft.ServiceFabric
另外,可以通过下面的方式获取原理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'))]"
]
}
注意:根据您的要求修改资源提供程序命名空间和参数。
对于某些 Azure 资源,您可以使用 reference
template function with the full
parameter 检索身份属性。
但是,在 ARM 中没有检索服务主体 ID 的通用方法。 Get-AzADServicePrincipal
powershell cmdlet 需要 Azure AD 图形权限,目前无法授予 ARM 模板中用户分配的 MSI。
有没有办法通过内置的 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预计会因租户而异,同一个模板会部署到多个租户。
我们可以使用 Resource Provider Namespace 作为 Microsoft.ServiceFabric
另外,可以通过下面的方式获取原理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'))]"
]
}
注意:根据您的要求修改资源提供程序命名空间和参数。
对于某些 Azure 资源,您可以使用 reference
template function with the full
parameter 检索身份属性。
但是,在 ARM 中没有检索服务主体 ID 的通用方法。 Get-AzADServicePrincipal
powershell cmdlet 需要 Azure AD 图形权限,目前无法授予 ARM 模板中用户分配的 MSI。