You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过ARM模板内置函数获取Azure AD服务主体ID

ARM模板获取Azure AD服务主体ID的方案说明

核心能力结论

原生ARM模板的内置函数不支持直接查询获取Azure AD服务主体ID,ARM内置函数的作用域仅覆盖Azure资源管理层级,无法直接调用Microsoft Graph接口查询AAD实体信息,因此不存在和Get-AzADServicePrincipal -DisplayName "Azure Service Fabric Resource Provider"直接等价的ARM内置函数实现。

跨租户无硬编码部署替代方案

针对你需要多租户部署、避免硬编码服务主体ID的需求,可采用以下ARM原生支持的方案实现:

  • 使用ARM原生deploymentScripts资源实现运行时查询
    你可以在ARM模板中声明Microsoft.Resources/deploymentScripts类型资源,在部署流程中内嵌PowerShell脚本查询服务主体ID,输出结果后直接供模板后续资源调用,无需提前手动查询硬编码,示例模板片段如下:
{
  "type": "Microsoft.Resources/deploymentScripts",
  "apiVersion": "2020-10-01",
  "name": "getSFRPServicePrincipalId",
  "location": "[resourceGroup().location]",
  "kind": "AzurePowerShell",
  "identity": {
    "type": "SystemAssigned"
  },
  "properties": {
    "azPowerShellVersion": "8.0",
    "scriptContent": "
      $sfRpSp = Get-AzADServicePrincipal -DisplayName \"Azure Service Fabric Resource Provider\"
      $DeploymentScriptOutputs['sfRpSpObjectId'] = $sfRpSp.Id
    ",
    "cleanupPreference": "OnSuccess",
    "retentionInterval": "PT1H"
  }
}

后续在模板中需要使用服务主体ID的位置,直接引用部署脚本的输出即可:[reference('getSFRPServicePrincipalId').outputs.sfRpSpObjectId]
注意:部署脚本使用的系统分配托管身份默认具备租户内普通成员权限,足以查询第一方资源提供方的服务主体信息,无需额外配置AAD权限。

内容的提问来源于stack exchange,提问作者giaour

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 14:15:01