在 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。