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

如何通过Azure Bicep一键部署到租户/管理组下所有订阅?

可行方案:单阶段Bicep部署实现跨订阅ASC策略豁免

可以通过管理组/租户级嵌套部署+Azure资源图查询+部署脚本实现单阶段部署,无需提前手动生成订阅列表。核心思路是在部署过程中动态查询目标范围内的所有订阅,再循环对每个订阅执行策略豁免操作。

实现步骤与代码示例

1. 根模板(管理组/租户级别)

该模板负责查询订阅列表,并触发每个订阅的豁免部署:

targetScope = 'managementGroup' // 需部署到管理组,若要覆盖整个租户,改为'tenant'

param targetManagementGroupId string = '你的管理组ID' // 租户级别部署可删除此参数

// 部署脚本:通过资源图查询订阅ID列表
resource getSubscriptions 'Microsoft.Resources/deploymentScripts@2020-10-01' = {
  name: 'FetchSubscriptions'
  location: 'eastus'
  kind: 'AzureCLI'
  properties: {
    azCliVersion: '2.50.0'
    scriptContent: '''
      # 构造查询语句,管理组级别添加过滤条件
      QUERY="ResourceContainers | where type == 'microsoft.resources/subscriptions'"
      if [ -n "${targetManagementGroupId}" ]; then
        QUERY="$QUERY and managementGroupId == '${targetManagementGroupId}'"
      fi
      QUERY="$QUERY | project id"
      
      # 执行查询并输出JSON格式结果
      az graph query -q "$QUERY" --output json
    '''
    timeout: 'PT10M'
    cleanupPreference: 'Always'
  }
}

// 解析查询结果为订阅ID数组
output subscriptionIds array = json(getSubscriptions.properties.outputs).data

// 循环部署订阅级豁免模板
module ascExemption './asc-exemption.bicep' = [for subId in subscriptionIds: {
  name: "ASC-Exemption-${subId}"
  scope: subscription(subId)
}]

2. 订阅级豁免模板

该模板负责针对单个订阅找到"ASC Default"计划并添加指定策略豁免:

targetScope = 'subscription'

// 引用已存在的ASC Default策略分配
resource ascDefaultPolicyAssignment 'Microsoft.Authorization/policyAssignments@2022-06-01' existing = {
  name: 'ASC Default'
}

// 创建策略豁免
resource ascPolicyExemption 'Microsoft.Authorization/policyExemptions@2022-06-01' = {
  name: 'Exempt-Non-Applicable-ASC-Policies'
  properties: {
    policyAssignmentId: ascDefaultPolicyAssignment.id
    exemptionCategory: 'Waiver' // 可选值:Waiver(豁免)/Mitigated(缓解)
    displayName: '豁免ASC Default中不适用的策略'
    description: '针对当前订阅业务场景,豁免部分ASC默认策略'
    // 替换为你需要豁免的策略引用ID(从ASC计划定义中获取)
    policyDefinitionReferenceIds: [
      'ASC-Policy-Reference-ID-1'
      'ASC-Policy-Reference-ID-2'
    ]
  }
}

关键注意事项

  • 权限要求:执行部署的账户需要具备:
    • 管理组/租户级别的Microsoft.ResourceGraph/queries/run权限
    • 每个目标订阅的Microsoft.Authorization/policyExemptions/write权限
  • 策略引用ID获取:可通过Azure门户查看"ASC Default"计划的策略列表,或使用CLI命令:
    az policy definition show --name <ASC计划ID> --query 'policyDefinitions[*].policyDefinitionReferenceId'
    
  • 部署命令:根模板需通过管理组或租户级部署命令执行:
    # 管理组级别部署
    az deployment mg create --management-group-id <你的管理组ID> --template-file deploy.bicep --location eastus
    
    # 租户级别部署
    az deployment tenant create --template-file deploy.bicep --location eastus
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:23:18