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

如何在Bicep中获取Synapse服务主体App ID并添加为AAS管理员

问题场景

使用Bicep部署Azure服务时,为Synapse工作区配置SystemAssigned类型的系统分配托管标识后,Azure会自动创建关联的企业应用(服务主体),包含名称、对象ID(object id)、应用ID(app id),该标识是Synapse管道处理Azure Analysis Services任务的必要前提。

Synapse工作区的基础部署代码如下:

//Create Synapse Analytics
resource synapseAnalytics 'Microsoft.Synapse/workspaces@2021-06-01' = {
  name: synapse_name
  location: region
  identity: {
    type: 'SystemAssigned'
  }
  properties: {
    defaultDataLakeStorage: {
      filesystem: storage_account_fileshare_name
      resourceId: storageAccount.id
      accountUrl: storage_account_url
      createManagedPrivateEndpoint: true
    }
    managedVirtualNetwork: 'default'
    publicNetworkAccess: 'Enabled'
    managedResourceGroupName: synapse_workspace_name
    azureADOnlyAuthentication: false
    cspWorkspaceAdminProperties: {
      initialWorkspaceAdminObjectId: xxxx
    }
  }
  dependsOn: [
    storageAccountFileshare
  ]
}

需求是在Bicep代码内直接获取该自动生成的托管标识对应的App ID,将其添加为Azure Analysis Service(AAS)的管理员,AAS的部署代码占位如下:

resource analysisServices 'Microsoft.AnalysisServices/servers@2017-08-01' = {
  name: anaylsis_services_name
  location: region
  sku: {
    name: 'B1'
    tier: 'Basic'
    capacity: 1
  }
  properties: {
    asAdministrators: {
      members: [
        'obj:xxxxxx-xxxxxx-xxxxx-xxxxx@xxxxx-xxx-xxxxx-xxxxx'
        'app:{GET APP ID OF SYNAPSE}' // 需要在此处填入Synapse托管标识的App ID
      ]
    }
    managedMode: 1
  }
}

已知可以通过Azure CLI命令手动查询App ID,但该命令需要传入托管标识的对象ID作为参数,部署前无法提前获取该值,因此无法提前执行命令取值:

az ad sp show --id {object-id} --query appId
实现方法

Synapse工作区创建完成后,资源的identity.principalId属性会直接返回系统分配托管标识对应服务主体的对象ID,你只需要在Bicep中通过existing关键字引用该服务主体资源,即可直接读取到对应的App ID,不需要提前执行命令查询。

  1. 首先在Synapse资源声明后,添加对托管标识对应服务主体的引用(使用官方推荐的Microsoft Graph资源类型,旧版Azure AD资源类型已弃用):
// 引用Synapse系统分配托管标识对应的Azure AD服务主体
resource synapseManagedIdentitySp 'Microsoft.Graph/servicePrincipals@v1.0' existing = {
  id: synapseAnalytics.identity.principalId
}
  1. 之后直接在AAS的管理员配置中,通过synapseManagedIdentitySp.appId取值即可,修改后的AAS配置代码如下:
resource analysisServices 'Microsoft.AnalysisServices/servers@2017-08-01' = {
  name: anaylsis_services_name
  location: region
  sku: {
    name: 'B1'
    tier: 'Basic'
    capacity: 1
  }
  properties: {
    asAdministrators: {
      members: [
        'obj:xxxxxx-xxxxxx-xxxxx-xxxxx@xxxxx-xxx-xxxxx-xxxxx'
        'app:${synapseManagedIdentitySp.appId}'
      ]
    }
    managedMode: 1
  }
}

注意事项

  • 执行Bicep部署的身份(用户账号/部署用服务主体)需要拥有Microsoft Graph的Application.Read.All权限,否则读取服务主体属性时会返回403权限错误。
  • 不需要手动给AAS资源和Synapse资源添加dependsOn依赖配置,Bicep会自动识别资源间的引用关系,按正确顺序执行部署。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:18:16